Merge "Removing FlakyTest annotation as this test is no longer flaky." into androidx-main
diff --git a/activity/activity-compose/api/1.6.0-beta01.txt b/activity/activity-compose/api/1.6.0-beta01.txt
new file mode 100644
index 0000000..66989c4
--- /dev/null
+++ b/activity/activity-compose/api/1.6.0-beta01.txt
@@ -0,0 +1,40 @@
+// Signature format: 4.0
+package androidx.activity.compose {
+
+  public final class ActivityComposeUtilsKt {
+  }
+
+  public final class ActivityResultRegistryKt {
+    method @androidx.compose.runtime.Composable public static <I, O> androidx.activity.compose.ManagedActivityResultLauncher<I,O> rememberLauncherForActivityResult(androidx.activity.result.contract.ActivityResultContract<I,O> contract, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> onResult);
+  }
+
+  public final class BackHandlerKt {
+    method @androidx.compose.runtime.Composable public static void BackHandler(optional boolean enabled, kotlin.jvm.functions.Function0<kotlin.Unit> onBack);
+  }
+
+  public final class ComponentActivityKt {
+    method public static void setContent(androidx.activity.ComponentActivity, optional androidx.compose.runtime.CompositionContext? parent, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  public final class LocalActivityResultRegistryOwner {
+    method @androidx.compose.runtime.Composable public androidx.activity.result.ActivityResultRegistryOwner? getCurrent();
+    method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.result.ActivityResultRegistryOwner> provides(androidx.activity.result.ActivityResultRegistryOwner registryOwner);
+    property @androidx.compose.runtime.Composable public final androidx.activity.result.ActivityResultRegistryOwner? current;
+    field public static final androidx.activity.compose.LocalActivityResultRegistryOwner INSTANCE;
+  }
+
+  public final class LocalOnBackPressedDispatcherOwner {
+    method @androidx.compose.runtime.Composable public androidx.activity.OnBackPressedDispatcherOwner? getCurrent();
+    method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.OnBackPressedDispatcherOwner> provides(androidx.activity.OnBackPressedDispatcherOwner dispatcherOwner);
+    property @androidx.compose.runtime.Composable public final androidx.activity.OnBackPressedDispatcherOwner? current;
+    field public static final androidx.activity.compose.LocalOnBackPressedDispatcherOwner INSTANCE;
+  }
+
+  public final class ManagedActivityResultLauncher<I, O> extends androidx.activity.result.ActivityResultLauncher<I> {
+    method public androidx.activity.result.contract.ActivityResultContract<I,?> getContract();
+    method public void launch(I? input, androidx.core.app.ActivityOptionsCompat? options);
+    method @Deprecated public void unregister();
+  }
+
+}
+
diff --git a/activity/activity-compose/api/public_plus_experimental_1.6.0-beta01.txt b/activity/activity-compose/api/public_plus_experimental_1.6.0-beta01.txt
new file mode 100644
index 0000000..66989c4
--- /dev/null
+++ b/activity/activity-compose/api/public_plus_experimental_1.6.0-beta01.txt
@@ -0,0 +1,40 @@
+// Signature format: 4.0
+package androidx.activity.compose {
+
+  public final class ActivityComposeUtilsKt {
+  }
+
+  public final class ActivityResultRegistryKt {
+    method @androidx.compose.runtime.Composable public static <I, O> androidx.activity.compose.ManagedActivityResultLauncher<I,O> rememberLauncherForActivityResult(androidx.activity.result.contract.ActivityResultContract<I,O> contract, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> onResult);
+  }
+
+  public final class BackHandlerKt {
+    method @androidx.compose.runtime.Composable public static void BackHandler(optional boolean enabled, kotlin.jvm.functions.Function0<kotlin.Unit> onBack);
+  }
+
+  public final class ComponentActivityKt {
+    method public static void setContent(androidx.activity.ComponentActivity, optional androidx.compose.runtime.CompositionContext? parent, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  public final class LocalActivityResultRegistryOwner {
+    method @androidx.compose.runtime.Composable public androidx.activity.result.ActivityResultRegistryOwner? getCurrent();
+    method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.result.ActivityResultRegistryOwner> provides(androidx.activity.result.ActivityResultRegistryOwner registryOwner);
+    property @androidx.compose.runtime.Composable public final androidx.activity.result.ActivityResultRegistryOwner? current;
+    field public static final androidx.activity.compose.LocalActivityResultRegistryOwner INSTANCE;
+  }
+
+  public final class LocalOnBackPressedDispatcherOwner {
+    method @androidx.compose.runtime.Composable public androidx.activity.OnBackPressedDispatcherOwner? getCurrent();
+    method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.OnBackPressedDispatcherOwner> provides(androidx.activity.OnBackPressedDispatcherOwner dispatcherOwner);
+    property @androidx.compose.runtime.Composable public final androidx.activity.OnBackPressedDispatcherOwner? current;
+    field public static final androidx.activity.compose.LocalOnBackPressedDispatcherOwner INSTANCE;
+  }
+
+  public final class ManagedActivityResultLauncher<I, O> extends androidx.activity.result.ActivityResultLauncher<I> {
+    method public androidx.activity.result.contract.ActivityResultContract<I,?> getContract();
+    method public void launch(I? input, androidx.core.app.ActivityOptionsCompat? options);
+    method @Deprecated public void unregister();
+  }
+
+}
+
diff --git a/navigation/navigation-compose/api/res-2.5.0-beta01.txt b/activity/activity-compose/api/res-1.6.0-beta01.txt
similarity index 100%
rename from navigation/navigation-compose/api/res-2.5.0-beta01.txt
rename to activity/activity-compose/api/res-1.6.0-beta01.txt
diff --git a/activity/activity-compose/api/restricted_1.6.0-beta01.txt b/activity/activity-compose/api/restricted_1.6.0-beta01.txt
new file mode 100644
index 0000000..66989c4
--- /dev/null
+++ b/activity/activity-compose/api/restricted_1.6.0-beta01.txt
@@ -0,0 +1,40 @@
+// Signature format: 4.0
+package androidx.activity.compose {
+
+  public final class ActivityComposeUtilsKt {
+  }
+
+  public final class ActivityResultRegistryKt {
+    method @androidx.compose.runtime.Composable public static <I, O> androidx.activity.compose.ManagedActivityResultLauncher<I,O> rememberLauncherForActivityResult(androidx.activity.result.contract.ActivityResultContract<I,O> contract, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> onResult);
+  }
+
+  public final class BackHandlerKt {
+    method @androidx.compose.runtime.Composable public static void BackHandler(optional boolean enabled, kotlin.jvm.functions.Function0<kotlin.Unit> onBack);
+  }
+
+  public final class ComponentActivityKt {
+    method public static void setContent(androidx.activity.ComponentActivity, optional androidx.compose.runtime.CompositionContext? parent, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  public final class LocalActivityResultRegistryOwner {
+    method @androidx.compose.runtime.Composable public androidx.activity.result.ActivityResultRegistryOwner? getCurrent();
+    method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.result.ActivityResultRegistryOwner> provides(androidx.activity.result.ActivityResultRegistryOwner registryOwner);
+    property @androidx.compose.runtime.Composable public final androidx.activity.result.ActivityResultRegistryOwner? current;
+    field public static final androidx.activity.compose.LocalActivityResultRegistryOwner INSTANCE;
+  }
+
+  public final class LocalOnBackPressedDispatcherOwner {
+    method @androidx.compose.runtime.Composable public androidx.activity.OnBackPressedDispatcherOwner? getCurrent();
+    method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.OnBackPressedDispatcherOwner> provides(androidx.activity.OnBackPressedDispatcherOwner dispatcherOwner);
+    property @androidx.compose.runtime.Composable public final androidx.activity.OnBackPressedDispatcherOwner? current;
+    field public static final androidx.activity.compose.LocalOnBackPressedDispatcherOwner INSTANCE;
+  }
+
+  public final class ManagedActivityResultLauncher<I, O> extends androidx.activity.result.ActivityResultLauncher<I> {
+    method public androidx.activity.result.contract.ActivityResultContract<I,?> getContract();
+    method public void launch(I? input, androidx.core.app.ActivityOptionsCompat? options);
+    method @Deprecated public void unregister();
+  }
+
+}
+
diff --git a/activity/activity-ktx/api/1.5.0-beta01.txt b/activity/activity-ktx/api/1.5.0-beta01.txt
index 822d245..0a94311 100644
--- a/activity/activity-ktx/api/1.5.0-beta01.txt
+++ b/activity/activity-ktx/api/1.5.0-beta01.txt
@@ -18,7 +18,7 @@
 package androidx.activity.contextaware {
 
   public final class ContextAwareKt {
-    method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R>);
+    method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R> p);
   }
 
 }
diff --git a/activity/activity-ktx/api/1.6.0-beta01.txt b/activity/activity-ktx/api/1.6.0-beta01.txt
new file mode 100644
index 0000000..822d245
--- /dev/null
+++ b/activity/activity-ktx/api/1.6.0-beta01.txt
@@ -0,0 +1,44 @@
+// Signature format: 4.0
+package androidx.activity {
+
+  public final class ActivityViewModelLazyKt {
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+  }
+
+  public final class OnBackPressedDispatcherKt {
+    method public static androidx.activity.OnBackPressedCallback addCallback(androidx.activity.OnBackPressedDispatcher, optional androidx.lifecycle.LifecycleOwner? owner, optional boolean enabled, kotlin.jvm.functions.Function1<? super androidx.activity.OnBackPressedCallback,kotlin.Unit> onBackPressed);
+  }
+
+  public final class PipHintTrackerKt {
+  }
+
+}
+
+package androidx.activity.contextaware {
+
+  public final class ContextAwareKt {
+    method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R>);
+  }
+
+}
+
+package androidx.activity.result {
+
+  public final class ActivityResultCallerKt {
+    method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, androidx.activity.result.ActivityResultRegistry registry, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+    method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+  }
+
+  public final class ActivityResultKt {
+    method public static operator int component1(androidx.activity.result.ActivityResult);
+    method public static operator android.content.Intent? component2(androidx.activity.result.ActivityResult);
+  }
+
+  public final class ActivityResultLauncherKt {
+    method public static void launch(androidx.activity.result.ActivityResultLauncher<java.lang.Void>, optional androidx.core.app.ActivityOptionsCompat? options);
+    method public static void launchUnit(androidx.activity.result.ActivityResultLauncher<kotlin.Unit>, optional androidx.core.app.ActivityOptionsCompat? options);
+  }
+
+}
+
diff --git a/activity/activity-ktx/api/public_plus_experimental_1.5.0-beta01.txt b/activity/activity-ktx/api/public_plus_experimental_1.5.0-beta01.txt
index f690f03..0ca1317 100644
--- a/activity/activity-ktx/api/public_plus_experimental_1.5.0-beta01.txt
+++ b/activity/activity-ktx/api/public_plus_experimental_1.5.0-beta01.txt
@@ -11,7 +11,7 @@
   }
 
   public final class PipHintTrackerKt {
-    method @RequiresApi(android.os.Build.VERSION_CODES.O) @kotlinx.coroutines.ExperimentalCoroutinesApi public static suspend Object? trackPipAnimationHintView(android.app.Activity, android.view.View view, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) @kotlinx.coroutines.ExperimentalCoroutinesApi public static suspend Object? trackPipAnimationHintView(android.app.Activity, android.view.View view, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
   }
 
 }
@@ -19,7 +19,7 @@
 package androidx.activity.contextaware {
 
   public final class ContextAwareKt {
-    method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R>);
+    method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R> p);
   }
 
 }
diff --git a/activity/activity-ktx/api/public_plus_experimental_1.6.0-beta01.txt b/activity/activity-ktx/api/public_plus_experimental_1.6.0-beta01.txt
new file mode 100644
index 0000000..f690f03
--- /dev/null
+++ b/activity/activity-ktx/api/public_plus_experimental_1.6.0-beta01.txt
@@ -0,0 +1,45 @@
+// Signature format: 4.0
+package androidx.activity {
+
+  public final class ActivityViewModelLazyKt {
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+  }
+
+  public final class OnBackPressedDispatcherKt {
+    method public static androidx.activity.OnBackPressedCallback addCallback(androidx.activity.OnBackPressedDispatcher, optional androidx.lifecycle.LifecycleOwner? owner, optional boolean enabled, kotlin.jvm.functions.Function1<? super androidx.activity.OnBackPressedCallback,kotlin.Unit> onBackPressed);
+  }
+
+  public final class PipHintTrackerKt {
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) @kotlinx.coroutines.ExperimentalCoroutinesApi public static suspend Object? trackPipAnimationHintView(android.app.Activity, android.view.View view, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+  }
+
+}
+
+package androidx.activity.contextaware {
+
+  public final class ContextAwareKt {
+    method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R>);
+  }
+
+}
+
+package androidx.activity.result {
+
+  public final class ActivityResultCallerKt {
+    method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, androidx.activity.result.ActivityResultRegistry registry, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+    method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+  }
+
+  public final class ActivityResultKt {
+    method public static operator int component1(androidx.activity.result.ActivityResult);
+    method public static operator android.content.Intent? component2(androidx.activity.result.ActivityResult);
+  }
+
+  public final class ActivityResultLauncherKt {
+    method public static void launch(androidx.activity.result.ActivityResultLauncher<java.lang.Void>, optional androidx.core.app.ActivityOptionsCompat? options);
+    method public static void launchUnit(androidx.activity.result.ActivityResultLauncher<kotlin.Unit>, optional androidx.core.app.ActivityOptionsCompat? options);
+  }
+
+}
+
diff --git a/core/core-ktx/api/res-1.8.0-beta01.txt b/activity/activity-ktx/api/res-1.6.0-beta01.txt
similarity index 100%
rename from core/core-ktx/api/res-1.8.0-beta01.txt
rename to activity/activity-ktx/api/res-1.6.0-beta01.txt
diff --git a/activity/activity-ktx/api/restricted_1.5.0-beta01.txt b/activity/activity-ktx/api/restricted_1.5.0-beta01.txt
index 822d245..0a94311 100644
--- a/activity/activity-ktx/api/restricted_1.5.0-beta01.txt
+++ b/activity/activity-ktx/api/restricted_1.5.0-beta01.txt
@@ -18,7 +18,7 @@
 package androidx.activity.contextaware {
 
   public final class ContextAwareKt {
-    method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R>);
+    method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R> p);
   }
 
 }
diff --git a/activity/activity-ktx/api/restricted_1.6.0-beta01.txt b/activity/activity-ktx/api/restricted_1.6.0-beta01.txt
new file mode 100644
index 0000000..822d245
--- /dev/null
+++ b/activity/activity-ktx/api/restricted_1.6.0-beta01.txt
@@ -0,0 +1,44 @@
+// Signature format: 4.0
+package androidx.activity {
+
+  public final class ActivityViewModelLazyKt {
+    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+  }
+
+  public final class OnBackPressedDispatcherKt {
+    method public static androidx.activity.OnBackPressedCallback addCallback(androidx.activity.OnBackPressedDispatcher, optional androidx.lifecycle.LifecycleOwner? owner, optional boolean enabled, kotlin.jvm.functions.Function1<? super androidx.activity.OnBackPressedCallback,kotlin.Unit> onBackPressed);
+  }
+
+  public final class PipHintTrackerKt {
+  }
+
+}
+
+package androidx.activity.contextaware {
+
+  public final class ContextAwareKt {
+    method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R>);
+  }
+
+}
+
+package androidx.activity.result {
+
+  public final class ActivityResultCallerKt {
+    method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, androidx.activity.result.ActivityResultRegistry registry, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+    method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+  }
+
+  public final class ActivityResultKt {
+    method public static operator int component1(androidx.activity.result.ActivityResult);
+    method public static operator android.content.Intent? component2(androidx.activity.result.ActivityResult);
+  }
+
+  public final class ActivityResultLauncherKt {
+    method public static void launch(androidx.activity.result.ActivityResultLauncher<java.lang.Void>, optional androidx.core.app.ActivityOptionsCompat? options);
+    method public static void launchUnit(androidx.activity.result.ActivityResultLauncher<kotlin.Unit>, optional androidx.core.app.ActivityOptionsCompat? options);
+  }
+
+}
+
diff --git a/activity/activity/api/1.6.0-beta01.txt b/activity/activity/api/1.6.0-beta01.txt
new file mode 100644
index 0000000..08fffc8
--- /dev/null
+++ b/activity/activity/api/1.6.0-beta01.txt
@@ -0,0 +1,368 @@
+// Signature format: 4.0
+package androidx.activity {
+
+  public class ComponentActivity extends android.app.Activity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.core.view.MenuHost androidx.activity.OnBackPressedDispatcherOwner androidx.core.content.OnConfigurationChangedProvider androidx.core.app.OnMultiWindowModeChangedProvider androidx.core.app.OnNewIntentProvider androidx.core.app.OnPictureInPictureModeChangedProvider androidx.core.content.OnTrimMemoryProvider androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+    ctor public ComponentActivity();
+    ctor @ContentView public ComponentActivity(@LayoutRes int);
+    method public void addMenuProvider(androidx.core.view.MenuProvider);
+    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+    method public final void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+    method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public final void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+    method public final void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+    method public final void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+    method public final void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+    method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+    method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+    method @Deprecated public Object? getLastCustomNonConfigurationInstance();
+    method public androidx.lifecycle.Lifecycle getLifecycle();
+    method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+    method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+    method public androidx.lifecycle.ViewModelStore getViewModelStore();
+    method public void invalidateMenu();
+    method @Deprecated @CallSuper protected void onActivityResult(int, int, android.content.Intent?);
+    method @MainThread public void onBackPressed();
+    method @CallSuper public void onMultiWindowModeChanged(boolean);
+    method @CallSuper public void onPictureInPictureModeChanged(boolean);
+    method @Deprecated @CallSuper public void onRequestPermissionsResult(int, String![], int[]);
+    method @Deprecated public Object? onRetainCustomNonConfigurationInstance();
+    method public final Object? onRetainNonConfigurationInstance();
+    method public android.content.Context? peekAvailableContext();
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public void removeMenuProvider(androidx.core.view.MenuProvider);
+    method public final void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+    method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public final void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+    method public final void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+    method public final void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+    method public final void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+    method @Deprecated public void startActivityForResult(android.content.Intent, int);
+    method @Deprecated public void startActivityForResult(android.content.Intent, int, android.os.Bundle?);
+    method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent?, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+  }
+
+  public class ComponentDialog extends android.app.Dialog implements androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner {
+    ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
+    ctor public ComponentDialog(android.content.Context context);
+    method public final androidx.lifecycle.Lifecycle getLifecycle();
+    method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+    method @CallSuper public void onBackPressed();
+  }
+
+  public abstract class OnBackPressedCallback {
+    ctor public OnBackPressedCallback(boolean);
+    method @MainThread public abstract void handleOnBackPressed();
+    method @MainThread public final boolean isEnabled();
+    method @MainThread public final void remove();
+    method @MainThread public final void setEnabled(boolean);
+  }
+
+  public final class OnBackPressedDispatcher {
+    ctor public OnBackPressedDispatcher();
+    ctor public OnBackPressedDispatcher(Runnable?);
+    method @MainThread public void addCallback(androidx.activity.OnBackPressedCallback);
+    method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner, androidx.activity.OnBackPressedCallback);
+    method @MainThread public boolean hasEnabledCallbacks();
+    method @MainThread public void onBackPressed();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher);
+  }
+
+  public interface OnBackPressedDispatcherOwner extends androidx.lifecycle.LifecycleOwner {
+    method public androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+  }
+
+  public final class ViewTreeOnBackPressedDispatcherOwner {
+    method public static androidx.activity.OnBackPressedDispatcherOwner? get(android.view.View);
+    method public static void set(android.view.View, androidx.activity.OnBackPressedDispatcherOwner onBackPressedDispatcherOwner);
+  }
+
+}
+
+package androidx.activity.contextaware {
+
+  public interface ContextAware {
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public android.content.Context? peekAvailableContext();
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public final class ContextAwareHelper {
+    ctor public ContextAwareHelper();
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void clearAvailableContext();
+    method public void dispatchOnContextAvailable(android.content.Context);
+    method public android.content.Context? peekAvailableContext();
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public interface OnContextAvailableListener {
+    method public void onContextAvailable(android.content.Context);
+  }
+
+}
+
+package androidx.activity.result {
+
+  public final class ActivityResult implements android.os.Parcelable {
+    ctor public ActivityResult(int, android.content.Intent?);
+    method public int describeContents();
+    method public android.content.Intent? getData();
+    method public int getResultCode();
+    method public static String resultCodeToString(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.activity.result.ActivityResult!> CREATOR;
+  }
+
+  public interface ActivityResultCallback<O> {
+    method public void onActivityResult(O!);
+  }
+
+  public interface ActivityResultCaller {
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+  }
+
+  public abstract class ActivityResultLauncher<I> {
+    ctor public ActivityResultLauncher();
+    method public abstract androidx.activity.result.contract.ActivityResultContract<I!,?> getContract();
+    method public void launch(I!);
+    method public abstract void launch(I!, androidx.core.app.ActivityOptionsCompat?);
+    method @MainThread public abstract void unregister();
+  }
+
+  public abstract class ActivityResultRegistry {
+    ctor public ActivityResultRegistry();
+    method @MainThread public final boolean dispatchResult(int, int, android.content.Intent?);
+    method @MainThread public final <O> boolean dispatchResult(int, O!);
+    method @MainThread public abstract <I, O> void onLaunch(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!, androidx.core.app.ActivityOptionsCompat?);
+    method public final void onRestoreInstanceState(android.os.Bundle?);
+    method public final void onSaveInstanceState(android.os.Bundle);
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+  }
+
+  public interface ActivityResultRegistryOwner {
+    method public androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+  }
+
+  public final class IntentSenderRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.content.Intent? getFillInIntent();
+    method public int getFlagsMask();
+    method public int getFlagsValues();
+    method public android.content.IntentSender getIntentSender();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.activity.result.IntentSenderRequest!> CREATOR;
+  }
+
+  public static final class IntentSenderRequest.Builder {
+    ctor public IntentSenderRequest.Builder(android.content.IntentSender);
+    ctor public IntentSenderRequest.Builder(android.app.PendingIntent);
+    method public androidx.activity.result.IntentSenderRequest build();
+    method public androidx.activity.result.IntentSenderRequest.Builder setFillInIntent(android.content.Intent?);
+    method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
+  }
+
+  public final class PickVisualMediaRequest {
+    method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+    property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+  }
+
+  public static final class PickVisualMediaRequest.Builder {
+    ctor public PickVisualMediaRequest.Builder();
+    method public androidx.activity.result.PickVisualMediaRequest build();
+    method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+  public final class PickVisualMediaRequestKt {
+    method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+}
+
+package androidx.activity.result.contract {
+
+  public abstract class ActivityResultContract<I, O> {
+    ctor public ActivityResultContract();
+    method public abstract android.content.Intent createIntent(android.content.Context context, I? input);
+    method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<O>? getSynchronousResult(android.content.Context context, I? input);
+    method public abstract O! parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static final class ActivityResultContract.SynchronousResult<T> {
+    ctor public ActivityResultContract.SynchronousResult(T? value);
+    method public T! getValue();
+    property public final T! value;
+  }
+
+  public final class ActivityResultContracts {
+  }
+
+  public static class ActivityResultContracts.CaptureVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+    ctor public ActivityResultContracts.CaptureVideo();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+    method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.CreateDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+    ctor public ActivityResultContracts.CreateDocument(String mimeType);
+    ctor @Deprecated public ActivityResultContracts.CreateDocument();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.GetContent extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+    ctor public ActivityResultContracts.GetContent();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(18) public static class ActivityResultContracts.GetMultipleContents extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.GetMultipleContents();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.OpenDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],android.net.Uri> {
+    ctor public ActivityResultContracts.OpenDocument();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String![] input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(21) public static class ActivityResultContracts.OpenDocumentTree extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.net.Uri> {
+    ctor public ActivityResultContracts.OpenDocumentTree();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri? input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, android.net.Uri? input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.OpenMultipleDocuments extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.OpenMultipleDocuments();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String![] input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static final class ActivityResultContracts.PickContact extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.net.Uri> {
+    ctor public ActivityResultContracts.PickContact();
+    method public android.content.Intent createIntent(android.content.Context context, Void? input);
+    method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
+    ctor public ActivityResultContracts.PickVisualMedia();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public static final boolean isPhotoPickerAvailable();
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.Companion Companion;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.Companion {
+    method public boolean isPhotoPickerAvailable();
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageAndVideo implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.SingleMimeType implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    ctor public ActivityResultContracts.PickVisualMedia.SingleMimeType(String mimeType);
+    method public String getMimeType();
+    property public final String mimeType;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.VideoOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VideoOnly INSTANCE;
+  }
+
+  public static sealed interface ActivityResultContracts.PickVisualMedia.VisualMediaType {
+  }
+
+  public static final class ActivityResultContracts.RequestMultiplePermissions extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.Map<java.lang.String,java.lang.Boolean>> {
+    ctor public ActivityResultContracts.RequestMultiplePermissions();
+    method public android.content.Intent createIntent(android.content.Context context, String![] input);
+    method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.Map<java.lang.String,java.lang.Boolean>>? getSynchronousResult(android.content.Context context, String![] input);
+    method public java.util.Map<java.lang.String,java.lang.Boolean> parseResult(int resultCode, android.content.Intent? intent);
+    field public static final String ACTION_REQUEST_PERMISSIONS = "androidx.activity.result.contract.action.REQUEST_PERMISSIONS";
+    field public static final androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions.Companion Companion;
+    field public static final String EXTRA_PERMISSIONS = "androidx.activity.result.contract.extra.PERMISSIONS";
+    field public static final String EXTRA_PERMISSION_GRANT_RESULTS = "androidx.activity.result.contract.extra.PERMISSION_GRANT_RESULTS";
+  }
+
+  public static final class ActivityResultContracts.RequestMultiplePermissions.Companion {
+  }
+
+  public static final class ActivityResultContracts.RequestPermission extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.lang.Boolean> {
+    ctor public ActivityResultContracts.RequestPermission();
+    method public android.content.Intent createIntent(android.content.Context context, String input);
+    method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, String input);
+    method public Boolean parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static final class ActivityResultContracts.StartActivityForResult extends androidx.activity.result.contract.ActivityResultContract<android.content.Intent,androidx.activity.result.ActivityResult> {
+    ctor public ActivityResultContracts.StartActivityForResult();
+    method public android.content.Intent createIntent(android.content.Context context, android.content.Intent input);
+    method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+    field public static final androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult.Companion Companion;
+    field public static final String EXTRA_ACTIVITY_OPTIONS_BUNDLE = "androidx.activity.result.contract.extra.ACTIVITY_OPTIONS_BUNDLE";
+  }
+
+  public static final class ActivityResultContracts.StartActivityForResult.Companion {
+  }
+
+  public static final class ActivityResultContracts.StartIntentSenderForResult extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.IntentSenderRequest,androidx.activity.result.ActivityResult> {
+    ctor public ActivityResultContracts.StartIntentSenderForResult();
+    method public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.IntentSenderRequest input);
+    method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+    field public static final String ACTION_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.action.INTENT_SENDER_REQUEST";
+    field public static final androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion Companion;
+    field public static final String EXTRA_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.extra.INTENT_SENDER_REQUEST";
+    field public static final String EXTRA_SEND_INTENT_EXCEPTION = "androidx.activity.result.contract.extra.SEND_INTENT_EXCEPTION";
+  }
+
+  public static final class ActivityResultContracts.StartIntentSenderForResult.Companion {
+  }
+
+  public static class ActivityResultContracts.TakePicture extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+    ctor public ActivityResultContracts.TakePicture();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+    method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.TakePicturePreview extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.graphics.Bitmap> {
+    ctor public ActivityResultContracts.TakePicturePreview();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, Void? input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, Void? input);
+    method public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @Deprecated public static class ActivityResultContracts.TakeVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.graphics.Bitmap> {
+    ctor @Deprecated public ActivityResultContracts.TakeVideo();
+    method @Deprecated @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+    method @Deprecated public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+    method @Deprecated public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+}
+
diff --git a/activity/activity/api/current.txt b/activity/activity/api/current.txt
index c219fec..08fffc8 100644
--- a/activity/activity/api/current.txt
+++ b/activity/activity/api/current.txt
@@ -22,6 +22,7 @@
     method public androidx.lifecycle.ViewModelStore getViewModelStore();
     method public void invalidateMenu();
     method @Deprecated @CallSuper protected void onActivityResult(int, int, android.content.Intent?);
+    method @MainThread public void onBackPressed();
     method @CallSuper public void onMultiWindowModeChanged(boolean);
     method @CallSuper public void onPictureInPictureModeChanged(boolean);
     method @Deprecated @CallSuper public void onRequestPermissionsResult(int, String![], int[]);
@@ -48,6 +49,7 @@
     ctor public ComponentDialog(android.content.Context context);
     method public final androidx.lifecycle.Lifecycle getLifecycle();
     method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+    method @CallSuper public void onBackPressed();
   }
 
   public abstract class OnBackPressedCallback {
@@ -65,6 +67,7 @@
     method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner, androidx.activity.OnBackPressedCallback);
     method @MainThread public boolean hasEnabledCallbacks();
     method @MainThread public void onBackPressed();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher);
   }
 
   public interface OnBackPressedDispatcherOwner extends androidx.lifecycle.LifecycleOwner {
@@ -163,6 +166,21 @@
     method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
   }
 
+  public final class PickVisualMediaRequest {
+    method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+    property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+  }
+
+  public static final class PickVisualMediaRequest.Builder {
+    ctor public PickVisualMediaRequest.Builder();
+    method public androidx.activity.result.PickVisualMediaRequest build();
+    method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+  public final class PickVisualMediaRequestKt {
+    method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
 }
 
 package androidx.activity.result.contract {
@@ -239,6 +257,47 @@
     method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
   }
 
+  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
+    ctor public ActivityResultContracts.PickVisualMedia();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public static final boolean isPhotoPickerAvailable();
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.Companion Companion;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.Companion {
+    method public boolean isPhotoPickerAvailable();
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageAndVideo implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.SingleMimeType implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    ctor public ActivityResultContracts.PickVisualMedia.SingleMimeType(String mimeType);
+    method public String getMimeType();
+    property public final String mimeType;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.VideoOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VideoOnly INSTANCE;
+  }
+
+  public static sealed interface ActivityResultContracts.PickVisualMedia.VisualMediaType {
+  }
+
   public static final class ActivityResultContracts.RequestMultiplePermissions extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.Map<java.lang.String,java.lang.Boolean>> {
     ctor public ActivityResultContracts.RequestMultiplePermissions();
     method public android.content.Intent createIntent(android.content.Context context, String![] input);
diff --git a/activity/activity/api/public_plus_experimental_1.6.0-beta01.txt b/activity/activity/api/public_plus_experimental_1.6.0-beta01.txt
new file mode 100644
index 0000000..08fffc8
--- /dev/null
+++ b/activity/activity/api/public_plus_experimental_1.6.0-beta01.txt
@@ -0,0 +1,368 @@
+// Signature format: 4.0
+package androidx.activity {
+
+  public class ComponentActivity extends android.app.Activity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.core.view.MenuHost androidx.activity.OnBackPressedDispatcherOwner androidx.core.content.OnConfigurationChangedProvider androidx.core.app.OnMultiWindowModeChangedProvider androidx.core.app.OnNewIntentProvider androidx.core.app.OnPictureInPictureModeChangedProvider androidx.core.content.OnTrimMemoryProvider androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+    ctor public ComponentActivity();
+    ctor @ContentView public ComponentActivity(@LayoutRes int);
+    method public void addMenuProvider(androidx.core.view.MenuProvider);
+    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+    method public final void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+    method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public final void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+    method public final void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+    method public final void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+    method public final void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+    method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+    method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+    method @Deprecated public Object? getLastCustomNonConfigurationInstance();
+    method public androidx.lifecycle.Lifecycle getLifecycle();
+    method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+    method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+    method public androidx.lifecycle.ViewModelStore getViewModelStore();
+    method public void invalidateMenu();
+    method @Deprecated @CallSuper protected void onActivityResult(int, int, android.content.Intent?);
+    method @MainThread public void onBackPressed();
+    method @CallSuper public void onMultiWindowModeChanged(boolean);
+    method @CallSuper public void onPictureInPictureModeChanged(boolean);
+    method @Deprecated @CallSuper public void onRequestPermissionsResult(int, String![], int[]);
+    method @Deprecated public Object? onRetainCustomNonConfigurationInstance();
+    method public final Object? onRetainNonConfigurationInstance();
+    method public android.content.Context? peekAvailableContext();
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public void removeMenuProvider(androidx.core.view.MenuProvider);
+    method public final void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+    method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public final void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+    method public final void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+    method public final void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+    method public final void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+    method @Deprecated public void startActivityForResult(android.content.Intent, int);
+    method @Deprecated public void startActivityForResult(android.content.Intent, int, android.os.Bundle?);
+    method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent?, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+  }
+
+  public class ComponentDialog extends android.app.Dialog implements androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner {
+    ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
+    ctor public ComponentDialog(android.content.Context context);
+    method public final androidx.lifecycle.Lifecycle getLifecycle();
+    method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+    method @CallSuper public void onBackPressed();
+  }
+
+  public abstract class OnBackPressedCallback {
+    ctor public OnBackPressedCallback(boolean);
+    method @MainThread public abstract void handleOnBackPressed();
+    method @MainThread public final boolean isEnabled();
+    method @MainThread public final void remove();
+    method @MainThread public final void setEnabled(boolean);
+  }
+
+  public final class OnBackPressedDispatcher {
+    ctor public OnBackPressedDispatcher();
+    ctor public OnBackPressedDispatcher(Runnable?);
+    method @MainThread public void addCallback(androidx.activity.OnBackPressedCallback);
+    method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner, androidx.activity.OnBackPressedCallback);
+    method @MainThread public boolean hasEnabledCallbacks();
+    method @MainThread public void onBackPressed();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher);
+  }
+
+  public interface OnBackPressedDispatcherOwner extends androidx.lifecycle.LifecycleOwner {
+    method public androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+  }
+
+  public final class ViewTreeOnBackPressedDispatcherOwner {
+    method public static androidx.activity.OnBackPressedDispatcherOwner? get(android.view.View);
+    method public static void set(android.view.View, androidx.activity.OnBackPressedDispatcherOwner onBackPressedDispatcherOwner);
+  }
+
+}
+
+package androidx.activity.contextaware {
+
+  public interface ContextAware {
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public android.content.Context? peekAvailableContext();
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public final class ContextAwareHelper {
+    ctor public ContextAwareHelper();
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void clearAvailableContext();
+    method public void dispatchOnContextAvailable(android.content.Context);
+    method public android.content.Context? peekAvailableContext();
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public interface OnContextAvailableListener {
+    method public void onContextAvailable(android.content.Context);
+  }
+
+}
+
+package androidx.activity.result {
+
+  public final class ActivityResult implements android.os.Parcelable {
+    ctor public ActivityResult(int, android.content.Intent?);
+    method public int describeContents();
+    method public android.content.Intent? getData();
+    method public int getResultCode();
+    method public static String resultCodeToString(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.activity.result.ActivityResult!> CREATOR;
+  }
+
+  public interface ActivityResultCallback<O> {
+    method public void onActivityResult(O!);
+  }
+
+  public interface ActivityResultCaller {
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+  }
+
+  public abstract class ActivityResultLauncher<I> {
+    ctor public ActivityResultLauncher();
+    method public abstract androidx.activity.result.contract.ActivityResultContract<I!,?> getContract();
+    method public void launch(I!);
+    method public abstract void launch(I!, androidx.core.app.ActivityOptionsCompat?);
+    method @MainThread public abstract void unregister();
+  }
+
+  public abstract class ActivityResultRegistry {
+    ctor public ActivityResultRegistry();
+    method @MainThread public final boolean dispatchResult(int, int, android.content.Intent?);
+    method @MainThread public final <O> boolean dispatchResult(int, O!);
+    method @MainThread public abstract <I, O> void onLaunch(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!, androidx.core.app.ActivityOptionsCompat?);
+    method public final void onRestoreInstanceState(android.os.Bundle?);
+    method public final void onSaveInstanceState(android.os.Bundle);
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+  }
+
+  public interface ActivityResultRegistryOwner {
+    method public androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+  }
+
+  public final class IntentSenderRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.content.Intent? getFillInIntent();
+    method public int getFlagsMask();
+    method public int getFlagsValues();
+    method public android.content.IntentSender getIntentSender();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.activity.result.IntentSenderRequest!> CREATOR;
+  }
+
+  public static final class IntentSenderRequest.Builder {
+    ctor public IntentSenderRequest.Builder(android.content.IntentSender);
+    ctor public IntentSenderRequest.Builder(android.app.PendingIntent);
+    method public androidx.activity.result.IntentSenderRequest build();
+    method public androidx.activity.result.IntentSenderRequest.Builder setFillInIntent(android.content.Intent?);
+    method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
+  }
+
+  public final class PickVisualMediaRequest {
+    method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+    property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+  }
+
+  public static final class PickVisualMediaRequest.Builder {
+    ctor public PickVisualMediaRequest.Builder();
+    method public androidx.activity.result.PickVisualMediaRequest build();
+    method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+  public final class PickVisualMediaRequestKt {
+    method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+}
+
+package androidx.activity.result.contract {
+
+  public abstract class ActivityResultContract<I, O> {
+    ctor public ActivityResultContract();
+    method public abstract android.content.Intent createIntent(android.content.Context context, I? input);
+    method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<O>? getSynchronousResult(android.content.Context context, I? input);
+    method public abstract O! parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static final class ActivityResultContract.SynchronousResult<T> {
+    ctor public ActivityResultContract.SynchronousResult(T? value);
+    method public T! getValue();
+    property public final T! value;
+  }
+
+  public final class ActivityResultContracts {
+  }
+
+  public static class ActivityResultContracts.CaptureVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+    ctor public ActivityResultContracts.CaptureVideo();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+    method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.CreateDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+    ctor public ActivityResultContracts.CreateDocument(String mimeType);
+    ctor @Deprecated public ActivityResultContracts.CreateDocument();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.GetContent extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+    ctor public ActivityResultContracts.GetContent();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(18) public static class ActivityResultContracts.GetMultipleContents extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.GetMultipleContents();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.OpenDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],android.net.Uri> {
+    ctor public ActivityResultContracts.OpenDocument();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String![] input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(21) public static class ActivityResultContracts.OpenDocumentTree extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.net.Uri> {
+    ctor public ActivityResultContracts.OpenDocumentTree();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri? input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, android.net.Uri? input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.OpenMultipleDocuments extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.OpenMultipleDocuments();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String![] input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static final class ActivityResultContracts.PickContact extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.net.Uri> {
+    ctor public ActivityResultContracts.PickContact();
+    method public android.content.Intent createIntent(android.content.Context context, Void? input);
+    method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
+    ctor public ActivityResultContracts.PickVisualMedia();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public static final boolean isPhotoPickerAvailable();
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.Companion Companion;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.Companion {
+    method public boolean isPhotoPickerAvailable();
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageAndVideo implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.SingleMimeType implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    ctor public ActivityResultContracts.PickVisualMedia.SingleMimeType(String mimeType);
+    method public String getMimeType();
+    property public final String mimeType;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.VideoOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VideoOnly INSTANCE;
+  }
+
+  public static sealed interface ActivityResultContracts.PickVisualMedia.VisualMediaType {
+  }
+
+  public static final class ActivityResultContracts.RequestMultiplePermissions extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.Map<java.lang.String,java.lang.Boolean>> {
+    ctor public ActivityResultContracts.RequestMultiplePermissions();
+    method public android.content.Intent createIntent(android.content.Context context, String![] input);
+    method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.Map<java.lang.String,java.lang.Boolean>>? getSynchronousResult(android.content.Context context, String![] input);
+    method public java.util.Map<java.lang.String,java.lang.Boolean> parseResult(int resultCode, android.content.Intent? intent);
+    field public static final String ACTION_REQUEST_PERMISSIONS = "androidx.activity.result.contract.action.REQUEST_PERMISSIONS";
+    field public static final androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions.Companion Companion;
+    field public static final String EXTRA_PERMISSIONS = "androidx.activity.result.contract.extra.PERMISSIONS";
+    field public static final String EXTRA_PERMISSION_GRANT_RESULTS = "androidx.activity.result.contract.extra.PERMISSION_GRANT_RESULTS";
+  }
+
+  public static final class ActivityResultContracts.RequestMultiplePermissions.Companion {
+  }
+
+  public static final class ActivityResultContracts.RequestPermission extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.lang.Boolean> {
+    ctor public ActivityResultContracts.RequestPermission();
+    method public android.content.Intent createIntent(android.content.Context context, String input);
+    method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, String input);
+    method public Boolean parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static final class ActivityResultContracts.StartActivityForResult extends androidx.activity.result.contract.ActivityResultContract<android.content.Intent,androidx.activity.result.ActivityResult> {
+    ctor public ActivityResultContracts.StartActivityForResult();
+    method public android.content.Intent createIntent(android.content.Context context, android.content.Intent input);
+    method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+    field public static final androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult.Companion Companion;
+    field public static final String EXTRA_ACTIVITY_OPTIONS_BUNDLE = "androidx.activity.result.contract.extra.ACTIVITY_OPTIONS_BUNDLE";
+  }
+
+  public static final class ActivityResultContracts.StartActivityForResult.Companion {
+  }
+
+  public static final class ActivityResultContracts.StartIntentSenderForResult extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.IntentSenderRequest,androidx.activity.result.ActivityResult> {
+    ctor public ActivityResultContracts.StartIntentSenderForResult();
+    method public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.IntentSenderRequest input);
+    method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+    field public static final String ACTION_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.action.INTENT_SENDER_REQUEST";
+    field public static final androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion Companion;
+    field public static final String EXTRA_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.extra.INTENT_SENDER_REQUEST";
+    field public static final String EXTRA_SEND_INTENT_EXCEPTION = "androidx.activity.result.contract.extra.SEND_INTENT_EXCEPTION";
+  }
+
+  public static final class ActivityResultContracts.StartIntentSenderForResult.Companion {
+  }
+
+  public static class ActivityResultContracts.TakePicture extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+    ctor public ActivityResultContracts.TakePicture();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+    method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.TakePicturePreview extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.graphics.Bitmap> {
+    ctor public ActivityResultContracts.TakePicturePreview();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, Void? input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, Void? input);
+    method public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @Deprecated public static class ActivityResultContracts.TakeVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.graphics.Bitmap> {
+    ctor @Deprecated public ActivityResultContracts.TakeVideo();
+    method @Deprecated @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+    method @Deprecated public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+    method @Deprecated public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+}
+
diff --git a/activity/activity/api/public_plus_experimental_current.txt b/activity/activity/api/public_plus_experimental_current.txt
index c219fec..08fffc8 100644
--- a/activity/activity/api/public_plus_experimental_current.txt
+++ b/activity/activity/api/public_plus_experimental_current.txt
@@ -22,6 +22,7 @@
     method public androidx.lifecycle.ViewModelStore getViewModelStore();
     method public void invalidateMenu();
     method @Deprecated @CallSuper protected void onActivityResult(int, int, android.content.Intent?);
+    method @MainThread public void onBackPressed();
     method @CallSuper public void onMultiWindowModeChanged(boolean);
     method @CallSuper public void onPictureInPictureModeChanged(boolean);
     method @Deprecated @CallSuper public void onRequestPermissionsResult(int, String![], int[]);
@@ -48,6 +49,7 @@
     ctor public ComponentDialog(android.content.Context context);
     method public final androidx.lifecycle.Lifecycle getLifecycle();
     method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+    method @CallSuper public void onBackPressed();
   }
 
   public abstract class OnBackPressedCallback {
@@ -65,6 +67,7 @@
     method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner, androidx.activity.OnBackPressedCallback);
     method @MainThread public boolean hasEnabledCallbacks();
     method @MainThread public void onBackPressed();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher);
   }
 
   public interface OnBackPressedDispatcherOwner extends androidx.lifecycle.LifecycleOwner {
@@ -163,6 +166,21 @@
     method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
   }
 
+  public final class PickVisualMediaRequest {
+    method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+    property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+  }
+
+  public static final class PickVisualMediaRequest.Builder {
+    ctor public PickVisualMediaRequest.Builder();
+    method public androidx.activity.result.PickVisualMediaRequest build();
+    method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+  public final class PickVisualMediaRequestKt {
+    method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
 }
 
 package androidx.activity.result.contract {
@@ -239,6 +257,47 @@
     method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
   }
 
+  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
+    ctor public ActivityResultContracts.PickVisualMedia();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public static final boolean isPhotoPickerAvailable();
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.Companion Companion;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.Companion {
+    method public boolean isPhotoPickerAvailable();
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageAndVideo implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.SingleMimeType implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    ctor public ActivityResultContracts.PickVisualMedia.SingleMimeType(String mimeType);
+    method public String getMimeType();
+    property public final String mimeType;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.VideoOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VideoOnly INSTANCE;
+  }
+
+  public static sealed interface ActivityResultContracts.PickVisualMedia.VisualMediaType {
+  }
+
   public static final class ActivityResultContracts.RequestMultiplePermissions extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.Map<java.lang.String,java.lang.Boolean>> {
     ctor public ActivityResultContracts.RequestMultiplePermissions();
     method public android.content.Intent createIntent(android.content.Context context, String![] input);
diff --git a/core/core-ktx/api/res-1.8.0-beta01.txt b/activity/activity/api/res-1.6.0-beta01.txt
similarity index 100%
copy from core/core-ktx/api/res-1.8.0-beta01.txt
copy to activity/activity/api/res-1.6.0-beta01.txt
diff --git a/activity/activity/api/restricted_1.6.0-beta01.txt b/activity/activity/api/restricted_1.6.0-beta01.txt
new file mode 100644
index 0000000..75909c6
--- /dev/null
+++ b/activity/activity/api/restricted_1.6.0-beta01.txt
@@ -0,0 +1,367 @@
+// Signature format: 4.0
+package androidx.activity {
+
+  public class ComponentActivity extends androidx.core.app.ComponentActivity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.core.view.MenuHost androidx.activity.OnBackPressedDispatcherOwner androidx.core.content.OnConfigurationChangedProvider androidx.core.app.OnMultiWindowModeChangedProvider androidx.core.app.OnNewIntentProvider androidx.core.app.OnPictureInPictureModeChangedProvider androidx.core.content.OnTrimMemoryProvider androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+    ctor public ComponentActivity();
+    ctor @ContentView public ComponentActivity(@LayoutRes int);
+    method public void addMenuProvider(androidx.core.view.MenuProvider);
+    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+    method public final void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+    method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public final void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+    method public final void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+    method public final void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+    method public final void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+    method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+    method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+    method @Deprecated public Object? getLastCustomNonConfigurationInstance();
+    method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+    method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+    method public androidx.lifecycle.ViewModelStore getViewModelStore();
+    method public void invalidateMenu();
+    method @Deprecated @CallSuper protected void onActivityResult(int, int, android.content.Intent?);
+    method @MainThread public void onBackPressed();
+    method @CallSuper public void onMultiWindowModeChanged(boolean);
+    method @CallSuper public void onPictureInPictureModeChanged(boolean);
+    method @Deprecated @CallSuper public void onRequestPermissionsResult(int, String![], int[]);
+    method @Deprecated public Object? onRetainCustomNonConfigurationInstance();
+    method public final Object? onRetainNonConfigurationInstance();
+    method public android.content.Context? peekAvailableContext();
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public void removeMenuProvider(androidx.core.view.MenuProvider);
+    method public final void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+    method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public final void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+    method public final void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+    method public final void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+    method public final void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+    method @Deprecated public void startActivityForResult(android.content.Intent, int);
+    method @Deprecated public void startActivityForResult(android.content.Intent, int, android.os.Bundle?);
+    method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent?, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+  }
+
+  public class ComponentDialog extends android.app.Dialog implements androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner {
+    ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
+    ctor public ComponentDialog(android.content.Context context);
+    method public final androidx.lifecycle.Lifecycle getLifecycle();
+    method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+    method @CallSuper public void onBackPressed();
+  }
+
+  public abstract class OnBackPressedCallback {
+    ctor public OnBackPressedCallback(boolean);
+    method @MainThread public abstract void handleOnBackPressed();
+    method @MainThread public final boolean isEnabled();
+    method @MainThread public final void remove();
+    method @MainThread public final void setEnabled(boolean);
+  }
+
+  public final class OnBackPressedDispatcher {
+    ctor public OnBackPressedDispatcher();
+    ctor public OnBackPressedDispatcher(Runnable?);
+    method @MainThread public void addCallback(androidx.activity.OnBackPressedCallback);
+    method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner, androidx.activity.OnBackPressedCallback);
+    method @MainThread public boolean hasEnabledCallbacks();
+    method @MainThread public void onBackPressed();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher);
+  }
+
+  public interface OnBackPressedDispatcherOwner extends androidx.lifecycle.LifecycleOwner {
+    method public androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+  }
+
+  public final class ViewTreeOnBackPressedDispatcherOwner {
+    method public static androidx.activity.OnBackPressedDispatcherOwner? get(android.view.View);
+    method public static void set(android.view.View, androidx.activity.OnBackPressedDispatcherOwner onBackPressedDispatcherOwner);
+  }
+
+}
+
+package androidx.activity.contextaware {
+
+  public interface ContextAware {
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public android.content.Context? peekAvailableContext();
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public final class ContextAwareHelper {
+    ctor public ContextAwareHelper();
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void clearAvailableContext();
+    method public void dispatchOnContextAvailable(android.content.Context);
+    method public android.content.Context? peekAvailableContext();
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public interface OnContextAvailableListener {
+    method public void onContextAvailable(android.content.Context);
+  }
+
+}
+
+package androidx.activity.result {
+
+  public final class ActivityResult implements android.os.Parcelable {
+    ctor public ActivityResult(int, android.content.Intent?);
+    method public int describeContents();
+    method public android.content.Intent? getData();
+    method public int getResultCode();
+    method public static String resultCodeToString(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.activity.result.ActivityResult!> CREATOR;
+  }
+
+  public interface ActivityResultCallback<O> {
+    method public void onActivityResult(O!);
+  }
+
+  public interface ActivityResultCaller {
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+  }
+
+  public abstract class ActivityResultLauncher<I> {
+    ctor public ActivityResultLauncher();
+    method public abstract androidx.activity.result.contract.ActivityResultContract<I!,?> getContract();
+    method public void launch(I!);
+    method public abstract void launch(I!, androidx.core.app.ActivityOptionsCompat?);
+    method @MainThread public abstract void unregister();
+  }
+
+  public abstract class ActivityResultRegistry {
+    ctor public ActivityResultRegistry();
+    method @MainThread public final boolean dispatchResult(int, int, android.content.Intent?);
+    method @MainThread public final <O> boolean dispatchResult(int, O!);
+    method @MainThread public abstract <I, O> void onLaunch(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!, androidx.core.app.ActivityOptionsCompat?);
+    method public final void onRestoreInstanceState(android.os.Bundle?);
+    method public final void onSaveInstanceState(android.os.Bundle);
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+  }
+
+  public interface ActivityResultRegistryOwner {
+    method public androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+  }
+
+  public final class IntentSenderRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.content.Intent? getFillInIntent();
+    method public int getFlagsMask();
+    method public int getFlagsValues();
+    method public android.content.IntentSender getIntentSender();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.activity.result.IntentSenderRequest!> CREATOR;
+  }
+
+  public static final class IntentSenderRequest.Builder {
+    ctor public IntentSenderRequest.Builder(android.content.IntentSender);
+    ctor public IntentSenderRequest.Builder(android.app.PendingIntent);
+    method public androidx.activity.result.IntentSenderRequest build();
+    method public androidx.activity.result.IntentSenderRequest.Builder setFillInIntent(android.content.Intent?);
+    method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
+  }
+
+  public final class PickVisualMediaRequest {
+    method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+    property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+  }
+
+  public static final class PickVisualMediaRequest.Builder {
+    ctor public PickVisualMediaRequest.Builder();
+    method public androidx.activity.result.PickVisualMediaRequest build();
+    method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+  public final class PickVisualMediaRequestKt {
+    method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+}
+
+package androidx.activity.result.contract {
+
+  public abstract class ActivityResultContract<I, O> {
+    ctor public ActivityResultContract();
+    method public abstract android.content.Intent createIntent(android.content.Context context, I? input);
+    method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<O>? getSynchronousResult(android.content.Context context, I? input);
+    method public abstract O! parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static final class ActivityResultContract.SynchronousResult<T> {
+    ctor public ActivityResultContract.SynchronousResult(T? value);
+    method public T! getValue();
+    property public final T! value;
+  }
+
+  public final class ActivityResultContracts {
+  }
+
+  public static class ActivityResultContracts.CaptureVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+    ctor public ActivityResultContracts.CaptureVideo();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+    method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.CreateDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+    ctor public ActivityResultContracts.CreateDocument(String mimeType);
+    ctor @Deprecated public ActivityResultContracts.CreateDocument();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.GetContent extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+    ctor public ActivityResultContracts.GetContent();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(18) public static class ActivityResultContracts.GetMultipleContents extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.GetMultipleContents();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.OpenDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],android.net.Uri> {
+    ctor public ActivityResultContracts.OpenDocument();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String![] input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(21) public static class ActivityResultContracts.OpenDocumentTree extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.net.Uri> {
+    ctor public ActivityResultContracts.OpenDocumentTree();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri? input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, android.net.Uri? input);
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.OpenMultipleDocuments extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.OpenMultipleDocuments();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String![] input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static final class ActivityResultContracts.PickContact extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.net.Uri> {
+    ctor public ActivityResultContracts.PickContact();
+    method public android.content.Intent createIntent(android.content.Context context, Void? input);
+    method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
+    ctor public ActivityResultContracts.PickVisualMedia();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public static final boolean isPhotoPickerAvailable();
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.Companion Companion;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.Companion {
+    method public boolean isPhotoPickerAvailable();
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageAndVideo implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.SingleMimeType implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    ctor public ActivityResultContracts.PickVisualMedia.SingleMimeType(String mimeType);
+    method public String getMimeType();
+    property public final String mimeType;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.VideoOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VideoOnly INSTANCE;
+  }
+
+  public static sealed interface ActivityResultContracts.PickVisualMedia.VisualMediaType {
+  }
+
+  public static final class ActivityResultContracts.RequestMultiplePermissions extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.Map<java.lang.String,java.lang.Boolean>> {
+    ctor public ActivityResultContracts.RequestMultiplePermissions();
+    method public android.content.Intent createIntent(android.content.Context context, String![] input);
+    method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.Map<java.lang.String,java.lang.Boolean>>? getSynchronousResult(android.content.Context context, String![] input);
+    method public java.util.Map<java.lang.String,java.lang.Boolean> parseResult(int resultCode, android.content.Intent? intent);
+    field public static final String ACTION_REQUEST_PERMISSIONS = "androidx.activity.result.contract.action.REQUEST_PERMISSIONS";
+    field public static final androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions.Companion Companion;
+    field public static final String EXTRA_PERMISSIONS = "androidx.activity.result.contract.extra.PERMISSIONS";
+    field public static final String EXTRA_PERMISSION_GRANT_RESULTS = "androidx.activity.result.contract.extra.PERMISSION_GRANT_RESULTS";
+  }
+
+  public static final class ActivityResultContracts.RequestMultiplePermissions.Companion {
+  }
+
+  public static final class ActivityResultContracts.RequestPermission extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.lang.Boolean> {
+    ctor public ActivityResultContracts.RequestPermission();
+    method public android.content.Intent createIntent(android.content.Context context, String input);
+    method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, String input);
+    method public Boolean parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static final class ActivityResultContracts.StartActivityForResult extends androidx.activity.result.contract.ActivityResultContract<android.content.Intent,androidx.activity.result.ActivityResult> {
+    ctor public ActivityResultContracts.StartActivityForResult();
+    method public android.content.Intent createIntent(android.content.Context context, android.content.Intent input);
+    method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+    field public static final androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult.Companion Companion;
+    field public static final String EXTRA_ACTIVITY_OPTIONS_BUNDLE = "androidx.activity.result.contract.extra.ACTIVITY_OPTIONS_BUNDLE";
+  }
+
+  public static final class ActivityResultContracts.StartActivityForResult.Companion {
+  }
+
+  public static final class ActivityResultContracts.StartIntentSenderForResult extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.IntentSenderRequest,androidx.activity.result.ActivityResult> {
+    ctor public ActivityResultContracts.StartIntentSenderForResult();
+    method public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.IntentSenderRequest input);
+    method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+    field public static final String ACTION_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.action.INTENT_SENDER_REQUEST";
+    field public static final androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion Companion;
+    field public static final String EXTRA_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.extra.INTENT_SENDER_REQUEST";
+    field public static final String EXTRA_SEND_INTENT_EXCEPTION = "androidx.activity.result.contract.extra.SEND_INTENT_EXCEPTION";
+  }
+
+  public static final class ActivityResultContracts.StartIntentSenderForResult.Companion {
+  }
+
+  public static class ActivityResultContracts.TakePicture extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+    ctor public ActivityResultContracts.TakePicture();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+    method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.TakePicturePreview extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.graphics.Bitmap> {
+    ctor public ActivityResultContracts.TakePicturePreview();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, Void? input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, Void? input);
+    method public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  @Deprecated public static class ActivityResultContracts.TakeVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.graphics.Bitmap> {
+    ctor @Deprecated public ActivityResultContracts.TakeVideo();
+    method @Deprecated @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+    method @Deprecated public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+    method @Deprecated public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+}
+
diff --git a/activity/activity/api/restricted_current.txt b/activity/activity/api/restricted_current.txt
index 4968937..75909c6 100644
--- a/activity/activity/api/restricted_current.txt
+++ b/activity/activity/api/restricted_current.txt
@@ -21,6 +21,7 @@
     method public androidx.lifecycle.ViewModelStore getViewModelStore();
     method public void invalidateMenu();
     method @Deprecated @CallSuper protected void onActivityResult(int, int, android.content.Intent?);
+    method @MainThread public void onBackPressed();
     method @CallSuper public void onMultiWindowModeChanged(boolean);
     method @CallSuper public void onPictureInPictureModeChanged(boolean);
     method @Deprecated @CallSuper public void onRequestPermissionsResult(int, String![], int[]);
@@ -47,6 +48,7 @@
     ctor public ComponentDialog(android.content.Context context);
     method public final androidx.lifecycle.Lifecycle getLifecycle();
     method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+    method @CallSuper public void onBackPressed();
   }
 
   public abstract class OnBackPressedCallback {
@@ -64,6 +66,7 @@
     method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner, androidx.activity.OnBackPressedCallback);
     method @MainThread public boolean hasEnabledCallbacks();
     method @MainThread public void onBackPressed();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher);
   }
 
   public interface OnBackPressedDispatcherOwner extends androidx.lifecycle.LifecycleOwner {
@@ -162,6 +165,21 @@
     method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
   }
 
+  public final class PickVisualMediaRequest {
+    method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+    property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+  }
+
+  public static final class PickVisualMediaRequest.Builder {
+    ctor public PickVisualMediaRequest.Builder();
+    method public androidx.activity.result.PickVisualMediaRequest build();
+    method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+  public final class PickVisualMediaRequestKt {
+    method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
 }
 
 package androidx.activity.result.contract {
@@ -238,6 +256,47 @@
     method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
   }
 
+  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
+    ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+  }
+
+  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
+    ctor public ActivityResultContracts.PickVisualMedia();
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public static final boolean isPhotoPickerAvailable();
+    method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.Companion Companion;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.Companion {
+    method public boolean isPhotoPickerAvailable();
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageAndVideo implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.ImageOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly INSTANCE;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.SingleMimeType implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    ctor public ActivityResultContracts.PickVisualMedia.SingleMimeType(String mimeType);
+    method public String getMimeType();
+    property public final String mimeType;
+  }
+
+  public static final class ActivityResultContracts.PickVisualMedia.VideoOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+    field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VideoOnly INSTANCE;
+  }
+
+  public static sealed interface ActivityResultContracts.PickVisualMedia.VisualMediaType {
+  }
+
   public static final class ActivityResultContracts.RequestMultiplePermissions extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.Map<java.lang.String,java.lang.Boolean>> {
     ctor public ActivityResultContracts.RequestMultiplePermissions();
     method public android.content.Intent createIntent(android.content.Context context, String![] input);
diff --git a/activity/activity/lint-baseline.xml b/activity/activity/lint-baseline.xml
index ca95aae..c307ca2e 100644
--- a/activity/activity/lint-baseline.xml
+++ b/activity/activity/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
@@ -82,4 +82,4 @@
             file="src/main/java/androidx/activity/ComponentActivity.java"/>
     </issue>
 
-</issues>
\ No newline at end of file
+</issues>
diff --git a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
index 0cf6486..58dec93 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
@@ -134,6 +134,7 @@
             finish()
         }
     }
+    @Suppress("DEPRECATION")
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         launcher.launch(intent.getParcelableExtra("destinationIntent"))
diff --git a/activity/activity/src/androidTest/java/androidx/activity/OnBackPressedDispatcherInvokerTest.kt b/activity/activity/src/androidTest/java/androidx/activity/OnBackPressedDispatcherInvokerTest.kt
new file mode 100644
index 0000000..5e1790d
--- /dev/null
+++ b/activity/activity/src/androidTest/java/androidx/activity/OnBackPressedDispatcherInvokerTest.kt
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2022 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.activity
+
+import android.os.Build
+import android.window.OnBackInvokedCallback
+import android.window.OnBackInvokedDispatcher
+import androidx.annotation.RequiresApi
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.S_V2)
+class OnBackPressedDispatcherInvokerTest {
+
+    @Test
+    fun testSimpleInvoker() {
+        var registerCount = 0
+        var unregisterCount = 0
+        val invoker = object : OnBackInvokedDispatcher {
+            override fun registerOnBackInvokedCallback(p0: Int, p1: OnBackInvokedCallback) {
+                registerCount++
+            }
+
+            override fun unregisterOnBackInvokedCallback(p0: OnBackInvokedCallback) {
+                unregisterCount++
+            }
+        }
+
+        val dispatcher = OnBackPressedDispatcher()
+
+        dispatcher.setOnBackInvokedDispatcher(invoker)
+
+        val callback = object : OnBackPressedCallback(true) {
+            override fun handleOnBackPressed() { }
+        }
+
+        dispatcher.addCallback(callback)
+
+        assertThat(registerCount).isEqualTo(1)
+
+        callback.remove()
+
+        assertThat(unregisterCount).isEqualTo(1)
+    }
+
+    @Test
+    fun testInvokerEnableDisable() {
+        var registerCount = 0
+        var unregisterCount = 0
+        val invoker = object : OnBackInvokedDispatcher {
+            override fun registerOnBackInvokedCallback(p0: Int, p1: OnBackInvokedCallback) {
+                registerCount++
+            }
+
+            override fun unregisterOnBackInvokedCallback(p0: OnBackInvokedCallback) {
+                unregisterCount++
+            }
+        }
+
+        val dispatcher = OnBackPressedDispatcher()
+
+        dispatcher.setOnBackInvokedDispatcher(invoker)
+
+        val callback = object : OnBackPressedCallback(true) {
+            override fun handleOnBackPressed() { }
+        }
+
+        dispatcher.addCallback(callback)
+
+        assertThat(registerCount).isEqualTo(1)
+
+        callback.isEnabled = false
+
+        assertThat(unregisterCount).isEqualTo(1)
+
+        callback.isEnabled = true
+
+        assertThat(registerCount).isEqualTo(2)
+    }
+
+    @Test
+    fun testCallbackEnabledDisabled() {
+        val callback = object : OnBackPressedCallback(false) {
+            override fun handleOnBackPressed() {
+                TODO("Not yet implemented")
+            }
+        }
+
+        callback.isEnabled = true
+        callback.isEnabled = false
+    }
+
+    @Test
+    fun testInvokerAddDisabledCallback() {
+        var registerCount = 0
+        var unregisterCount = 0
+        val invoker = object : OnBackInvokedDispatcher {
+            override fun registerOnBackInvokedCallback(p0: Int, p1: OnBackInvokedCallback) {
+                registerCount++
+            }
+
+            override fun unregisterOnBackInvokedCallback(p0: OnBackInvokedCallback) {
+                unregisterCount++
+            }
+        }
+
+        val callback = object : OnBackPressedCallback(false) {
+            override fun handleOnBackPressed() { }
+        }
+
+        val dispatcher = OnBackPressedDispatcher()
+
+        dispatcher.setOnBackInvokedDispatcher(invoker)
+
+        dispatcher.addCallback(callback)
+
+        assertThat(registerCount).isEqualTo(0)
+
+        callback.isEnabled = true
+
+        assertThat(registerCount).isEqualTo(1)
+
+        callback.isEnabled = false
+
+        assertThat(unregisterCount).isEqualTo(1)
+    }
+
+    @Test
+    fun testInvokerAddEnabledCallbackBeforeSet() {
+        var registerCount = 0
+        var unregisterCount = 0
+        val invoker = object : OnBackInvokedDispatcher {
+            override fun registerOnBackInvokedCallback(p0: Int, p1: OnBackInvokedCallback) {
+                registerCount++
+            }
+
+            override fun unregisterOnBackInvokedCallback(p0: OnBackInvokedCallback) {
+                unregisterCount++
+            }
+        }
+
+        val callback = object : OnBackPressedCallback(true) {
+            override fun handleOnBackPressed() { }
+        }
+
+        val dispatcher = OnBackPressedDispatcher()
+        dispatcher.addCallback(callback)
+
+        dispatcher.setOnBackInvokedDispatcher(invoker)
+
+        assertThat(registerCount).isEqualTo(1)
+
+        callback.isEnabled = false
+
+        assertThat(unregisterCount).isEqualTo(1)
+    }
+}
diff --git a/activity/activity/src/androidTest/java/androidx/activity/result/PickVisualMediaRequestTest.kt b/activity/activity/src/androidTest/java/androidx/activity/result/PickVisualMediaRequestTest.kt
new file mode 100644
index 0000000..42992fb
--- /dev/null
+++ b/activity/activity/src/androidTest/java/androidx/activity/result/PickVisualMediaRequestTest.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2022 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.activity.result
+
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+class PickVisualMediaRequestTest {
+
+    @Test
+    fun buildPickVisualMedia() {
+        val request = PickVisualMediaRequest.Builder().setMediaType(
+            ActivityResultContracts.PickVisualMedia.VideoOnly
+        ).build()
+        assertThat(request.mediaType).isEqualTo(ActivityResultContracts.PickVisualMedia.VideoOnly)
+    }
+
+    @Test
+    fun PickVisualMediaFun() {
+        val request = PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.VideoOnly)
+
+        assertThat(request.mediaType).isEqualTo(ActivityResultContracts.PickVisualMedia.VideoOnly)
+    }
+}
\ No newline at end of file
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
index 2694db2..2e82b9e 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
+++ b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
@@ -65,6 +65,7 @@
 import androidx.annotation.MainThread;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
 import androidx.core.app.ActivityCompat;
 import androidx.core.app.ActivityOptionsCompat;
@@ -76,6 +77,7 @@
 import androidx.core.content.ContextCompat;
 import androidx.core.content.OnConfigurationChangedProvider;
 import androidx.core.content.OnTrimMemoryProvider;
+import androidx.core.os.BuildCompat;
 import androidx.core.util.Consumer;
 import androidx.core.view.MenuHost;
 import androidx.core.view.MenuHostHelper;
@@ -151,8 +153,8 @@
                 @Override
                 public void run() {
                     // Calling onBackPressed() on an Activity with its state saved can cause an
-                    // error on devices on API levels before 26. We catch that specific error and
-                    // throw all others.
+                    // error on devices on API levels before 26. We catch that specific error
+                    // and throw all others.
                     try {
                         ComponentActivity.super.onBackPressed();
                     } catch (IllegalStateException e) {
@@ -171,6 +173,7 @@
 
     private final ActivityResultRegistry mActivityResultRegistry = new ActivityResultRegistry() {
 
+        @SuppressWarnings("deprecation")
         @Override
         public <I, O> void onLaunch(
                 final int requestCode,
@@ -345,6 +348,7 @@
      * If your ComponentActivity is annotated with {@link ContentView}, this will
      * call {@link #setContentView(int)} for you.
      */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         // Restore the Saved State first so that it is available to
@@ -353,6 +357,9 @@
         mContextAwareHelper.dispatchOnContextAvailable(this);
         super.onCreate(savedInstanceState);
         ReportFragment.injectIfNeededIn(this);
+        if (BuildCompat.isAtLeastT()) {
+            mOnBackPressedDispatcher.setOnBackInvokedDispatcher(getOnBackInvokedDispatcher());
+        }
         if (mContentLayoutId != 0) {
             setContentView(mContentLayoutId);
         }
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentDialog.kt b/activity/activity/src/main/java/androidx/activity/ComponentDialog.kt
index 6f85fee..e09a4a7 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentDialog.kt
+++ b/activity/activity/src/main/java/androidx/activity/ComponentDialog.kt
@@ -18,6 +18,7 @@
 
 import android.app.Dialog
 import android.content.Context
+import android.os.Build
 import android.os.Bundle
 import android.view.View
 import android.view.ViewGroup
@@ -46,9 +47,13 @@
 
     final override fun getLifecycle(): Lifecycle = lifecycleRegistry
 
+    @Suppress("ClassVerificationFailure") // needed for onBackInvokedDispatcher call
     @CallSuper
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        if (Build.VERSION.SDK_INT >= 33) {
+            onBackPressedDispatcher.setOnBackInvokedDispatcher(onBackInvokedDispatcher)
+        }
         lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
     }
 
diff --git a/activity/activity/src/main/java/androidx/activity/OnBackPressedCallback.java b/activity/activity/src/main/java/androidx/activity/OnBackPressedCallback.java
index 5fc26dc..afa44f3 100644
--- a/activity/activity/src/main/java/androidx/activity/OnBackPressedCallback.java
+++ b/activity/activity/src/main/java/androidx/activity/OnBackPressedCallback.java
@@ -18,6 +18,10 @@
 
 import androidx.annotation.MainThread;
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
+import androidx.core.os.BuildCompat;
+import androidx.core.util.Consumer;
 import androidx.lifecycle.LifecycleOwner;
 
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -44,6 +48,7 @@
 
     private boolean mEnabled;
     private CopyOnWriteArrayList<Cancellable> mCancellables = new CopyOnWriteArrayList<>();
+    private Consumer<Boolean> mEnabledConsumer;
 
     /**
      * Create a {@link OnBackPressedCallback}.
@@ -66,9 +71,13 @@
      *
      * @param enabled whether the callback should be considered enabled
      */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
     @MainThread
     public final void setEnabled(boolean enabled) {
         mEnabled = enabled;
+        if (mEnabledConsumer != null) {
+            mEnabledConsumer.accept(mEnabled);
+        }
     }
 
     /**
@@ -106,4 +115,8 @@
     void removeCancellable(@NonNull Cancellable cancellable) {
         mCancellables.remove(cancellable);
     }
+
+    void setIsEnabledConsumer(@Nullable Consumer<Boolean> isEnabled) {
+        mEnabledConsumer = isEnabled;
+    }
 }
diff --git a/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java b/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java
index 6ff39f1..e306a9b 100644
--- a/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java
+++ b/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java
@@ -17,10 +17,18 @@
 package androidx.activity;
 
 import android.annotation.SuppressLint;
+import android.os.Build;
+import android.window.OnBackInvokedCallback;
+import android.window.OnBackInvokedDispatcher;
 
+import androidx.annotation.DoNotInline;
 import androidx.annotation.MainThread;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
+import androidx.annotation.RequiresApi;
+import androidx.core.os.BuildCompat;
+import androidx.core.util.Consumer;
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleEventObserver;
 import androidx.lifecycle.LifecycleOwner;
@@ -59,6 +67,42 @@
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final ArrayDeque<OnBackPressedCallback> mOnBackPressedCallbacks = new ArrayDeque<>();
 
+    private Consumer<Boolean> mEnabledConsumer;
+
+    private OnBackInvokedCallback mOnBackInvokedCallback;
+    private OnBackInvokedDispatcher mInvokedDispatcher;
+    private boolean mBackInvokedCallbackRegistered = false;
+
+    /**
+     * Sets the {@link OnBackInvokedDispatcher} for handling system back for Android SDK T+.
+     *
+     * @param invoker the OnBackInvokedDispatcher to be set on this dispatcher
+     */
+    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+    public void setOnBackInvokedDispatcher(@NonNull OnBackInvokedDispatcher invoker) {
+        mInvokedDispatcher = invoker;
+        updateBackInvokedCallbackState();
+    }
+
+    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+    void updateBackInvokedCallbackState() {
+        boolean shouldBeRegistered = hasEnabledCallbacks();
+        if (mInvokedDispatcher != null) {
+            if (shouldBeRegistered && !mBackInvokedCallbackRegistered) {
+                Api33Impl.registerOnBackInvokedCallback(
+                        mInvokedDispatcher,
+                        OnBackInvokedDispatcher.PRIORITY_OVERLAY,
+                        mOnBackInvokedCallback
+                );
+                mBackInvokedCallbackRegistered = true;
+            } else if (!shouldBeRegistered && mBackInvokedCallbackRegistered) {
+                Api33Impl.unregisterOnBackInvokedCallback(mInvokedDispatcher,
+                        mOnBackInvokedCallback);
+                mBackInvokedCallbackRegistered = false;
+            }
+        }
+    }
+
     /**
      * Create a new OnBackPressedDispatcher that dispatches System back button pressed events
      * to one or more {@link OnBackPressedCallback} instances.
@@ -74,8 +118,22 @@
      * @param fallbackOnBackPressed The Runnable that should be triggered if
      * {@link #onBackPressed()} is called when {@link #hasEnabledCallbacks()} returns false.
      */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
     public OnBackPressedDispatcher(@Nullable Runnable fallbackOnBackPressed) {
         mFallbackOnBackPressed = fallbackOnBackPressed;
+        if (BuildCompat.isAtLeastT()) {
+            mEnabledConsumer = aBoolean -> {
+                if (BuildCompat.isAtLeastT()) {
+                    updateBackInvokedCallbackState();
+                }
+            };
+            mOnBackInvokedCallback = new OnBackInvokedCallback() {
+                @Override
+                public void onBackInvoked() {
+                    onBackPressed();
+                }
+            };
+        }
     }
 
     /**
@@ -107,6 +165,7 @@
      * @return a {@link Cancellable} which can be used to {@link Cancellable#cancel() cancel}
      * the callback and remove it from the set of OnBackPressedCallbacks.
      */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     @MainThread
     @NonNull
@@ -114,6 +173,10 @@
         mOnBackPressedCallbacks.add(onBackPressedCallback);
         OnBackPressedCancellable cancellable = new OnBackPressedCancellable(onBackPressedCallback);
         onBackPressedCallback.addCancellable(cancellable);
+        if (BuildCompat.isAtLeastT()) {
+            updateBackInvokedCallbackState();
+            onBackPressedCallback.setIsEnabledConsumer(mEnabledConsumer);
+        }
         return cancellable;
     }
 
@@ -141,6 +204,7 @@
      *
      * @see #onBackPressed()
      */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
     @SuppressLint("LambdaLast")
     @MainThread
     public void addCallback(@NonNull LifecycleOwner owner,
@@ -152,6 +216,10 @@
 
         onBackPressedCallback.addCancellable(
                 new LifecycleOnBackPressedCancellable(lifecycle, onBackPressedCallback));
+        if (BuildCompat.isAtLeastT()) {
+            updateBackInvokedCallbackState();
+            onBackPressedCallback.setIsEnabledConsumer(mEnabledConsumer);
+        }
     }
 
     /**
@@ -204,10 +272,15 @@
             mOnBackPressedCallback = onBackPressedCallback;
         }
 
+        @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
         @Override
         public void cancel() {
             mOnBackPressedCallbacks.remove(mOnBackPressedCallback);
             mOnBackPressedCallback.removeCancellable(this);
+            if (BuildCompat.isAtLeastT()) {
+                mOnBackPressedCallback.setIsEnabledConsumer(null);
+                updateBackInvokedCallbackState();
+            }
         }
     }
 
@@ -251,4 +324,25 @@
             }
         }
     }
+
+    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+    static class Api33Impl {
+        private Api33Impl() { }
+
+        @DoNotInline
+        static void registerOnBackInvokedCallback(
+                OnBackInvokedDispatcher onBackInvokedDispatcher, int priority,
+                OnBackInvokedCallback onBackInvokedCallback
+        ) {
+            onBackInvokedDispatcher.registerOnBackInvokedCallback(priority, onBackInvokedCallback);
+        }
+
+        @DoNotInline
+        static void unregisterOnBackInvokedCallback(
+                OnBackInvokedDispatcher onBackInvokedDispatcher,
+                OnBackInvokedCallback onBackInvokedCallback
+        ) {
+            onBackInvokedDispatcher.unregisterOnBackInvokedCallback(onBackInvokedCallback);
+        }
+    }
 }
diff --git a/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt b/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
new file mode 100644
index 0000000..45cbfe9
--- /dev/null
+++ b/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2022 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.activity.result
+
+import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType
+import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo
+
+/**
+ * Creates a request for a
+ * [androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia] or
+ * [androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia] Activity Contract.
+ *
+ * @param mediaType type to go into the PickVisualMediaRequest
+ *
+ * @return a PickVisualMediaRequest that contains the given input
+ */
+fun PickVisualMediaRequest(
+    mediaType: VisualMediaType = ImageAndVideo
+) = PickVisualMediaRequest.Builder().setMediaType(mediaType).build()
+
+/**
+ * A request for a
+ * [androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia] or
+ * [androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia] Activity Contract.
+ */
+class PickVisualMediaRequest internal constructor() {
+
+    var mediaType: VisualMediaType = ImageAndVideo
+        internal set
+
+    /**
+     * A builder for constructing [PickVisualMediaRequest] instances.
+     */
+    class Builder {
+
+        private var mediaType: VisualMediaType = ImageAndVideo
+
+        /**
+         * Set the media type for the [PickVisualMediaRequest].
+         *
+         * The type is the mime type to filter by, e.g. `PickVisualMedia.ImageOnly`,
+         * `PickVisualMedia.ImageAndVideo`, `PickVisualMedia.SingleMimeType("image/gif")`
+         *
+         * @param mediaType type to go into the PickVisualMediaRequest
+         * @return This builder.
+         */
+        fun setMediaType(mediaType: VisualMediaType): Builder {
+            this.mediaType = mediaType
+            return this
+        }
+
+        /**
+         * Build the PickVisualMediaRequest specified by this builder.
+         *
+         * @return the newly constructed PickVisualMediaRequest.
+         */
+        fun build(): PickVisualMediaRequest = PickVisualMediaRequest().apply {
+            this.mediaType = this@Builder.mediaType
+        }
+    }
+}
diff --git a/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt b/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
index 9af89ed..9ccaffc 100644
--- a/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
+++ b/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
@@ -22,11 +22,13 @@
 import android.graphics.Bitmap
 import android.net.Uri
 import android.os.Build
+import android.os.ext.SdkExtensions.getExtensionVersion
 import android.provider.ContactsContract
 import android.provider.DocumentsContract
 import android.provider.MediaStore
 import androidx.activity.result.ActivityResult
 import androidx.activity.result.IntentSenderRequest
+import androidx.activity.result.PickVisualMediaRequest
 import androidx.activity.result.contract.ActivityResultContracts.GetMultipleContents.Companion.getClipDataUris
 import androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion.ACTION_INTENT_SENDER_REQUEST
 import androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion.EXTRA_SEND_INTENT_EXCEPTION
@@ -257,6 +259,7 @@
             input: Void?
         ): SynchronousResult<Bitmap?>? = null
 
+        @Suppress("DEPRECATION")
         final override fun parseResult(resultCode: Int, intent: Intent?): Bitmap? {
             return intent.takeIf { resultCode == Activity.RESULT_OK }?.getParcelableExtra("data")
         }
@@ -317,6 +320,7 @@
             input: Uri
         ): SynchronousResult<Bitmap?>? = null
 
+        @Suppress("DEPRECATION")
         final override fun parseResult(resultCode: Int, intent: Intent?): Bitmap? {
             return intent.takeIf { resultCode == Activity.RESULT_OK }?.getParcelableExtra("data")
         }
@@ -597,4 +601,192 @@
             return intent.takeIf { resultCode == Activity.RESULT_OK }?.data
         }
     }
+
+    /**
+     * An [ActivityResultContract] to use the photo picker through [MediaStore.ACTION_PICK_IMAGES]
+     * when available, and else rely on ACTION_OPEN_DOCUMENT.
+     *
+     * The input is a [PickVisualMediaRequest].
+     *
+     * The output is a `Uri` when the user has selected a media or `null` when the user hasn't
+     * selected any item. Keep in mind that `Uri` returned by the photo picker isn't writable.
+     *
+     * This can be extended to override [createIntent] if you wish to pass additional
+     * extras to the Intent created by `super.createIntent()`.
+     */
+    open class PickVisualMedia : ActivityResultContract<PickVisualMediaRequest, Uri?>() {
+        companion object {
+            /**
+             * Check if the current device has support for the photo picker by checking the running
+             * Android version or the SDK extension version
+             */
+            @JvmStatic
+            fun isPhotoPickerAvailable(): Boolean {
+                return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+                    true
+                } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+                    // getExtension is seen as part of Android Tiramisu only while the SdkExtensions
+                    // have been added on Android R
+                    getExtensionVersion(Build.VERSION_CODES.R) >= 2
+                } else {
+                    false
+                }
+            }
+
+            internal fun getVisualMimeType(input: VisualMediaType): String? {
+                return when (input) {
+                    is ImageOnly -> "image/*"
+                    is VideoOnly -> "video/*"
+                    is SingleMimeType -> input.mimeType
+                    is ImageAndVideo -> null
+                }
+            }
+        }
+
+        /**
+         * Represents filter input type accepted by the photo picker.
+         */
+        sealed interface VisualMediaType
+
+        /**
+         * [VisualMediaType] object used to filter images only when using the photo picker.
+         */
+        object ImageOnly : VisualMediaType
+
+        /**
+         * [VisualMediaType] object used to filter video only when using the photo picker.
+         */
+        object VideoOnly : VisualMediaType
+
+        /**
+         * [VisualMediaType] object used to filter images and video when using the photo picker.
+         */
+        object ImageAndVideo : VisualMediaType
+
+        /**
+         * [VisualMediaType] class used to filter a single mime type only when using the photo
+         * picker.
+         */
+        class SingleMimeType(val mimeType: String) : VisualMediaType
+
+        @CallSuper
+        override fun createIntent(context: Context, input: PickVisualMediaRequest): Intent {
+            // Check if Photo Picker is available on the device
+            return if (isPhotoPickerAvailable()) {
+                Intent(MediaStore.ACTION_PICK_IMAGES).apply {
+                    type = getVisualMimeType(input.mediaType)
+                }
+            } else {
+                // For older devices running KitKat and higher and devices running Android 12
+                // and 13 without the SDK extension that includes the Photo Picker, rely on the
+                // ACTION_OPEN_DOCUMENT intent
+                Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
+                    type = getVisualMimeType(input.mediaType)
+
+                    if (type == null) {
+                        // ACTION_OPEN_DOCUMENT requires to set this parameter when launching the
+                        // intent with multiple mime types
+                        type = "*/*"
+                        putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("image/*", "video/*"))
+                    }
+                }
+            }
+        }
+
+        @Suppress("InvalidNullabilityOverride")
+        final override fun getSynchronousResult(
+            context: Context,
+            input: PickVisualMediaRequest
+        ): SynchronousResult<Uri?>? = null
+
+        final override fun parseResult(resultCode: Int, intent: Intent?): Uri? {
+            return intent.takeIf { resultCode == Activity.RESULT_OK }?.data
+        }
+    }
+
+    /**
+     * An [ActivityResultContract] to use the Photo Picker through [MediaStore.ACTION_PICK_IMAGES]
+     * when available, and else rely on ACTION_OPEN_DOCUMENT.
+     *
+     * The constructor accepts one parameter `maxItems` to limit the number of selectable items when
+     * using the photo picker to return. Keep in mind that this parameter isn't supported on devices
+     * when the photo picker isn't available.
+     *
+     * The input is a [PickVisualMediaRequest].
+     *
+     * The output is a list `Uri` of the selected media. It can be empty if the user hasn't selected
+     * any items. Keep in mind that `Uri` returned by the photo picker aren't writable.
+     *
+     * This can be extended to override [createIntent] if you wish to pass additional
+     * extras to the Intent created by `super.createIntent()`.
+     */
+    @RequiresApi(19)
+    open class PickMultipleVisualMedia(
+        private val maxItems: Int = getMaxItems()
+    ) : ActivityResultContract<PickVisualMediaRequest, List<@JvmSuppressWildcards Uri>>() {
+
+        init {
+            require(maxItems > 1) {
+                "Max items must be higher than 1"
+            }
+        }
+
+        @CallSuper
+        override fun createIntent(context: Context, input: PickVisualMediaRequest): Intent {
+            // Check to see if the photo picker is available
+            return if (PickVisualMedia.isPhotoPickerAvailable()) {
+                Intent(MediaStore.ACTION_PICK_IMAGES).apply {
+                    type = PickVisualMedia.getVisualMimeType(input.mediaType)
+
+                    require(maxItems <= MediaStore.getPickImagesMaxLimit()) {
+                        "Max items must be less or equals MediaStore.getPickImagesMaxLimit()"
+                    }
+
+                    putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxItems)
+                }
+            } else {
+                // For older devices running KitKat and higher and devices running Android 12
+                // and 13 without the SDK extension that includes the Photo Picker, rely on the
+                // ACTION_OPEN_DOCUMENT intent
+                Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
+                    type = PickVisualMedia.getVisualMimeType(input.mediaType)
+                    putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
+
+                    if (type == null) {
+                        // ACTION_OPEN_DOCUMENT requires to set this parameter when launching the
+                        // intent with multiple mime types
+                        type = "*/*"
+                        putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("image/*", "video/*"))
+                    }
+                }
+            }
+        }
+
+        @Suppress("InvalidNullabilityOverride")
+        final override fun getSynchronousResult(
+            context: Context,
+            input: PickVisualMediaRequest
+        ): SynchronousResult<List<@JvmSuppressWildcards Uri>>? = null
+
+        final override fun parseResult(resultCode: Int, intent: Intent?): List<Uri> {
+            return intent.takeIf {
+                resultCode == Activity.RESULT_OK
+            }?.getClipDataUris() ?: emptyList()
+        }
+
+        internal companion object {
+            /**
+             * The photo picker has a maximum limit of selectable items returned by
+             * [MediaStore.getPickImagesMaxLimit()]. On devices not supporting the photo picker, the
+             * limit is ignored.
+             *
+             * @see MediaStore.EXTRA_PICK_IMAGES_MAX
+             */
+            internal fun getMaxItems() = if (PickVisualMedia.isPhotoPickerAvailable()) {
+                MediaStore.getPickImagesMaxLimit()
+            } else {
+                Integer.MAX_VALUE
+            }
+        }
+    }
 }
diff --git a/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt b/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
index 11780b3..947be53 100644
--- a/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
+++ b/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
@@ -36,11 +36,14 @@
 import androidx.activity.ComponentActivity
 import androidx.activity.result.ActivityResultLauncher
 import androidx.activity.result.IntentSenderRequest
+import androidx.activity.result.PickVisualMediaRequest
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.activity.result.contract.ActivityResultContracts.CaptureVideo
 import androidx.activity.result.contract.ActivityResultContracts.CreateDocument
 import androidx.activity.result.contract.ActivityResultContracts.GetContent
 import androidx.activity.result.contract.ActivityResultContracts.OpenMultipleDocuments
+import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia
+import androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia
 import androidx.activity.result.contract.ActivityResultContracts.RequestPermission
 import androidx.activity.result.contract.ActivityResultContracts.TakePicture
 import androidx.activity.result.contract.ActivityResultContracts.TakePicturePreview
@@ -77,6 +80,10 @@
         toast("Got image: $uri")
     }
 
+    lateinit var pickVisualMedia: ActivityResultLauncher<PickVisualMediaRequest>
+
+    lateinit var pickMultipleVisualMedia: ActivityResultLauncher<PickVisualMediaRequest>
+
     lateinit var createDocument: ActivityResultLauncher<String>
 
     lateinit var openDocuments: ActivityResultLauncher<Array<String>>
@@ -92,6 +99,17 @@
         super.onCreate(savedInstanceState)
 
         if (android.os.Build.VERSION.SDK_INT >= 19) {
+            pickVisualMedia = registerForActivityResult(PickVisualMedia()) { uri ->
+                toast("Got image: $uri")
+            }
+            pickMultipleVisualMedia =
+                registerForActivityResult(PickMultipleVisualMedia(5)) { uris ->
+                    var media = ""
+                    uris.forEach {
+                        media += "uri: $it \n"
+                    }
+                    toast("Got media files: $media")
+                }
             createDocument = registerForActivityResult(CreateDocument("image/png")) { uri ->
                 toast("Created document: $uri")
             }
@@ -124,10 +142,25 @@
                     val uri = FileProvider.getUriForFile(this@MainActivity, packageName, file)
                     captureVideo.launch(uri)
                 }
-                button("Pick an image") {
+                button("Pick an image (w/ GET_CONTENT)") {
                     getContent.launch("image/*")
                 }
                 if (android.os.Build.VERSION.SDK_INT >= 19) {
+                    button("Pick an image (w/ photo picker)") {
+                        pickVisualMedia.launch(
+                            PickVisualMediaRequest(PickVisualMedia.ImageOnly)
+                        )
+                    }
+                    button("Pick a GIF (w/ photo picker)") {
+                        pickVisualMedia.launch(
+                            PickVisualMediaRequest(PickVisualMedia.SingleMimeType("image/gif"))
+                        )
+                    }
+                    button("Pick 5 visual media max (w/ photo picker)") {
+                        pickMultipleVisualMedia.launch(
+                            PickVisualMediaRequest(PickVisualMedia.ImageAndVideo)
+                        )
+                    }
                     button("Create document") {
                         createDocument.launch("Temp")
                     }
diff --git a/ads/ads-identifier-common/lint-baseline.xml b/ads/ads-identifier-common/lint-baseline.xml
index 5a3573b..6230722 100644
--- a/ads/ads-identifier-common/lint-baseline.xml
+++ b/ads/ads-identifier-common/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="cli" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="PrivateConstructorForUtilityClass"
diff --git a/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml b/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml
index 9f31c6e..f924709 100644
--- a/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml
+++ b/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml
@@ -7,7 +7,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"/>
+            file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"
+            line="51"
+            column="29"/>
     </issue>
 
     <issue
@@ -16,7 +18,9 @@
         errorLine1="    public void getId(View view) {"
         errorLine2="                      ~~~~">
         <location
-            file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"/>
+            file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"
+            line="57"
+            column="23"/>
     </issue>
 
     <issue
@@ -25,7 +29,9 @@
         errorLine1="    public void getIdSync(View view) {"
         errorLine2="                          ~~~~">
         <location
-            file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"/>
+            file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"
+            line="76"
+            column="27"/>
     </issue>
 
     <issue
@@ -34,7 +40,9 @@
         errorLine1="    public void isProviderAvailable(View view) {"
         errorLine2="                                    ~~~~">
         <location
-            file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"/>
+            file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"
+            line="98"
+            column="37"/>
     </issue>
 
     <issue
@@ -43,7 +51,9 @@
         errorLine1="    public void listProvider(View view) {"
         errorLine2="                             ~~~~">
         <location
-            file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"/>
+            file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"
+            line="106"
+            column="30"/>
     </issue>
 
 </issues>
diff --git a/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml b/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml
index 576720a..a4b68bb 100644
--- a/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml
+++ b/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml
@@ -241,7 +241,9 @@
         errorLine1="        val dateProvider = DateProvider()"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"
+            line="29"
+            column="28"/>
     </issue>
 
     <issue
@@ -250,7 +252,9 @@
         errorLine1="        return experimentalObject.field"
         errorLine2="                                  ~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="29"
+            column="35"/>
     </issue>
 
     <issue
@@ -259,7 +263,9 @@
         errorLine1="        return dateProvider.date"
         errorLine2="                            ~~~~">
         <location
-            file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"
+            line="30"
+            column="29"/>
     </issue>
 
     <issue
@@ -268,7 +274,9 @@
         errorLine1="        val experimentalObject = AnnotatedJavaClass()"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="36"
+            column="34"/>
     </issue>
 
     <issue
@@ -277,7 +285,9 @@
         errorLine1="        return experimentalObject.method()"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="37"
+            column="35"/>
     </issue>
 
     <issue
@@ -286,7 +296,9 @@
         errorLine1="        return AnnotatedJavaClass.FIELD_STATIC"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="44"
+            column="35"/>
     </issue>
 
     <issue
@@ -295,7 +307,9 @@
         errorLine1="        return AnnotatedJavaClass.methodStatic()"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="51"
+            column="35"/>
     </issue>
 
     <issue
@@ -304,7 +318,9 @@
         errorLine1="        val locationProvider = LocationProvider()"
         errorLine2="                               ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"
+            line="57"
+            column="32"/>
     </issue>
 
     <issue
@@ -313,7 +329,9 @@
         errorLine1="        return dateProvider.date + locationProvider.location"
         errorLine2="                                                    ~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"
+            line="58"
+            column="53"/>
     </issue>
 
     <issue
@@ -322,7 +340,9 @@
         errorLine1="        return stableObject.field"
         errorLine2="                            ~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="77"
+            column="29"/>
     </issue>
 
     <issue
@@ -331,7 +351,9 @@
         errorLine1="        return stableObject.method()"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="85"
+            column="29"/>
     </issue>
 
     <issue
@@ -340,7 +362,9 @@
         errorLine1="        return AnnotatedJavaMembers.FIELD_STATIC"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="92"
+            column="37"/>
     </issue>
 
     <issue
@@ -349,7 +373,9 @@
         errorLine1="        return AnnotatedJavaMembers.methodStatic()"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="99"
+            column="37"/>
     </issue>
 
     <issue
@@ -358,7 +384,9 @@
         errorLine1="        return experimentalObject.method() + AnnotatedJavaClass2.FIELD_STATIC"
         errorLine2="                                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="108"
+            column="66"/>
     </issue>
 
     <issue
@@ -367,7 +395,9 @@
         errorLine1="        AnnotatedJavaMembers().field = -1"
         errorLine2="                               ~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="144"
+            column="32"/>
     </issue>
 
     <issue
@@ -376,7 +406,9 @@
         errorLine1="        AnnotatedJavaMembers().field = -1"
         errorLine2="                                       ~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="144"
+            column="40"/>
     </issue>
 
     <issue
@@ -385,7 +417,9 @@
         errorLine1="        val value = AnnotatedJavaMembers().field"
         errorLine2="                                           ~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="145"
+            column="44"/>
     </issue>
 
     <issue
@@ -394,7 +428,9 @@
         errorLine1="        AnnotatedJavaMembers().fieldWithSetMarker = -1"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="146"
+            column="32"/>
     </issue>
 
     <issue
@@ -403,7 +439,9 @@
         errorLine1="        AnnotatedJavaMembers().fieldWithSetMarker = -1"
         errorLine2="                                                    ~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+            line="146"
+            column="53"/>
     </issue>
 
     <issue
@@ -412,7 +450,9 @@
         errorLine1="        return stableObject.field;"
         errorLine2="                            ~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+            line="30"
+            column="29"/>
     </issue>
 
     <issue
@@ -421,7 +461,9 @@
         errorLine1="        return stableObject.method();"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+            line="38"
+            column="29"/>
     </issue>
 
     <issue
@@ -430,7 +472,9 @@
         errorLine1="        return AnnotatedJavaMembers.FIELD_STATIC;"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+            line="45"
+            column="37"/>
     </issue>
 
     <issue
@@ -439,7 +483,9 @@
         errorLine1="        return AnnotatedJavaMembers.methodStatic();"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+            line="52"
+            column="37"/>
     </issue>
 
     <issue
@@ -448,7 +494,9 @@
         errorLine1="        new AnnotatedJavaMembers().field = -1;"
         errorLine2="                                   ~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+            line="59"
+            column="36"/>
     </issue>
 
     <issue
@@ -457,7 +505,9 @@
         errorLine1="        new AnnotatedJavaMembers().field = -1;"
         errorLine2="                                           ~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+            line="59"
+            column="44"/>
     </issue>
 
     <issue
@@ -466,7 +516,9 @@
         errorLine1="        int value = new AnnotatedJavaMembers().field;"
         errorLine2="                                               ~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+            line="60"
+            column="48"/>
     </issue>
 
     <issue
@@ -475,7 +527,9 @@
         errorLine1="        new AnnotatedJavaMembers().setFieldWithSetMarker(-1);"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+            line="61"
+            column="36"/>
     </issue>
 
     <issue
@@ -484,7 +538,9 @@
         errorLine1="        AnnotatedJavaClass2 experimentalObject2 = new AnnotatedJavaClass2();"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalMultipleMarkersFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalMultipleMarkersFromJava.java"
+            line="33"
+            column="51"/>
     </issue>
 
     <issue
@@ -493,7 +549,9 @@
         errorLine1="        return experimentalObject.method() + experimentalObject2.field;"
         errorLine2="                                                                 ~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaExperimentalMultipleMarkersFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaExperimentalMultipleMarkersFromJava.java"
+            line="34"
+            column="66"/>
     </issue>
 
     <issue
@@ -502,7 +560,9 @@
         errorLine1="        Bar bar = new Bar();"
         errorLine2="                  ~~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"/>
+            file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"
+            line="28"
+            column="19"/>
     </issue>
 
     <issue
@@ -511,7 +571,9 @@
         errorLine1="        bar.baz();"
         errorLine2="            ~~~">
         <location
-            file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"/>
+            file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"
+            line="29"
+            column="13"/>
     </issue>
 
     <issue
@@ -520,7 +582,9 @@
         errorLine1="        AnnotatedJavaPackage experimentalObject = new AnnotatedJavaPackage();"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaPackageFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaPackageFromJava.java"
+            line="33"
+            column="51"/>
     </issue>
 
     <issue
@@ -529,7 +593,9 @@
         errorLine1="        experimentalObject.method();"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaPackageFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaPackageFromJava.java"
+            line="34"
+            column="28"/>
     </issue>
 
     <issue
@@ -538,7 +604,9 @@
         errorLine1="        callPackageExperimental();"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"/>
+            file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"
+            line="52"
+            column="9"/>
     </issue>
 
     <issue
@@ -547,7 +615,9 @@
         errorLine1="        safePropagateMarker();"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaPackageFromJava.java"/>
+            file="src/main/java/sample/optin/UseJavaPackageFromJava.java"
+            line="67"
+            column="9"/>
     </issue>
 
     <issue
@@ -556,7 +626,9 @@
         errorLine1="        val experimentalObject = AnnotatedJavaPackage()"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"
+            line="30"
+            column="34"/>
     </issue>
 
     <issue
@@ -565,7 +637,9 @@
         errorLine1="        experimentalObject.method()"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"
+            line="31"
+            column="28"/>
     </issue>
 
     <issue
@@ -574,7 +648,9 @@
         errorLine1="        val bar = Bar()"
         errorLine2="                  ~~~">
         <location
-            file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"/>
+            file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"
+            line="32"
+            column="19"/>
     </issue>
 
     <issue
@@ -583,7 +659,9 @@
         errorLine1="        bar.baz()"
         errorLine2="            ~~~">
         <location
-            file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"/>
+            file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"
+            line="33"
+            column="13"/>
     </issue>
 
     <issue
@@ -592,7 +670,9 @@
         errorLine1="        callPackageExperimental()"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"/>
+            file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"
+            line="56"
+            column="9"/>
     </issue>
 
     <issue
@@ -601,7 +681,9 @@
         errorLine1="        callPackageExperimental()"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"/>
+            file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"
+            line="64"
+            column="9"/>
     </issue>
 
     <issue
@@ -610,7 +692,9 @@
         errorLine1="        sample.experimental.DateProviderKt dateProvider = new sample.experimental.DateProviderKt();"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="25"
+            column="59"/>
     </issue>
 
     <issue
@@ -619,7 +703,9 @@
         errorLine1="        return dateProvider.getDate();"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="26"
+            column="29"/>
     </issue>
 
     <issue
@@ -628,7 +714,9 @@
         errorLine1="        AnnotatedKotlinClass experimentalObject = new AnnotatedKotlinClass();"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="28"
+            column="51"/>
     </issue>
 
     <issue
@@ -637,7 +725,9 @@
         errorLine1="        return experimentalObject.method();"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="29"
+            column="35"/>
     </issue>
 
     <issue
@@ -646,7 +736,9 @@
         errorLine1="        LocationProviderKt locationProvider = new LocationProviderKt();"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="54"
+            column="47"/>
     </issue>
 
     <issue
@@ -655,7 +747,9 @@
         errorLine1="        return dateProvider.getDate() + locationProvider.getLocation();"
         errorLine2="                                                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="55"
+            column="58"/>
     </issue>
 
     <issue
@@ -664,7 +758,9 @@
         errorLine1="        return experimentalObject.method() + AnnotatedKotlinClass2.fieldStatic;"
         errorLine2="                                                                   ~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="56"
+            column="68"/>
     </issue>
 
     <issue
@@ -673,7 +769,9 @@
         errorLine1="        TimeProviderKt.getTimeStatically();"
         errorLine2="                       ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="88"
+            column="24"/>
     </issue>
 
     <issue
@@ -682,7 +780,9 @@
         errorLine1="        TimeProviderKt.Companion.getTimeStatically();"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="89"
+            column="34"/>
     </issue>
 
     <issue
@@ -691,7 +791,9 @@
         errorLine1="        new TimeProviderKt().getTime();"
         errorLine2="                             ~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="96"
+            column="30"/>
     </issue>
 
     <issue
@@ -700,7 +802,9 @@
         errorLine1="        new TimeProviderKt().getTimeJava();"
         errorLine2="                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="97"
+            column="30"/>
     </issue>
 
     <issue
@@ -709,7 +813,9 @@
         errorLine1="        AnnotatedKotlinMembers.methodStatic();"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="97"
+            column="32"/>
     </issue>
 
     <issue
@@ -718,7 +824,9 @@
         errorLine1="        AnnotatedKotlinMembers.Companion.methodStatic();"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="98"
+            column="42"/>
     </issue>
 
     <issue
@@ -727,7 +835,9 @@
         errorLine1="        new AnnotatedKotlinMembers().method();"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="107"
+            column="38"/>
     </issue>
 
     <issue
@@ -736,7 +846,9 @@
         errorLine1="        new AnnotatedKotlinMembers().methodWithJavaMarker();"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="108"
+            column="38"/>
     </issue>
 
     <issue
@@ -745,7 +857,9 @@
         errorLine1="        new AnnotatedKotlinMembers().setFieldWithSetMarker(-1);"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="117"
+            column="38"/>
     </issue>
 
 </issues>
diff --git a/appcompat/appcompat-lint/integration-tests/lint-baseline.xml b/appcompat/appcompat-lint/integration-tests/lint-baseline.xml
index 9776c1c..a4b89aa 100644
--- a/appcompat/appcompat-lint/integration-tests/lint-baseline.xml
+++ b/appcompat/appcompat-lint/integration-tests/lint-baseline.xml
@@ -52,7 +52,8 @@
         errorLine1="            setActionBar(new Toolbar(this));"
         errorLine2="                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/AppCompatLintDemoExt.java"/>
+            file="src/main/java/com/example/android/appcompat/AppCompatLintDemoExt.java"
+            column="26"/>
     </issue>
 
     <issue
@@ -61,7 +62,9 @@
         errorLine1="            setActionBar(new Toolbar(this));"
         errorLine2="            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"/>
+            file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"
+            line="34"
+            column="13"/>
     </issue>
 
     <issue
@@ -70,7 +73,9 @@
         errorLine1="            setActionBar(new Toolbar(this));"
         errorLine2="                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"/>
+            file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"
+            line="34"
+            column="26"/>
     </issue>
 
     <issue
@@ -79,7 +84,9 @@
         errorLine1="    &lt;item app:alpha=&quot;?android:disabledAlpha&quot;"
         errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/res/color/color_state_list_missing_android_alpha.xml"/>
+            file="src/main/res/color/color_state_list_missing_android_alpha.xml"
+            line="19"
+            column="11"/>
     </issue>
 
     <issue
@@ -88,7 +95,9 @@
         errorLine1="        android:tint=&quot;#FF0000&quot; />"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/res/layout/image_view_using_android_tint.xml"/>
+            file="src/main/res/layout/image_view_using_android_tint.xml"
+            line="39"
+            column="9"/>
     </issue>
 
     <issue
@@ -97,7 +106,9 @@
         errorLine1="        android:tint=&quot;#FF0000&quot; />"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/res/layout/image_view_using_android_tint.xml"/>
+            file="src/main/res/layout/image_view_using_android_tint.xml"
+            line="51"
+            column="9"/>
     </issue>
 
     <issue
@@ -106,7 +117,9 @@
         errorLine1="        ColorStateList csl2 = new ResourceLoader().getColorStateList("
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"/>
+            file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"
+            line="54"
+            column="31"/>
     </issue>
 
     <issue
@@ -115,7 +128,9 @@
         errorLine1="        ColorStateList csl2 = new ResourceLoader().getColorStateList("
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"/>
+            file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"
+            line="54"
+            column="31"/>
     </issue>
 
     <issue
@@ -124,7 +139,9 @@
         errorLine1="    public void myButtonClick(View view) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/ActivityWithClick.java"/>
+            file="src/main/java/com/example/android/appcompat/ActivityWithClick.java"
+            line="39"
+            column="31"/>
     </issue>
 
     <issue
@@ -133,7 +150,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"/>
+            file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"
+            line="42"
+            column="26"/>
     </issue>
 
     <issue
@@ -142,7 +161,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/AppCompatLintDemoExt.java"/>
+            file="src/main/java/com/example/android/appcompat/AppCompatLintDemoExt.java"
+            line="28"
+            column="26"/>
     </issue>
 
     <issue
@@ -151,7 +172,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"/>
+            file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"
+            line="29"
+            column="26"/>
     </issue>
 
     <issue
@@ -160,7 +183,9 @@
         errorLine1="    public CustomSwitch(Context context) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/CustomSwitch.java"/>
+            file="src/main/java/com/example/android/appcompat/CustomSwitch.java"
+            line="28"
+            column="25"/>
     </issue>
 
     <issue
@@ -169,7 +194,9 @@
         errorLine1="    public CustomSwitch(Context context, AttributeSet attrs) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/CustomSwitch.java"/>
+            file="src/main/java/com/example/android/appcompat/CustomSwitch.java"
+            line="32"
+            column="25"/>
     </issue>
 
     <issue
@@ -178,7 +205,9 @@
         errorLine1="    public CustomSwitch(Context context, AttributeSet attrs) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/CustomSwitch.java"/>
+            file="src/main/java/com/example/android/appcompat/CustomSwitch.java"
+            line="32"
+            column="42"/>
     </issue>
 
     <issue
@@ -187,7 +216,9 @@
         errorLine1="    public CustomSwitch(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/CustomSwitch.java"/>
+            file="src/main/java/com/example/android/appcompat/CustomSwitch.java"
+            line="36"
+            column="25"/>
     </issue>
 
     <issue
@@ -196,7 +227,9 @@
         errorLine1="    public CustomSwitch(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/appcompat/CustomSwitch.java"/>
+            file="src/main/java/com/example/android/appcompat/CustomSwitch.java"
+            line="36"
+            column="42"/>
     </issue>
 
 </issues>
diff --git a/appcompat/appcompat-resources/lint-baseline.xml b/appcompat/appcompat-resources/lint-baseline.xml
index 788b592..a9a30d2 100644
--- a/appcompat/appcompat-resources/lint-baseline.xml
+++ b/appcompat/appcompat-resources/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-beta03" type="baseline" client="gradle" dependencies="false" name="AGP (7.1.0-beta03)" variant="all" version="7.1.0-beta03">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
@@ -113,44 +113,8 @@
     </issue>
 
     <issue
-        id="LambdaLast"
-        message="Functional interface parameters (such as parameter 2, &quot;what&quot;, in androidx.appcompat.graphics.drawable.DrawableWrapper.scheduleDrawable) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions"
-        errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
-        errorLine2="                                                              ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
-    </issue>
-
-    <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static AnimatedStateListDrawableCompat createFromXmlInner("
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean onStateChange(int[] stateSet) {"
-        errorLine2="                                    ~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable mutate() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static ColorStateList getColorStateList(@NonNull Context context, @ColorRes int resId) {"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
@@ -159,7 +123,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static PorterDuff.Mode parseTintMode(int value, PorterDuff.Mode defaultMode) {"
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
@@ -168,7 +132,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static PorterDuff.Mode parseTintMode(int value, PorterDuff.Mode defaultMode) {"
         errorLine2="                                                           ~~~~~~~~~~~~~~~">
         <location
@@ -177,7 +141,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public DrawableWrapper(Drawable drawable) {"
         errorLine2="                           ~~~~~~~~">
         <location
@@ -186,7 +150,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void draw(Canvas canvas) {"
         errorLine2="                     ~~~~~~">
         <location
@@ -195,7 +159,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onBoundsChange(Rect bounds) {"
         errorLine2="                                  ~~~~">
         <location
@@ -204,7 +168,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setColorFilter(ColorFilter cf) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
@@ -213,7 +177,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean setState(final int[] stateSet) {"
         errorLine2="                                  ~~~~~">
         <location
@@ -222,7 +186,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] getState() {"
         errorLine2="           ~~~~~">
         <location
@@ -231,7 +195,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getCurrent() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -240,7 +204,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Region getTransparentRegion() {"
         errorLine2="           ~~~~~~">
         <location
@@ -249,7 +213,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean getPadding(Rect padding) {"
         errorLine2="                              ~~~~">
         <location
@@ -258,7 +222,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void invalidateDrawable(Drawable who) {"
         errorLine2="                                   ~~~~~~~~">
         <location
@@ -267,7 +231,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
         errorLine2="                                 ~~~~~~~~">
         <location
@@ -276,7 +240,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
         errorLine2="                                               ~~~~~~~~">
         <location
@@ -285,7 +249,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void unscheduleDrawable(Drawable who, Runnable what) {"
         errorLine2="                                   ~~~~~~~~">
         <location
@@ -294,7 +258,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void unscheduleDrawable(Drawable who, Runnable what) {"
         errorLine2="                                                 ~~~~~~~~">
         <location
@@ -303,7 +267,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTintList(ColorStateList tint) {"
         errorLine2="                            ~~~~~~~~~~~~~~">
         <location
@@ -312,7 +276,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTintMode(PorterDuff.Mode tintMode) {"
         errorLine2="                            ~~~~~~~~~~~~~~~">
         <location
@@ -321,7 +285,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getWrappedDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -330,7 +294,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setWrappedDrawable(Drawable drawable) {"
         errorLine2="                                   ~~~~~~~~">
         <location
@@ -339,7 +303,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static synchronized ResourceManagerInternal get() {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -348,7 +312,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public synchronized void setHooks(ResourceManagerHooks hooks) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -357,7 +321,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public synchronized Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {"
         errorLine2="                        ~~~~~~~~">
         <location
@@ -366,7 +330,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static synchronized PorterDuffColorFilter getPorterDuffColorFilter("
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -375,7 +339,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            int color, PorterDuff.Mode mode) {"
         errorLine2="                       ~~~~~~~~~~~~~~~">
         <location
@@ -384,7 +348,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Context wrap(@NonNull final Context context) {"
         errorLine2="                  ~~~~~~~">
         <location
@@ -393,34 +357,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Resources.Theme getTheme() {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Resources getResources() {"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public AssetManager getAssets() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ColorStateList mTintList;"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -429,20 +366,11 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PorterDuff.Mode mTintMode;"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/TintInfo.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getDrawable(int id) throws NotFoundException {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java"/>
-    </issue>
-
 </issues>
diff --git a/appcompat/appcompat/api/current.txt b/appcompat/appcompat/api/current.txt
index e36516b..6431f1d 100644
--- a/appcompat/appcompat/api/current.txt
+++ b/appcompat/appcompat/api/current.txt
@@ -224,6 +224,7 @@
     method public androidx.appcompat.app.ActionBar? getSupportActionBar();
     method public android.content.Intent? getSupportParentActivityIntent();
     method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+    method protected void onLocalesChanged(androidx.core.os.LocaleListCompat);
     method public final boolean onMenuItemSelected(int, android.view.MenuItem);
     method protected void onNightModeChanged(int);
     method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
@@ -261,6 +262,8 @@
     method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
     method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
     method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
+    method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
+    method public android.content.Context? getContextForDelegate();
     method public static int getDefaultNightMode();
     method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
     method public int getLocalNightMode();
@@ -280,6 +283,7 @@
     method public abstract void onStart();
     method public abstract void onStop();
     method public abstract boolean requestWindowFeature(int);
+    method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
     method public static void setCompatVectorFromResourcesEnabled(boolean);
     method public abstract void setContentView(android.view.View!);
     method public abstract void setContentView(@LayoutRes int);
@@ -287,6 +291,7 @@
     method public static void setDefaultNightMode(int);
     method public abstract void setHandleNativeActionModesEnabled(boolean);
     method @RequiresApi(17) public abstract void setLocalNightMode(int);
+    method @CallSuper @RequiresApi(33) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher?);
     method public abstract void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
     method public void setTheme(@StyleRes int);
     method public abstract void setTitle(CharSequence?);
@@ -339,6 +344,12 @@
     method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
   }
 
+  public final class AppLocalesMetadataHolderService extends android.app.Service {
+    ctor public AppLocalesMetadataHolderService();
+    method public static android.content.pm.ServiceInfo getServiceInfo(android.content.Context) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.os.IBinder onBind(android.content.Intent);
+  }
+
 }
 
 package androidx.appcompat.graphics.drawable {
@@ -979,8 +990,10 @@
     method public boolean hideOverflowMenu();
     method public void inflateMenu(@MenuRes int);
     method @MainThread public void invalidateMenu();
+    method public boolean isBackInvokedCallbackEnabled();
     method public boolean isOverflowMenuShowing();
     method @MainThread public void removeMenuProvider(androidx.core.view.MenuProvider);
+    method public void setBackInvokedCallbackEnabled(boolean);
     method public void setCollapseContentDescription(@StringRes int);
     method public void setCollapseContentDescription(CharSequence?);
     method public void setCollapseIcon(@DrawableRes int);
diff --git a/appcompat/appcompat/api/public_plus_experimental_current.txt b/appcompat/appcompat/api/public_plus_experimental_current.txt
index e36516b..6431f1d 100644
--- a/appcompat/appcompat/api/public_plus_experimental_current.txt
+++ b/appcompat/appcompat/api/public_plus_experimental_current.txt
@@ -224,6 +224,7 @@
     method public androidx.appcompat.app.ActionBar? getSupportActionBar();
     method public android.content.Intent? getSupportParentActivityIntent();
     method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+    method protected void onLocalesChanged(androidx.core.os.LocaleListCompat);
     method public final boolean onMenuItemSelected(int, android.view.MenuItem);
     method protected void onNightModeChanged(int);
     method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
@@ -261,6 +262,8 @@
     method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
     method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
     method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
+    method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
+    method public android.content.Context? getContextForDelegate();
     method public static int getDefaultNightMode();
     method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
     method public int getLocalNightMode();
@@ -280,6 +283,7 @@
     method public abstract void onStart();
     method public abstract void onStop();
     method public abstract boolean requestWindowFeature(int);
+    method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
     method public static void setCompatVectorFromResourcesEnabled(boolean);
     method public abstract void setContentView(android.view.View!);
     method public abstract void setContentView(@LayoutRes int);
@@ -287,6 +291,7 @@
     method public static void setDefaultNightMode(int);
     method public abstract void setHandleNativeActionModesEnabled(boolean);
     method @RequiresApi(17) public abstract void setLocalNightMode(int);
+    method @CallSuper @RequiresApi(33) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher?);
     method public abstract void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
     method public void setTheme(@StyleRes int);
     method public abstract void setTitle(CharSequence?);
@@ -339,6 +344,12 @@
     method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
   }
 
+  public final class AppLocalesMetadataHolderService extends android.app.Service {
+    ctor public AppLocalesMetadataHolderService();
+    method public static android.content.pm.ServiceInfo getServiceInfo(android.content.Context) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.os.IBinder onBind(android.content.Intent);
+  }
+
 }
 
 package androidx.appcompat.graphics.drawable {
@@ -979,8 +990,10 @@
     method public boolean hideOverflowMenu();
     method public void inflateMenu(@MenuRes int);
     method @MainThread public void invalidateMenu();
+    method public boolean isBackInvokedCallbackEnabled();
     method public boolean isOverflowMenuShowing();
     method @MainThread public void removeMenuProvider(androidx.core.view.MenuProvider);
+    method public void setBackInvokedCallbackEnabled(boolean);
     method public void setCollapseContentDescription(@StringRes int);
     method public void setCollapseContentDescription(CharSequence?);
     method public void setCollapseIcon(@DrawableRes int);
diff --git a/appcompat/appcompat/api/restricted_current.txt b/appcompat/appcompat/api/restricted_current.txt
index cfb6629..d83d334 100644
--- a/appcompat/appcompat/api/restricted_current.txt
+++ b/appcompat/appcompat/api/restricted_current.txt
@@ -245,6 +245,7 @@
     method public androidx.appcompat.app.ActionBar? getSupportActionBar();
     method public android.content.Intent? getSupportParentActivityIntent();
     method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+    method protected void onLocalesChanged(androidx.core.os.LocaleListCompat);
     method public final boolean onMenuItemSelected(int, android.view.MenuItem);
     method protected void onNightModeChanged(@androidx.appcompat.app.AppCompatDelegate.NightMode int);
     method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
@@ -282,6 +283,8 @@
     method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
     method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
     method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
+    method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
+    method public android.content.Context? getContextForDelegate();
     method @androidx.appcompat.app.AppCompatDelegate.NightMode public static int getDefaultNightMode();
     method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
     method @androidx.appcompat.app.AppCompatDelegate.NightMode public int getLocalNightMode();
@@ -301,6 +304,7 @@
     method public abstract void onStart();
     method public abstract void onStop();
     method public abstract boolean requestWindowFeature(int);
+    method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
     method public static void setCompatVectorFromResourcesEnabled(boolean);
     method public abstract void setContentView(android.view.View!);
     method public abstract void setContentView(@LayoutRes int);
@@ -308,6 +312,7 @@
     method public static void setDefaultNightMode(@androidx.appcompat.app.AppCompatDelegate.NightMode int);
     method public abstract void setHandleNativeActionModesEnabled(boolean);
     method @RequiresApi(17) public abstract void setLocalNightMode(@androidx.appcompat.app.AppCompatDelegate.NightMode int);
+    method @CallSuper @RequiresApi(33) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher?);
     method public abstract void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
     method public void setTheme(@StyleRes int);
     method public abstract void setTitle(CharSequence?);
@@ -363,6 +368,12 @@
     method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
   }
 
+  public final class AppLocalesMetadataHolderService extends android.app.Service {
+    ctor public AppLocalesMetadataHolderService();
+    method public static android.content.pm.ServiceInfo getServiceInfo(android.content.Context) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.os.IBinder onBind(android.content.Intent);
+  }
+
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class WindowDecorActionBar extends androidx.appcompat.app.ActionBar implements androidx.appcompat.widget.ActionBarOverlayLayout.ActionBarVisibilityCallback {
     ctor public WindowDecorActionBar(android.app.Activity!, boolean);
     ctor public WindowDecorActionBar(android.app.Dialog!);
@@ -2110,10 +2121,12 @@
     method public boolean hideOverflowMenu();
     method public void inflateMenu(@MenuRes int);
     method @MainThread public void invalidateMenu();
+    method public boolean isBackInvokedCallbackEnabled();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isOverflowMenuShowPending();
     method public boolean isOverflowMenuShowing();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isTitleTruncated();
     method @MainThread public void removeMenuProvider(androidx.core.view.MenuProvider);
+    method public void setBackInvokedCallbackEnabled(boolean);
     method public void setCollapseContentDescription(@StringRes int);
     method public void setCollapseContentDescription(CharSequence?);
     method public void setCollapseIcon(@DrawableRes int);
diff --git a/appcompat/appcompat/build.gradle b/appcompat/appcompat/build.gradle
index 9c66ff5..c5bf201 100644
--- a/appcompat/appcompat/build.gradle
+++ b/appcompat/appcompat/build.gradle
@@ -14,7 +14,7 @@
     }
 
     api("androidx.annotation:annotation:1.3.0")
-    api("androidx.core:core:1.8.0")
+    api(projectOrArtifact(":core:core"))
 
     // Required to make activity 1.5.0-rc01 dependencies resolve.
     implementation("androidx.core:core-ktx:1.8.0")
@@ -24,7 +24,7 @@
     implementation(projectOrArtifact(":emoji2:emoji2-views-helper"))
     implementation("androidx.collection:collection:1.0.0")
     api("androidx.cursoradapter:cursoradapter:1.0.0")
-    api("androidx.activity:activity:1.5.0")
+    api(projectOrArtifact(":activity:activity"))
     api("androidx.fragment:fragment:1.3.6")
     api(project(":appcompat:appcompat-resources"))
     api("androidx.drawerlayout:drawerlayout:1.0.0")
diff --git a/appcompat/appcompat/lint-baseline.xml b/appcompat/appcompat/lint-baseline.xml
index 857ba3e..4af1a748d 100644
--- a/appcompat/appcompat/lint-baseline.xml
+++ b/appcompat/appcompat/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-beta03" type="baseline" client="gradle" dependencies="false" name="AGP (7.1.0-beta03)" variant="all" version="7.1.0-beta03">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
@@ -12,15 +12,6 @@
 
     <issue
         id="NewApi"
-        message="Class requires API level 21 (current min is 14): `android.graphics.drawable.AnimatedStateListDrawable`"
-        errorLine1="                || checkMark instanceof AnimatedStateListDrawable);"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appcompat/widget/AppCompatCheckedTextViewTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
         message="Call requires API level 25 (current min is 14): `new android.view.inputmethod.InputContentInfo`"
         errorLine1="        final InputContentInfo contentInfo = new InputContentInfo("
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~">
@@ -66,15 +57,6 @@
 
     <issue
         id="NewApi"
-        message="Class requires API level 26 (current min is 14): `android.view.textclassifier.TextClassifier`"
-        errorLine1="    private static class NoOpTextClassifier implements TextClassifier {}"
-        errorLine2="                                                       ~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
         message="Call requires API level 17 (current min is 14): `android.view.ContextThemeWrapper#applyOverrideConfiguration`"
         errorLine1="            wrappedBase.applyOverrideConfiguration(overrideConfig);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -467,17 +449,8 @@
     </issue>
 
     <issue
-        id="LambdaLast"
-        message="Functional interface parameters (such as parameter 1, &quot;adapter&quot;, in androidx.appcompat.widget.ToolbarWidgetWrapper.setDropdownParams) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions"
-        errorLine1="            AdapterView.OnItemSelectedListener listener) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
-    </issue>
-
-    <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setCustomView(View view);"
         errorLine2="                                       ~~~~">
         <location
@@ -486,7 +459,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setCustomView(View view, LayoutParams layoutParams);"
         errorLine2="                                       ~~~~">
         <location
@@ -495,7 +468,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setCustomView(View view, LayoutParams layoutParams);"
         errorLine2="                                                  ~~~~~~~~~~~~">
         <location
@@ -504,7 +477,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setIcon(Drawable icon);"
         errorLine2="                                 ~~~~~~~~">
         <location
@@ -513,7 +486,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setLogo(Drawable logo);"
         errorLine2="                                 ~~~~~~~~">
         <location
@@ -522,7 +495,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setTitle(CharSequence title);"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
@@ -531,7 +504,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setSubtitle(CharSequence subtitle);"
         errorLine2="                                     ~~~~~~~~~~~~">
         <location
@@ -540,7 +513,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setStackedBackgroundDrawable(Drawable d) { }"
         errorLine2="                                             ~~~~~~~~">
         <location
@@ -549,7 +522,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSplitBackgroundDrawable(Drawable d) { }"
         errorLine2="                                           ~~~~~~~~">
         <location
@@ -558,7 +531,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract View getCustomView();"
         errorLine2="                    ~~~~">
         <location
@@ -567,7 +540,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void addOnMenuVisibilityListener(OnMenuVisibilityListener listener);"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -576,7 +549,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener);"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -585,7 +558,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Context getThemedContext() {"
         errorLine2="           ~~~~~~~">
         <location
@@ -594,7 +567,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onConfigurationChanged(Configuration config) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
@@ -603,7 +576,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMode startActionMode(ActionMode.Callback callback) {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -612,7 +585,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMode startActionMode(ActionMode.Callback callback) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -621,7 +594,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onMenuKeyEvent(KeyEvent event) {"
         errorLine2="                                  ~~~~~~~~">
         <location
@@ -630,7 +603,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onKeyShortcut(int keyCode, KeyEvent ev) {"
         errorLine2="                                              ~~~~~~~~">
         <location
@@ -639,7 +612,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setWindowTitle(CharSequence title) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
@@ -648,7 +621,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(@NonNull Context c, AttributeSet attrs) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
@@ -657,7 +630,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
@@ -666,7 +639,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -675,7 +648,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionBarContainer(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -684,7 +657,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionBarContainer(Context context, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -693,7 +666,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionBarContainer(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
@@ -702,7 +675,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPrimaryBackground(Drawable bg) {"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -711,7 +684,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setStackedBackground(Drawable bg) {"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -720,7 +693,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSplitBackground(Drawable bg) {"
         errorLine2="                                   ~~~~~~~~">
         <location
@@ -729,7 +702,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected boolean verifyDrawable(Drawable who) {"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -738,34 +711,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onInterceptTouchEvent(MotionEvent ev) {"
-        errorLine2="                                         ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onHoverEvent(MotionEvent ev) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTabContainer(ScrollingTabContainerView tabView) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -774,7 +720,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getTabContainer() {"
         errorLine2="           ~~~~">
         <location
@@ -783,61 +729,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public android.view.ActionMode startActionModeForChild(View child,"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public android.view.ActionMode startActionModeForChild(View child,"
-        errorLine2="                                                           ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            android.view.ActionMode.Callback callback) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public android.view.ActionMode startActionModeForChild(View child,"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public android.view.ActionMode startActionModeForChild(View child,"
-        errorLine2="                                                           ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            android.view.ActionMode.Callback callback, int type) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCustomView(View view) {"
         errorLine2="                              ~~~~">
         <location
@@ -846,7 +738,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
@@ -855,7 +747,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
@@ -864,7 +756,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -873,7 +765,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -882,7 +774,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void initForMode(final ActionMode mode) {"
         errorLine2="                                  ~~~~~~~~~~">
         <location
@@ -891,34 +783,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ViewGroup.LayoutParams generateDefaultLayoutParams() {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="                                                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void setActionBarUpIndicator(Drawable upDrawable, @StringRes int contentDescRes);"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -927,7 +792,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        Drawable getThemeUpIndicator();"
         errorLine2="        ~~~~~~~~">
         <location
@@ -936,7 +801,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        Context getActionBarThemedContext();"
         errorLine2="        ~~~~~~~">
         <location
@@ -945,7 +810,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
         errorLine2="                                 ~~~~~~~~">
         <location
@@ -954,7 +819,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
@@ -963,7 +828,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
         errorLine2="                                 ~~~~~~~~">
         <location
@@ -972,7 +837,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
@@ -981,7 +846,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Toolbar toolbar, @StringRes int openDrawerContentDescRes,"
         errorLine2="            ~~~~~~~">
         <location
@@ -990,7 +855,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onConfigurationChanged(Configuration newConfig) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
@@ -999,7 +864,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onOptionsItemSelected(MenuItem item) {"
         errorLine2="                                         ~~~~~~~~">
         <location
@@ -1008,7 +873,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setHomeAsUpIndicator(Drawable indicator) {"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -1017,7 +882,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onDrawerSlide(View drawerView, float slideOffset) {"
         errorLine2="                              ~~~~">
         <location
@@ -1026,7 +891,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onDrawerOpened(View drawerView) {"
         errorLine2="                               ~~~~">
         <location
@@ -1035,7 +900,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onDrawerClosed(View drawerView) {"
         errorLine2="                               ~~~~">
         <location
@@ -1044,7 +909,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View.OnClickListener getToolbarNavigationClickListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1053,7 +918,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            View.OnClickListener onToolbarNavigationClickListener) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1062,7 +927,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static ActionBarPolicy get(Context context) {"
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
@@ -1071,7 +936,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static ActionBarPolicy get(Context context) {"
         errorLine2="                                      ~~~~~~~">
         <location
@@ -1080,7 +945,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMenuItem(Context context, int group, int id, int categoryOrder, int ordering,"
         errorLine2="                          ~~~~~~~">
         <location
@@ -1089,7 +954,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            CharSequence title) {"
         errorLine2="            ~~~~~~~~~~~~">
         <location
@@ -1098,7 +963,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getIcon() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1107,7 +972,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Intent getIntent() {"
         errorLine2="           ~~~~~~">
         <location
@@ -1116,7 +981,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ContextMenuInfo getMenuInfo() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
@@ -1125,7 +990,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SubMenu getSubMenu() {"
         errorLine2="           ~~~~~~~">
         <location
@@ -1134,7 +999,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -1143,7 +1008,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitleCondensed() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -1152,7 +1017,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1161,16 +1026,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setCheckable(boolean checkable) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1179,7 +1035,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMenuItem setExclusiveCheckable(boolean exclusive) {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -1188,7 +1044,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setChecked(boolean checked) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1197,7 +1053,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setEnabled(boolean enabled) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1206,7 +1062,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1215,7 +1071,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="                            ~~~~~~~~">
         <location
@@ -1224,7 +1080,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIcon(int iconRes) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1233,7 +1089,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1242,7 +1098,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="                              ~~~~~~">
         <location
@@ -1251,7 +1107,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setNumericShortcut(char numericChar) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1260,16 +1116,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1278,7 +1125,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1287,7 +1134,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1296,16 +1143,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1314,7 +1152,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
@@ -1323,7 +1161,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitle(int title) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1332,7 +1170,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1341,7 +1179,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
@@ -1350,7 +1188,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setVisible(boolean visible) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1359,16 +1197,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setActionView(View actionView) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SupportMenuItem setActionView(View actionView) {"
         errorLine2="                                         ~~~~">
         <location
@@ -1377,7 +1206,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getActionView() {"
         errorLine2="           ~~~~">
         <location
@@ -1386,7 +1215,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1395,7 +1224,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1404,7 +1233,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public android.view.ActionProvider getActionProvider() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1413,16 +1242,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setActionView(int resId) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionProvider getSupportActionProvider() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -1431,16 +1251,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~">
         <location
@@ -1449,16 +1260,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setShowAsActionFlags(int actionEnum) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1467,7 +1269,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1476,16 +1278,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
@@ -1494,7 +1287,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getContentDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -1503,16 +1296,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
@@ -1521,7 +1305,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTooltipText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -1530,16 +1314,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ColorStateList getIconTintList() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -1548,16 +1323,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~">
         <location
@@ -1566,7 +1332,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PorterDuff.Mode getIconTintMode() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
@@ -1575,7 +1341,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMenuItemView(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -1584,7 +1350,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMenuItemView(Context context, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -1593,7 +1359,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMenuItemView(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
@@ -1602,7 +1368,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -1611,7 +1377,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
@@ -1620,16 +1386,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onConfigurationChanged(Configuration newConfig) {"
-        errorLine2="                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItemImpl getItemData() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -1638,7 +1395,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void initialize(MenuItemImpl itemData, int menuType) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
@@ -1647,25 +1404,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent e) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onClick(View v) {"
-        errorLine2="                        ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setItemInvoker(MenuBuilder.ItemInvoker invoker) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1674,7 +1413,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPopupCallback(PopupCallback popupCallback) {"
         errorLine2="                                 ~~~~~~~~~~~~~">
         <location
@@ -1683,7 +1422,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setIcon(Drawable icon) {"
         errorLine2="                        ~~~~~~~~">
         <location
@@ -1692,7 +1431,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
@@ -1701,16 +1440,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onRestoreInstanceState(Parcelable state) {"
-        errorLine2="                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract ShowableListMenu getPopup();"
         errorLine2="                        ~~~~~~~~~~~~~~~~">
         <location
@@ -1719,7 +1449,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPresenter(ActionMenuPresenter presenter) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1728,16 +1458,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onConfigurationChanged(Configuration newConfig) {"
-        errorLine2="                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1746,61 +1467,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateDefaultLayoutParams() {"
-        errorLine2="              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public LayoutParams generateOverflowButtonLayoutParams() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -1809,7 +1476,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean invokeItem(MenuItemImpl item) {"
         errorLine2="                              ~~~~~~~~~~~~">
         <location
@@ -1818,7 +1485,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void initialize(MenuBuilder menu) {"
         errorLine2="                           ~~~~~~~~~~~">
         <location
@@ -1827,7 +1494,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Menu getMenu() {"
         errorLine2="           ~~~~">
         <location
@@ -1836,7 +1503,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1845,7 +1512,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
         errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1854,7 +1521,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuBuilder peekMenu() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
@@ -1863,16 +1530,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {"
-        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onMenuItemClick(MenuItem item);"
         errorLine2="                                       ~~~~~~~~">
         <location
@@ -1881,7 +1539,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -1890,7 +1548,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
@@ -1899,7 +1557,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams other) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1908,7 +1566,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(LayoutParams other) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
@@ -1917,7 +1575,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTag(Object tag) {"
         errorLine2="                       ~~~~~~">
         <location
@@ -1926,7 +1584,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Object getTag() {"
         errorLine2="           ~~~~~~">
         <location
@@ -1935,7 +1593,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setTitle(CharSequence title);"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
@@ -1944,7 +1602,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setSubtitle(CharSequence subtitle);"
         errorLine2="                                     ~~~~~~~~~~~~">
         <location
@@ -1953,7 +1611,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setCustomView(View view);"
         errorLine2="                                       ~~~~">
         <location
@@ -1962,7 +1620,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract Menu getMenu();"
         errorLine2="                    ~~~~">
         <location
@@ -1971,7 +1629,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract CharSequence getTitle();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
@@ -1980,7 +1638,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract CharSequence getSubtitle();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
@@ -1989,7 +1647,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract View getCustomView();"
         errorLine2="                    ~~~~">
         <location
@@ -1998,7 +1656,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract MenuInflater getMenuInflater();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
@@ -2007,7 +1665,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onCreateActionMode(ActionMode mode, Menu menu);"
         errorLine2="                                          ~~~~~~~~~~">
         <location
@@ -2016,7 +1674,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onCreateActionMode(ActionMode mode, Menu menu);"
         errorLine2="                                                           ~~~~">
         <location
@@ -2025,7 +1683,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onPrepareActionMode(ActionMode mode, Menu menu);"
         errorLine2="                                           ~~~~~~~~~~">
         <location
@@ -2034,7 +1692,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onPrepareActionMode(ActionMode mode, Menu menu);"
         errorLine2="                                                            ~~~~">
         <location
@@ -2043,7 +1701,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onActionItemClicked(ActionMode mode, MenuItem item);"
         errorLine2="                                           ~~~~~~~~~~">
         <location
@@ -2052,7 +1710,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onActionItemClicked(ActionMode mode, MenuItem item);"
         errorLine2="                                                            ~~~~~~~~">
         <location
@@ -2061,7 +1719,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onDestroyActionMode(ActionMode mode);"
         errorLine2="                                        ~~~~~~~~~~">
         <location
@@ -2070,7 +1728,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setActivityChooserModel(ActivityChooserModel dataModel);"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2079,7 +1737,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void sort(Intent intent, List&lt;ActivityResolveInfo> activities,"
         errorLine2="                         ~~~~~~">
         <location
@@ -2088,7 +1746,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void sort(Intent intent, List&lt;ActivityResolveInfo> activities,"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2097,7 +1755,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                List&lt;HistoricalRecord> historicalRecords);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2106,7 +1764,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onChooseActivity(ActivityChooserModel host, Intent intent);"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2115,7 +1773,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onChooseActivity(ActivityChooserModel host, Intent intent);"
         errorLine2="                                                                   ~~~~~~">
         <location
@@ -2124,7 +1782,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public HistoricalRecord(String activityName, long time, float weight) {"
         errorLine2="                                ~~~~~~">
         <location
@@ -2133,7 +1791,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public HistoricalRecord(ComponentName activityName, long time, float weight) {"
         errorLine2="                                ~~~~~~~~~~~~~">
         <location
@@ -2142,7 +1800,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ActivityResolveInfo(ResolveInfo resolveInfo) {"
         errorLine2="                                   ~~~~~~~~~~~">
         <location
@@ -2151,16 +1809,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public int compareTo(ActivityResolveInfo another) {"
-        errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setActivityChooserModel(ActivityChooserModel dataModel) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2169,7 +1818,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setExpandActivityOverflowButtonDrawable(Drawable drawable) {"
         errorLine2="                                                        ~~~~~~~~">
         <location
@@ -2178,7 +1827,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setProvider(ActionProvider provider) {"
         errorLine2="                            ~~~~~~~~~~~~~~">
         <location
@@ -2187,7 +1836,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActivityChooserModel getDataModel() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2196,7 +1845,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnDismissListener(PopupWindow.OnDismissListener listener) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2205,7 +1854,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public InnerLayout(Context context, AttributeSet attrs) {"
         errorLine2="                           ~~~~~~~">
         <location
@@ -2214,7 +1863,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public InnerLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
@@ -2223,7 +1872,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RecycleListView(Context context) {"
         errorLine2="                               ~~~~~~~">
         <location
@@ -2232,7 +1881,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RecycleListView(Context context, AttributeSet attrs) {"
         errorLine2="                               ~~~~~~~">
         <location
@@ -2241,7 +1890,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RecycleListView(Context context, AttributeSet attrs) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
@@ -2250,7 +1899,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Drawable mIcon;"
         errorLine2="               ~~~~~~~~">
         <location
@@ -2259,7 +1908,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence mTitle;"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -2268,7 +1917,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View mCustomTitleView;"
         errorLine2="               ~~~~">
         <location
@@ -2277,7 +1926,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence mMessage;"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -2286,7 +1935,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence mPositiveButtonText;"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -2295,7 +1944,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Drawable mPositiveButtonIcon;"
         errorLine2="               ~~~~~~~~">
         <location
@@ -2304,7 +1953,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public DialogInterface.OnClickListener mPositiveButtonListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2313,7 +1962,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence mNegativeButtonText;"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -2322,7 +1971,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Drawable mNegativeButtonIcon;"
         errorLine2="               ~~~~~~~~">
         <location
@@ -2331,7 +1980,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public DialogInterface.OnClickListener mNegativeButtonListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2340,7 +1989,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence mNeutralButtonText;"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -2349,7 +1998,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Drawable mNeutralButtonIcon;"
         errorLine2="               ~~~~~~~~">
         <location
@@ -2358,7 +2007,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public DialogInterface.OnClickListener mNeutralButtonListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2367,7 +2016,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public DialogInterface.OnCancelListener mOnCancelListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2376,7 +2025,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public DialogInterface.OnDismissListener mOnDismissListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2385,7 +2034,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public DialogInterface.OnKeyListener mOnKeyListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2394,7 +2043,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence[] mItems;"
         errorLine2="               ~~~~~~~~~~~~~~">
         <location
@@ -2403,7 +2052,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ListAdapter mAdapter;"
         errorLine2="               ~~~~~~~~~~~">
         <location
@@ -2412,7 +2061,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public DialogInterface.OnClickListener mOnClickListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2421,7 +2070,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View mView;"
         errorLine2="               ~~~~">
         <location
@@ -2430,7 +2079,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean[] mCheckedItems;"
         errorLine2="               ~~~~~~~~~">
         <location
@@ -2439,7 +2088,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public DialogInterface.OnMultiChoiceClickListener mOnCheckboxClickListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2448,7 +2097,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Cursor mCursor;"
         errorLine2="               ~~~~~~">
         <location
@@ -2457,7 +2106,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public String mLabelColumn;"
         errorLine2="               ~~~~~~">
         <location
@@ -2466,7 +2115,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public String mIsCheckedColumn;"
         errorLine2="               ~~~~~~">
         <location
@@ -2475,7 +2124,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public AdapterView.OnItemSelectedListener mOnItemSelectedListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2484,7 +2133,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public OnPrepareListViewListener mOnPrepareListViewListener;"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2493,7 +2142,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            void onPrepareListView(ListView listView);"
         errorLine2="                                   ~~~~~~~~">
         <location
@@ -2502,7 +2151,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public AlertParams(Context context) {"
         errorLine2="                           ~~~~~~~">
         <location
@@ -2511,7 +2160,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void apply(AlertController dialog) {"
         errorLine2="                          ~~~~~~~~~~~~~~~">
         <location
@@ -2520,7 +2169,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Button getButton(int whichButton) {"
         errorLine2="           ~~~~~~">
         <location
@@ -2529,7 +2178,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListView getListView() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -2538,7 +2187,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
@@ -2547,7 +2196,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCustomTitle(View customTitleView) {"
         errorLine2="                               ~~~~">
         <location
@@ -2556,7 +2205,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMessage(CharSequence message) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
@@ -2565,7 +2214,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setView(View view) {"
         errorLine2="                        ~~~~">
         <location
@@ -2574,7 +2223,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setView(View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight,"
         errorLine2="                        ~~~~">
         <location
@@ -2583,7 +2232,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setButton(int whichButton, CharSequence text, Message msg) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
@@ -2592,7 +2241,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setButton(int whichButton, CharSequence text, Message msg) {"
         errorLine2="                                                              ~~~~~~~">
         <location
@@ -2601,7 +2250,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setButton(int whichButton, CharSequence text, OnClickListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
@@ -2610,7 +2259,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setButton(int whichButton, CharSequence text, OnClickListener listener) {"
         errorLine2="                                                              ~~~~~~~~~~~~~~~">
         <location
@@ -2619,7 +2268,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setButton(int whichButton, CharSequence text, Drawable icon,"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
@@ -2628,7 +2277,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setButton(int whichButton, CharSequence text, Drawable icon,"
         errorLine2="                                                              ~~~~~~~~">
         <location
@@ -2637,7 +2286,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            OnClickListener listener) {"
         errorLine2="            ~~~~~~~~~~~~~~~">
         <location
@@ -2646,7 +2295,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setIcon(Drawable icon) {"
         errorLine2="                        ~~~~~~~~">
         <location
@@ -2655,34 +2304,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
-        errorLine2="                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKeyDown(int keyCode, KeyEvent event) {"
-        errorLine2="                                          ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKeyUp(int keyCode, KeyEvent event) {"
-        errorLine2="                                        ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setTitle(@StringRes int titleId) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2691,7 +2313,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setTitle(@Nullable CharSequence title) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2700,7 +2322,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setCustomTitle(@Nullable View customTitleView) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2709,7 +2331,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setMessage(@StringRes int messageId) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2718,7 +2340,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setMessage(@Nullable CharSequence message) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2727,7 +2349,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setIcon(@DrawableRes int iconId) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2736,7 +2358,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setIcon(@Nullable Drawable icon) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2745,7 +2367,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setIconAttribute(@AttrRes int attrId) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2754,7 +2376,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setPositiveButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2763,7 +2385,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setPositiveButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="                                                                      ~~~~~~~~~~~~~~~">
         <location
@@ -2772,7 +2394,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setPositiveButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2781,7 +2403,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setPositiveButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
@@ -2790,7 +2412,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setPositiveButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                                                  ~~~~~~~~~~~~~~~">
         <location
@@ -2799,7 +2421,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setPositiveButtonIcon(Drawable icon) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2808,7 +2430,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setPositiveButtonIcon(Drawable icon) {"
         errorLine2="                                             ~~~~~~~~">
         <location
@@ -2817,7 +2439,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNegativeButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2826,7 +2448,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNegativeButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="                                                                      ~~~~~~~~~~~~~~~">
         <location
@@ -2835,7 +2457,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNegativeButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2844,7 +2466,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNegativeButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
@@ -2853,7 +2475,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNegativeButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                                                  ~~~~~~~~~~~~~~~">
         <location
@@ -2862,7 +2484,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNegativeButtonIcon(Drawable icon) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2871,7 +2493,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNegativeButtonIcon(Drawable icon) {"
         errorLine2="                                             ~~~~~~~~">
         <location
@@ -2880,7 +2502,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNeutralButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2889,7 +2511,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNeutralButton(@StringRes int textId, final OnClickListener listener) {"
         errorLine2="                                                                     ~~~~~~~~~~~~~~~">
         <location
@@ -2898,7 +2520,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNeutralButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2907,7 +2529,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNeutralButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
@@ -2916,7 +2538,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNeutralButton(CharSequence text, final OnClickListener listener) {"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~">
         <location
@@ -2925,7 +2547,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNeutralButtonIcon(Drawable icon) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2934,7 +2556,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setNeutralButtonIcon(Drawable icon) {"
         errorLine2="                                            ~~~~~~~~">
         <location
@@ -2943,7 +2565,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setCancelable(boolean cancelable) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2952,7 +2574,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setOnCancelListener(OnCancelListener onCancelListener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2961,7 +2583,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setOnCancelListener(OnCancelListener onCancelListener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~">
         <location
@@ -2970,7 +2592,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setOnDismissListener(OnDismissListener onDismissListener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2979,7 +2601,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setOnDismissListener(OnDismissListener onDismissListener) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~">
         <location
@@ -2988,7 +2610,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setOnKeyListener(OnKeyListener onKeyListener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -2997,7 +2619,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setOnKeyListener(OnKeyListener onKeyListener) {"
         errorLine2="                                        ~~~~~~~~~~~~~">
         <location
@@ -3006,7 +2628,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setItems(@ArrayRes int itemsId, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -3015,7 +2637,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setItems(@ArrayRes int itemsId, final OnClickListener listener) {"
         errorLine2="                                                             ~~~~~~~~~~~~~~~">
         <location
@@ -3024,7 +2646,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setItems(CharSequence[] items, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -3033,7 +2655,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setItems(CharSequence[] items, final OnClickListener listener) {"
         errorLine2="                                ~~~~~~~~~~~~~~">
         <location
@@ -3042,7 +2664,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setItems(CharSequence[] items, final OnClickListener listener) {"
         errorLine2="                                                            ~~~~~~~~~~~~~~~">
         <location
@@ -3051,7 +2673,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setAdapter(final ListAdapter adapter, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -3060,7 +2682,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setAdapter(final ListAdapter adapter, final OnClickListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~">
         <location
@@ -3069,7 +2691,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setAdapter(final ListAdapter adapter, final OnClickListener listener) {"
         errorLine2="                                                                   ~~~~~~~~~~~~~~~">
         <location
@@ -3078,7 +2700,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setCursor(final Cursor cursor, final OnClickListener listener,"
         errorLine2="               ~~~~~~~">
         <location
@@ -3087,7 +2709,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setCursor(final Cursor cursor, final OnClickListener listener,"
         errorLine2="                                       ~~~~~~">
         <location
@@ -3096,7 +2718,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setCursor(final Cursor cursor, final OnClickListener listener,"
         errorLine2="                                                            ~~~~~~~~~~~~~~~">
         <location
@@ -3105,7 +2727,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                String labelColumn) {"
         errorLine2="                ~~~~~~">
         <location
@@ -3114,7 +2736,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setMultiChoiceItems(@ArrayRes int itemsId, boolean[] checkedItems,"
         errorLine2="               ~~~~~~~">
         <location
@@ -3123,7 +2745,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setMultiChoiceItems(@ArrayRes int itemsId, boolean[] checkedItems,"
         errorLine2="                                                                  ~~~~~~~~~">
         <location
@@ -3132,7 +2754,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                final OnMultiChoiceClickListener listener) {"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3141,7 +2763,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,"
         errorLine2="               ~~~~~~~">
         <location
@@ -3150,7 +2772,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,"
         errorLine2="                                           ~~~~~~~~~~~~~~">
         <location
@@ -3159,7 +2781,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,"
         errorLine2="                                                                 ~~~~~~~~~">
         <location
@@ -3168,7 +2790,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                final OnMultiChoiceClickListener listener) {"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3177,7 +2799,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
         errorLine2="               ~~~~~~~">
         <location
@@ -3186,7 +2808,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
         errorLine2="                                           ~~~~~~">
         <location
@@ -3195,7 +2817,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
         errorLine2="                                                          ~~~~~~">
         <location
@@ -3204,7 +2826,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
         errorLine2="                                                                                  ~~~~~~">
         <location
@@ -3213,7 +2835,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                final OnMultiChoiceClickListener listener) {"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3222,7 +2844,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setSingleChoiceItems(@ArrayRes int itemsId, int checkedItem,"
         errorLine2="               ~~~~~~~">
         <location
@@ -3231,7 +2853,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                final OnClickListener listener) {"
         errorLine2="                      ~~~~~~~~~~~~~~~">
         <location
@@ -3240,7 +2862,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn,"
         errorLine2="               ~~~~~~~">
         <location
@@ -3249,7 +2871,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn,"
         errorLine2="                                            ~~~~~~">
         <location
@@ -3258,7 +2880,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn,"
         errorLine2="                                                                            ~~~~~~">
         <location
@@ -3267,7 +2889,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                final OnClickListener listener) {"
         errorLine2="                      ~~~~~~~~~~~~~~~">
         <location
@@ -3276,7 +2898,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -3285,7 +2907,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {"
         errorLine2="                                            ~~~~~~~~~~~~~~">
         <location
@@ -3294,7 +2916,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {"
         errorLine2="                                                                                         ~~~~~~~~~~~~~~~">
         <location
@@ -3303,7 +2925,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -3312,7 +2934,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener) {"
         errorLine2="                                            ~~~~~~~~~~~">
         <location
@@ -3321,7 +2943,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener) {"
         errorLine2="                                                                                        ~~~~~~~~~~~~~~~">
         <location
@@ -3330,7 +2952,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setOnItemSelectedListener(final AdapterView.OnItemSelectedListener listener) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -3339,7 +2961,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setOnItemSelectedListener(final AdapterView.OnItemSelectedListener listener) {"
         errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3348,7 +2970,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setView(int layoutResId) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -3357,7 +2979,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setView(View view) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -3366,7 +2988,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setView(View view) {"
         errorLine2="                               ~~~~">
         <location
@@ -3375,7 +2997,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder setRecycleOnMeasureEnabled(boolean enabled) {"
         errorLine2="               ~~~~~~~">
         <location
@@ -3384,7 +3006,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public AlertDialog show() {"
         errorLine2="               ~~~~~~~~~~~">
         <location
@@ -3393,7 +3015,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public AllCapsTransformationMethod(Context context) {"
         errorLine2="                                       ~~~~~~~">
         <location
@@ -3402,124 +3024,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getTransformation(CharSequence source, View view) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getTransformation(CharSequence source, View view) {"
-        errorLine2="                                          ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getTransformation(CharSequence source, View view) {"
-        errorLine2="                                                               ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onFocusChanged(View view, CharSequence sourceText, boolean focused,"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onFocusChanged(View view, CharSequence sourceText, boolean focused,"
-        errorLine2="                                          ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            int direction, Rect previouslyFocusedRect) {"
-        errorLine2="                           ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void attachBaseContext(Context newBase) {"
-        errorLine2="                                     ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setContentView(View view) {"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setContentView(View view, ViewGroup.LayoutParams params) {"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setContentView(View view, ViewGroup.LayoutParams params) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addContentView(View view, ViewGroup.LayoutParams params) {"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addContentView(View view, ViewGroup.LayoutParams params) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onTitleChanged(CharSequence title, int color) {"
-        errorLine2="                                  ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onMenuOpened(int featureId, Menu menu) {"
         errorLine2="                                               ~~~~">
         <location
@@ -3528,106 +3033,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
-        errorLine2="                                    ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Resources getResources() {"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKeyDown(int keyCode, KeyEvent event) {"
-        errorLine2="                                          ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTextAppearance(Context context, int resId) {"
-        errorLine2="                                  ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
-        errorLine2="                                                   ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTextAppearance(Context context, int resId) {"
-        errorLine2="                                  ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {"
-        errorLine2="                                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int[] getAutoSizeTextAvailableSizes() {"
-        errorLine2="           ~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void onSupportActionModeStarted(ActionMode mode);"
         errorLine2="                                    ~~~~~~~~~~">
         <location
@@ -3636,7 +3042,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void onSupportActionModeFinished(ActionMode mode);"
         errorLine2="                                     ~~~~~~~~~~">
         <location
@@ -3645,7 +3051,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback);"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3654,7 +3060,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setButtonDrawable(Drawable buttonDrawable) {"
         errorLine2="                                  ~~~~~~~~">
         <location
@@ -3663,7 +3069,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract MenuInflater getMenuInflater();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
@@ -3672,7 +3078,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void onCreate(Bundle savedInstanceState);"
         errorLine2="                                  ~~~~~~">
         <location
@@ -3681,7 +3087,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void onPostCreate(Bundle savedInstanceState);"
         errorLine2="                                      ~~~~~~">
         <location
@@ -3690,7 +3096,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void onConfigurationChanged(Configuration newConfig);"
         errorLine2="                                                ~~~~~~~~~~~~~">
         <location
@@ -3699,7 +3105,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setContentView(View v);"
         errorLine2="                                        ~~~~">
         <location
@@ -3708,7 +3114,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setContentView(View v, ViewGroup.LayoutParams lp);"
         errorLine2="                                        ~~~~">
         <location
@@ -3717,7 +3123,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void setContentView(View v, ViewGroup.LayoutParams lp);"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3726,7 +3132,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void addContentView(View v, ViewGroup.LayoutParams lp);"
         errorLine2="                                        ~~~~">
         <location
@@ -3735,7 +3141,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void addContentView(View v, ViewGroup.LayoutParams lp);"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3744,7 +3150,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract View createView(@Nullable View parent, String name, @NonNull Context context,"
         errorLine2="                    ~~~~">
         <location
@@ -3753,7 +3159,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract View createView(@Nullable View parent, String name, @NonNull Context context,"
         errorLine2="                                                           ~~~~~~">
         <location
@@ -3762,7 +3168,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void onSaveInstanceState(Bundle outState);"
         errorLine2="                                             ~~~~~~">
         <location
@@ -3771,52 +3177,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public AppCompatDialog(Context context) {"
-        errorLine2="                           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public AppCompatDialog(Context context, int theme) {"
-        errorLine2="                           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected AppCompatDialog(Context context, boolean cancelable,"
-        errorLine2="                              ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            OnCancelListener cancelListener) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
-        errorLine2="                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionBar getSupportActionBar() {"
         errorLine2="           ~~~~~~~~~">
         <location
@@ -3825,34 +3186,16 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setContentView(View view) {"
-        errorLine2="                               ~~~~">
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
+        errorLine1="    public void setContentView(@NonNull View view, ViewGroup.LayoutParams params) {"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setContentView(View view, ViewGroup.LayoutParams params) {"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setContentView(View view, ViewGroup.LayoutParams params) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
@@ -3861,34 +3204,16 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addContentView(View view, ViewGroup.LayoutParams params) {"
-        errorLine2="                               ~~~~">
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
+        errorLine1="    public void addContentView(@NonNull View view, ViewGroup.LayoutParams params) {"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addContentView(View view, ViewGroup.LayoutParams params) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public AppCompatDelegate getDelegate() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onSupportActionModeStarted(ActionMode mode) {"
         errorLine2="                                           ~~~~~~~~~~">
         <location
@@ -3897,7 +3222,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onSupportActionModeFinished(ActionMode mode) {"
         errorLine2="                                            ~~~~~~~~~~">
         <location
@@ -3906,7 +3231,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3915,16 +3240,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
-        errorLine2="                                    ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static synchronized AppCompatDrawableManager get() {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3933,7 +3249,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public synchronized Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {"
         errorLine2="                        ~~~~~~~~">
         <location
@@ -3942,7 +3258,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static synchronized PorterDuffColorFilter getPorterDuffColorFilter("
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3951,7 +3267,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            int color, PorterDuff.Mode mode) {"
         errorLine2="                       ~~~~~~~~~~~~~~~">
         <location
@@ -3960,34 +3276,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTextAppearance(Context context, int resId) {"
-        errorLine2="                                  ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onDragEvent(@SuppressWarnings(&quot;MissingNullability&quot;) DragEvent event) {"
-        errorLine2="                                                                       ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setImageBitmap(Bitmap bm) {"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatImageButton.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
@@ -3996,43 +3285,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setImageBitmap(Bitmap bm) {"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatImageView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTextAppearance(Context context, int resId) {"
-        errorLine2="                                  ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
-        errorLine2="                                                   ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public AppCompatRadioButton(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -4041,7 +3294,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public AppCompatRadioButton(Context context, @Nullable AttributeSet attrs) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -4050,7 +3303,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public AppCompatRadioButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -4059,7 +3312,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setButtonDrawable(Drawable buttonDrawable) {"
         errorLine2="                                  ~~~~~~~~">
         <location
@@ -4068,16 +3321,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected synchronized void onDraw(Canvas canvas) {"
-        errorLine2="                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            int defStyleAttr, int mode, Resources.Theme popupTheme) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~">
         <location
@@ -4086,70 +3330,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Context getPopupContext() {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setPopupBackgroundDrawable(Drawable background) {"
-        errorLine2="                                           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getPopupBackground() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setAdapter(SpinnerAdapter adapter) {"
-        errorLine2="                           ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent event) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setPrompt(CharSequence prompt) {"
-        errorLine2="                          ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getPrompt() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Parcelable onSaveInstanceState() {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -4158,70 +3339,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onRestoreInstanceState(Parcelable state) {"
-        errorLine2="                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTextAppearance(Context context, int resId) {"
-        errorLine2="                                  ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {"
-        errorLine2="                                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int[] getAutoSizeTextAvailableSizes() {"
-        errorLine2="           ~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
-        errorLine2="                                                   ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getText() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatTextView createTextView(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~">
         <location
@@ -4230,7 +3348,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatTextView createTextView(Context context, AttributeSet attrs) {"
         errorLine2="                                                                ~~~~~~~~~~~~">
         <location
@@ -4239,7 +3357,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatImageView createImageView(Context context, AttributeSet attrs) {"
         errorLine2="                                                 ~~~~~~~">
         <location
@@ -4248,7 +3366,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatImageView createImageView(Context context, AttributeSet attrs) {"
         errorLine2="                                                                  ~~~~~~~~~~~~">
         <location
@@ -4257,7 +3375,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatButton createButton(Context context, AttributeSet attrs) {"
         errorLine2="                                           ~~~~~~~">
         <location
@@ -4266,7 +3384,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatButton createButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                            ~~~~~~~~~~~~">
         <location
@@ -4275,7 +3393,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatEditText createEditText(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~">
         <location
@@ -4284,7 +3402,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatEditText createEditText(Context context, AttributeSet attrs) {"
         errorLine2="                                                                ~~~~~~~~~~~~">
         <location
@@ -4293,7 +3411,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatSpinner createSpinner(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~">
         <location
@@ -4302,7 +3420,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatSpinner createSpinner(Context context, AttributeSet attrs) {"
         errorLine2="                                                              ~~~~~~~~~~~~">
         <location
@@ -4311,7 +3429,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                     ~~~~~~~">
         <location
@@ -4320,7 +3438,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                                      ~~~~~~~~~~~~">
         <location
@@ -4329,7 +3447,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatCheckBox createCheckBox(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~">
         <location
@@ -4338,7 +3456,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatCheckBox createCheckBox(Context context, AttributeSet attrs) {"
         errorLine2="                                                                ~~~~~~~~~~~~">
         <location
@@ -4347,7 +3465,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatRadioButton createRadioButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                     ~~~~~~~">
         <location
@@ -4356,7 +3474,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatRadioButton createRadioButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                                      ~~~~~~~~~~~~">
         <location
@@ -4365,7 +3483,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatCheckedTextView createCheckedTextView(Context context, AttributeSet attrs) {"
         errorLine2="                                                             ~~~~~~~">
         <location
@@ -4374,7 +3492,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatCheckedTextView createCheckedTextView(Context context, AttributeSet attrs) {"
         errorLine2="                                                                              ~~~~~~~~~~~~">
         <location
@@ -4383,7 +3501,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatAutoCompleteTextView createAutoCompleteTextView(Context context,"
         errorLine2="                                                                       ~~~~~~~">
         <location
@@ -4392,7 +3510,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            AttributeSet attrs) {"
         errorLine2="            ~~~~~~~~~~~~">
         <location
@@ -4401,7 +3519,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(Context context,"
         errorLine2="                                                                                 ~~~~~~~">
         <location
@@ -4410,7 +3528,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            AttributeSet attrs) {"
         errorLine2="            ~~~~~~~~~~~~">
         <location
@@ -4419,7 +3537,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatRatingBar createRatingBar(Context context, AttributeSet attrs) {"
         errorLine2="                                                 ~~~~~~~">
         <location
@@ -4428,7 +3546,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatRatingBar createRatingBar(Context context, AttributeSet attrs) {"
         errorLine2="                                                                  ~~~~~~~~~~~~">
         <location
@@ -4437,7 +3555,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatSeekBar createSeekBar(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~">
         <location
@@ -4446,7 +3564,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatSeekBar createSeekBar(Context context, AttributeSet attrs) {"
         errorLine2="                                                              ~~~~~~~~~~~~">
         <location
@@ -4455,7 +3573,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatToggleButton createToggleButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                       ~~~~~~~">
         <location
@@ -4464,7 +3582,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected AppCompatToggleButton createToggleButton(Context context, AttributeSet attrs) {"
         errorLine2="                                                                        ~~~~~~~~~~~~">
         <location
@@ -4473,7 +3591,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected View createView(Context context, String name, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -4482,7 +3600,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected View createView(Context context, String name, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~">
         <location
@@ -4491,7 +3609,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected View createView(Context context, String name, AttributeSet attrs) {"
         errorLine2="                                                            ~~~~~~~~~~~~">
         <location
@@ -4500,7 +3618,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected Context mSystemContext;"
         errorLine2="              ~~~~~~~">
         <location
@@ -4509,7 +3627,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected Context mContext;"
         errorLine2="              ~~~~~~~">
         <location
@@ -4518,7 +3636,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuBuilder mMenu;"
         errorLine2="              ~~~~~~~~~~~">
         <location
@@ -4527,7 +3645,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected LayoutInflater mSystemInflater;"
         errorLine2="              ~~~~~~~~~~~~~~">
         <location
@@ -4536,7 +3654,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected LayoutInflater mInflater;"
         errorLine2="              ~~~~~~~~~~~~~~">
         <location
@@ -4545,7 +3663,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuView mMenuView;"
         errorLine2="              ~~~~~~~~">
         <location
@@ -4554,7 +3672,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BaseMenuPresenter(Context context, int menuLayoutRes, int itemLayoutRes) {"
         errorLine2="                             ~~~~~~~">
         <location
@@ -4563,7 +3681,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void initForMenu(Context context, MenuBuilder menu) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -4572,7 +3690,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void initForMenu(Context context, MenuBuilder menu) {"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
@@ -4581,7 +3699,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuView getMenuView(ViewGroup root) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -4590,7 +3708,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuView getMenuView(ViewGroup root) {"
         errorLine2="                                ~~~~~~~~~">
         <location
@@ -4599,7 +3717,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void addItemView(View itemView, int childIndex) {"
         errorLine2="                               ~~~~">
         <location
@@ -4608,7 +3726,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected boolean filterLeftoverView(ViewGroup parent, int childIndex) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
@@ -4617,7 +3735,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCallback(Callback cb) {"
         errorLine2="                            ~~~~~~~~">
         <location
@@ -4626,7 +3744,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Callback getCallback() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -4635,7 +3753,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuView.ItemView createItemView(ViewGroup parent) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~">
         <location
@@ -4644,7 +3762,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuView.ItemView createItemView(ViewGroup parent) {"
         errorLine2="                                            ~~~~~~~~~">
         <location
@@ -4653,7 +3771,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
         errorLine2="           ~~~~">
         <location
@@ -4662,7 +3780,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
@@ -4671,7 +3789,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
         errorLine2="                                               ~~~~">
         <location
@@ -4680,7 +3798,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
         errorLine2="                                                                 ~~~~~~~~~">
         <location
@@ -4689,7 +3807,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void bindItemView(MenuItemImpl item, MenuView.ItemView itemView);"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
@@ -4698,7 +3816,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void bindItemView(MenuItemImpl item, MenuView.ItemView itemView);"
         errorLine2="                                                         ~~~~~~~~~~~~~~~~~">
         <location
@@ -4707,7 +3825,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean shouldIncludeItem(int childIndex, MenuItemImpl item) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
@@ -4716,7 +3834,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
         errorLine2="                            ~~~~~~~~~~~">
         <location
@@ -4725,7 +3843,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onSubMenuSelected(SubMenuBuilder menu) {"
         errorLine2="                                     ~~~~~~~~~~~~~~">
         <location
@@ -4734,7 +3852,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                        ~~~~~~~~~~~">
         <location
@@ -4743,7 +3861,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                                          ~~~~~~~~~~~~">
         <location
@@ -4752,7 +3870,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                          ~~~~~~~~~~~">
         <location
@@ -4761,7 +3879,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                                            ~~~~~~~~~~~~">
         <location
@@ -4770,7 +3888,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void dispatchFitSystemWindows(Rect insets) {"
         errorLine2="                                         ~~~~">
         <location
@@ -4779,7 +3897,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setAttachListener(OnAttachListener attachListener) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~">
         <location
@@ -4788,7 +3906,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TypedValue getMinWidthMajor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -4797,7 +3915,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TypedValue getMinWidthMinor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -4806,7 +3924,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TypedValue getFixedWidthMajor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -4815,7 +3933,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TypedValue getFixedWidthMinor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -4824,7 +3942,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TypedValue getFixedHeightMajor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -4833,7 +3951,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TypedValue getFixedHeightMinor() {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -4842,7 +3960,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ContextThemeWrapper(Context base, @StyleRes int themeResId) {"
         errorLine2="                               ~~~~~~~">
         <location
@@ -4851,7 +3969,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ContextThemeWrapper(Context base, Resources.Theme theme) {"
         errorLine2="                               ~~~~~~~">
         <location
@@ -4860,7 +3978,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ContextThemeWrapper(Context base, Resources.Theme theme) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~">
         <location
@@ -4869,16 +3987,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void attachBaseContext(Context newBase) {"
-        errorLine2="                                     ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void applyOverrideConfiguration(Configuration overrideConfiguration) {"
         errorLine2="                                           ~~~~~~~~~~~~~">
         <location
@@ -4887,34 +3996,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Resources getResources() {"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Resources.Theme getTheme() {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Object getSystemService(String name) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Object getSystemService(String name) {"
         errorLine2="                                   ~~~~~~">
         <location
@@ -4923,7 +4005,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~">
         <location
@@ -4932,16 +4014,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public AssetManager getAssets() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setWindowCallback(Window.Callback cb);"
         errorLine2="                           ~~~~~~~~~~~~~~~">
         <location
@@ -4950,7 +4023,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setWindowTitle(CharSequence title);"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
@@ -4959,7 +4032,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    CharSequence getTitle();"
         errorLine2="    ~~~~~~~~~~~~">
         <location
@@ -4968,7 +4041,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setIcon(Drawable d);"
         errorLine2="                 ~~~~~~~~">
         <location
@@ -4977,7 +4050,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setMenu(Menu menu, MenuPresenter.Callback cb);"
         errorLine2="                 ~~~~">
         <location
@@ -4986,7 +4059,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setMenu(Menu menu, MenuPresenter.Callback cb);"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -4995,7 +4068,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void saveToolbarHierarchyState(SparseArray&lt;Parcelable> toolbarStates);"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5004,7 +4077,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void restoreToolbarHierarchyState(SparseArray&lt;Parcelable> toolbarStates);"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5013,7 +4086,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    ViewGroup getViewGroup();"
         errorLine2="    ~~~~~~~~~">
         <location
@@ -5022,7 +4095,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    Context getContext();"
         errorLine2="    ~~~~~~~">
         <location
@@ -5031,7 +4104,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setWindowCallback(Window.Callback cb);"
         errorLine2="                           ~~~~~~~~~~~~~~~">
         <location
@@ -5040,7 +4113,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setWindowTitle(CharSequence title);"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
@@ -5049,7 +4122,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    CharSequence getTitle();"
         errorLine2="    ~~~~~~~~~~~~">
         <location
@@ -5058,7 +4131,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setTitle(CharSequence title);"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
@@ -5067,7 +4140,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    CharSequence getSubtitle();"
         errorLine2="    ~~~~~~~~~~~~">
         <location
@@ -5076,7 +4149,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setSubtitle(CharSequence subtitle);"
         errorLine2="                     ~~~~~~~~~~~~">
         <location
@@ -5085,7 +4158,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setIcon(Drawable d);"
         errorLine2="                 ~~~~~~~~">
         <location
@@ -5094,7 +4167,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setLogo(Drawable d);"
         errorLine2="                 ~~~~~~~~">
         <location
@@ -5103,7 +4176,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setMenu(Menu menu, MenuPresenter.Callback cb);"
         errorLine2="                 ~~~~">
         <location
@@ -5112,7 +4185,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setMenu(Menu menu, MenuPresenter.Callback cb);"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5121,7 +4194,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setEmbeddedTabView(ScrollingTabContainerView tabView);"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5130,7 +4203,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setDropdownParams(SpinnerAdapter adapter, AdapterView.OnItemSelectedListener listener);"
         errorLine2="                           ~~~~~~~~~~~~~~">
         <location
@@ -5139,7 +4212,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setDropdownParams(SpinnerAdapter adapter, AdapterView.OnItemSelectedListener listener);"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5148,7 +4221,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setCustomView(View view);"
         errorLine2="                       ~~~~">
         <location
@@ -5157,7 +4230,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    View getCustomView();"
         errorLine2="    ~~~~">
         <location
@@ -5166,7 +4239,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    ViewPropertyAnimatorCompat setupAnimatorToVisibility(int visibility, long duration);"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5175,7 +4248,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setNavigationIcon(Drawable icon);"
         errorLine2="                           ~~~~~~~~">
         <location
@@ -5184,7 +4257,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setNavigationContentDescription(CharSequence description);"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
@@ -5193,7 +4266,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setDefaultNavigationIcon(Drawable icon);"
         errorLine2="                                  ~~~~~~~~">
         <location
@@ -5202,7 +4275,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void saveHierarchyState(SparseArray&lt;Parcelable> toolbarStates);"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5211,7 +4284,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void restoreHierarchyState(SparseArray&lt;Parcelable> toolbarStates);"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5220,7 +4293,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setBackgroundDrawable(Drawable d);"
         errorLine2="                               ~~~~~~~~">
         <location
@@ -5229,7 +4302,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setMenuCallbacks(MenuPresenter.Callback presenterCallback,"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5238,7 +4311,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            MenuBuilder.Callback menuBuilderCallback);"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5247,7 +4320,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    Menu getMenu();"
         errorLine2="    ~~~~">
         <location
@@ -5256,7 +4329,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public DrawerArrowDrawable(Context context) {"
         errorLine2="                               ~~~~~~~">
         <location
@@ -5265,7 +4338,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void draw(Canvas canvas) {"
         errorLine2="                     ~~~~~~">
         <location
@@ -5274,7 +4347,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setColorFilter(ColorFilter colorFilter) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
@@ -5283,7 +4356,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Paint getPaint() {"
         errorLine2="                 ~~~~~">
         <location
@@ -5292,7 +4365,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ExpandedMenuView(Context context, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -5301,7 +4374,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ExpandedMenuView(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
@@ -5310,7 +4383,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ExpandedMenuView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -5319,7 +4392,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ExpandedMenuView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
@@ -5328,7 +4401,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void initialize(MenuBuilder menu) {"
         errorLine2="                           ~~~~~~~~~~~">
         <location
@@ -5337,7 +4410,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean invokeItem(MenuItemImpl item) {"
         errorLine2="                              ~~~~~~~~~~~~">
         <location
@@ -5346,25 +4419,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onItemClick(AdapterView parent, View v, int position, long id) {"
-        errorLine2="                            ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onItemClick(AdapterView parent, View v, int position, long id) {"
-        errorLine2="                                                ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnFitSystemWindowsListener(OnFitSystemWindowsListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5373,16 +4428,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean fitSystemWindows(Rect insets) {"
-        errorLine2="                                       ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnFitSystemWindowsListener(OnFitSystemWindowsListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5391,16 +4437,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean fitSystemWindows(Rect insets) {"
-        errorLine2="                                       ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void onFitSystemWindows(Rect insets);"
         errorLine2="                                ~~~~">
         <location
@@ -5409,7 +4446,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setOnFitSystemWindowsListener(OnFitSystemWindowsListener listener);"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5418,7 +4455,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ForwardingListener(View src) {"
         errorLine2="                              ~~~~">
         <location
@@ -5427,7 +4464,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract ShowableListMenu getPopup();"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
@@ -5436,25 +4473,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouch(View v, MotionEvent event) {"
-        errorLine2="                           ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouch(View v, MotionEvent event) {"
-        errorLine2="                                   ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onViewAttachedToWindow(View v) {"
         errorLine2="                                       ~~~~">
         <location
@@ -5463,7 +4482,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onViewDetachedFromWindow(View v) {"
         errorLine2="                                         ~~~~">
         <location
@@ -5472,7 +4491,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getDividerDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -5481,7 +4500,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setDividerDrawable(Drawable divider) {"
         errorLine2="                                   ~~~~~~~~">
         <location
@@ -5490,88 +4509,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onDraw(Canvas canvas) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateDefaultLayoutParams() {"
-        errorLine2="              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -5580,7 +4518,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
@@ -5589,7 +4527,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5598,7 +4536,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ViewGroup.MarginLayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5607,7 +4545,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListMenuItemView(Context context, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -5616,7 +4554,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListMenuItemView(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
@@ -5625,7 +4563,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -5634,7 +4572,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
@@ -5643,7 +4581,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void initialize(MenuItemImpl itemData, int menuType) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
@@ -5652,7 +4590,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
@@ -5661,7 +4599,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItemImpl getItemData() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -5670,7 +4608,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setIcon(Drawable icon) {"
         errorLine2="                        ~~~~~~~~">
         <location
@@ -5679,16 +4617,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void adjustListItemSelectionBounds(Rect rect) {"
-        errorLine2="                                              ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListMenuPresenter(Context context, int itemLayoutRes) {"
         errorLine2="                             ~~~~~~~">
         <location
@@ -5697,7 +4626,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void initForMenu(Context context, MenuBuilder menu) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -5706,7 +4635,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void initForMenu(Context context, MenuBuilder menu) {"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
@@ -5715,7 +4644,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuView getMenuView(ViewGroup root) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -5724,7 +4653,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuView getMenuView(ViewGroup root) {"
         errorLine2="                                ~~~~~~~~~">
         <location
@@ -5733,7 +4662,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
@@ -5742,7 +4671,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCallback(Callback cb) {"
         errorLine2="                            ~~~~~~~~">
         <location
@@ -5751,7 +4680,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onSubMenuSelected(SubMenuBuilder subMenu) {"
         errorLine2="                                     ~~~~~~~~~~~~~~">
         <location
@@ -5760,7 +4689,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
         errorLine2="                            ~~~~~~~~~~~">
         <location
@@ -5769,25 +4698,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onItemClick(AdapterView&lt;?> parent, View view, int position, long id) {"
-        errorLine2="                            ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onItemClick(AdapterView&lt;?> parent, View view, int position, long id) {"
-        errorLine2="                                                   ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                        ~~~~~~~~~~~">
         <location
@@ -5796,7 +4707,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                                          ~~~~~~~~~~~~">
         <location
@@ -5805,7 +4716,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                          ~~~~~~~~~~~">
         <location
@@ -5814,7 +4725,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
         errorLine2="                                                            ~~~~~~~~~~~~">
         <location
@@ -5823,7 +4734,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void saveHierarchyState(Bundle outState) {"
         errorLine2="                                   ~~~~~~">
         <location
@@ -5832,7 +4743,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void restoreHierarchyState(Bundle inState) {"
         errorLine2="                                      ~~~~~~">
         <location
@@ -5841,7 +4752,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Parcelable onSaveInstanceState() {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -5850,7 +4761,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onRestoreInstanceState(Parcelable state) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
@@ -5859,7 +4770,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setListSelector(Drawable selector) {"
         errorLine2="                                ~~~~~~~~">
         <location
@@ -5868,7 +4779,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public OnTouchListener createDragToOpenListener(View src) {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
@@ -5877,7 +4788,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public OnTouchListener createDragToOpenListener(View src) {"
         errorLine2="                                                    ~~~~">
         <location
@@ -5886,7 +4797,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuAdapter(MenuBuilder menu, LayoutInflater inflater, boolean overflowOnly,"
         errorLine2="                       ~~~~~~~~~~~">
         <location
@@ -5895,7 +4806,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuAdapter(MenuBuilder menu, LayoutInflater inflater, boolean overflowOnly,"
         errorLine2="                                         ~~~~~~~~~~~~~~">
         <location
@@ -5904,7 +4815,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuBuilder getAdapterMenu() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
@@ -5913,43 +4824,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItemImpl getItem(int position) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View getView(int position, View convertView, ViewGroup parent) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View getView(int position, View convertView, ViewGroup parent) {"
-        errorLine2="                                      ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View getView(int position, View convertView, ViewGroup parent) {"
-        errorLine2="                                                        ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        boolean invokeItem(MenuItemImpl item);"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
@@ -5958,7 +4833,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuBuilder(Context context) {"
         errorLine2="                       ~~~~~~~">
         <location
@@ -5967,7 +4842,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuBuilder setDefaultShowAsAction(int defaultShowAsAction) {"
         errorLine2="           ~~~~~~~~~~~">
         <location
@@ -5976,7 +4851,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addMenuPresenter(MenuPresenter presenter) {"
         errorLine2="                                 ~~~~~~~~~~~~~">
         <location
@@ -5985,7 +4860,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addMenuPresenter(MenuPresenter presenter, Context menuContext) {"
         errorLine2="                                 ~~~~~~~~~~~~~">
         <location
@@ -5994,7 +4869,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addMenuPresenter(MenuPresenter presenter, Context menuContext) {"
         errorLine2="                                                          ~~~~~~~">
         <location
@@ -6003,7 +4878,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void removeMenuPresenter(MenuPresenter presenter) {"
         errorLine2="                                    ~~~~~~~~~~~~~">
         <location
@@ -6012,7 +4887,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void savePresenterStates(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
@@ -6021,7 +4896,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void restorePresenterStates(Bundle state) {"
         errorLine2="                                       ~~~~~~">
         <location
@@ -6030,7 +4905,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void saveActionViewStates(Bundle outStates) {"
         errorLine2="                                     ~~~~~~">
         <location
@@ -6039,7 +4914,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void restoreActionViewStates(Bundle states) {"
         errorLine2="                                        ~~~~~~">
         <location
@@ -6048,7 +4923,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected String getActionViewStatesKey() {"
         errorLine2="              ~~~~~~">
         <location
@@ -6057,7 +4932,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCallback(Callback cb) {"
         errorLine2="                            ~~~~~~~~">
         <location
@@ -6066,7 +4941,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) {"
         errorLine2="              ~~~~~~~~">
         <location
@@ -6075,7 +4950,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) {"
         errorLine2="                                                                         ~~~~~~~~~~~~">
         <location
@@ -6084,178 +4959,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(CharSequence title) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(CharSequence title) {"
-        errorLine2="                        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(int titleRes) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(int group, int id, int categoryOrder, CharSequence title) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(int group, int id, int categoryOrder, CharSequence title) {"
-        errorLine2="                                                              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(int group, int id, int categoryOrder, int title) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(CharSequence title) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(CharSequence title) {"
-        errorLine2="                              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(int titleRes) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) {"
-        errorLine2="                                                                    ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(int group, int id, int categoryOrder, int title) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int addIntentOptions(int group, int id, int categoryOrder, ComponentName caller,"
-        errorLine2="                                                                      ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
-        errorLine2="            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
-        errorLine2="                                                          ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem findItem(int id) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem getItem(int index) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean isShortcutKey(int keyCode, KeyEvent event) {"
-        errorLine2="                                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Context getContext() {"
         errorLine2="           ~~~~~~~">
         <location
@@ -6264,16 +4968,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean performShortcut(int keyCode, KeyEvent event, int flags) {"
-        errorLine2="                                                ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean performItemAction(MenuItem item, int flags) {"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -6282,7 +4977,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean performItemAction(MenuItem item, MenuPresenter preferredPresenter, int flags) {"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -6291,7 +4986,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean performItemAction(MenuItem item, MenuPresenter preferredPresenter, int flags) {"
         errorLine2="                                                    ~~~~~~~~~~~~~">
         <location
@@ -6300,7 +4995,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ArrayList&lt;MenuItemImpl> getActionItems() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6309,7 +5004,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ArrayList&lt;MenuItemImpl> getNonActionItems() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6318,7 +5013,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuBuilder setHeaderTitleInt(CharSequence title) {"
         errorLine2="              ~~~~~~~~~~~">
         <location
@@ -6327,7 +5022,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuBuilder setHeaderTitleInt(CharSequence title) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
@@ -6336,7 +5031,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuBuilder setHeaderTitleInt(int titleRes) {"
         errorLine2="              ~~~~~~~~~~~">
         <location
@@ -6345,7 +5040,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuBuilder setHeaderIconInt(Drawable icon) {"
         errorLine2="              ~~~~~~~~~~~">
         <location
@@ -6354,7 +5049,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuBuilder setHeaderIconInt(Drawable icon) {"
         errorLine2="                                           ~~~~~~~~">
         <location
@@ -6363,7 +5058,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuBuilder setHeaderIconInt(int iconRes) {"
         errorLine2="              ~~~~~~~~~~~">
         <location
@@ -6372,7 +5067,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuBuilder setHeaderViewInt(View view) {"
         errorLine2="              ~~~~~~~~~~~">
         <location
@@ -6381,7 +5076,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected MenuBuilder setHeaderViewInt(View view) {"
         errorLine2="                                           ~~~~">
         <location
@@ -6390,7 +5085,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getHeaderTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -6399,7 +5094,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getHeaderIcon() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6408,7 +5103,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getHeaderView() {"
         errorLine2="           ~~~~">
         <location
@@ -6417,7 +5112,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuBuilder getRootMenu() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
@@ -6426,7 +5121,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCurrentMenuInfo(ContextMenu.ContextMenuInfo menuInfo) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6435,7 +5130,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean expandItemActionView(MenuItemImpl item) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
@@ -6444,7 +5139,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean collapseItemActionView(MenuItemImpl item) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
@@ -6453,7 +5148,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItemImpl getExpandedItem() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -6462,7 +5157,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setEnabled(boolean enabled) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6471,7 +5166,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Intent getIntent() {"
         errorLine2="           ~~~~~~">
         <location
@@ -6480,7 +5175,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6489,7 +5184,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="                              ~~~~~~">
         <location
@@ -6498,7 +5193,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setCallback(Runnable callback) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6507,7 +5202,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setCallback(Runnable callback) {"
         errorLine2="                                ~~~~~~~~">
         <location
@@ -6516,7 +5211,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6525,16 +5220,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setNumericShortcut(char numericChar) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6543,16 +5229,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6561,16 +5238,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SubMenu getSubMenu() {"
         errorLine2="           ~~~~~~~">
         <location
@@ -6579,7 +5247,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSubMenu(SubMenuBuilder subMenu) {"
         errorLine2="                           ~~~~~~~~~~~~~~">
         <location
@@ -6588,7 +5256,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -6597,7 +5265,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6606,7 +5274,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
@@ -6615,7 +5283,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitle(int title) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6624,7 +5292,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitleCondensed() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -6633,7 +5301,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6642,7 +5310,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
@@ -6651,7 +5319,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getIcon() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6660,7 +5328,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6669,7 +5337,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="                            ~~~~~~~~">
         <location
@@ -6678,7 +5346,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIcon(int iconResId) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6687,16 +5355,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ColorStateList getIconTintList() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -6705,16 +5364,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~">
         <location
@@ -6723,7 +5373,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PorterDuff.Mode getIconTintMode() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
@@ -6732,7 +5382,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setCheckable(boolean checkable) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6741,7 +5391,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setChecked(boolean checked) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6750,7 +5400,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setVisible(boolean shown) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6759,7 +5409,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener clickListener) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6768,7 +5418,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener clickListener) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6777,7 +5427,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ContextMenuInfo getMenuInfo() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
@@ -6786,16 +5436,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setActionView(View view) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SupportMenuItem setActionView(View view) {"
         errorLine2="                                         ~~~~">
         <location
@@ -6804,16 +5445,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setActionView(int resId) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getActionView() {"
         errorLine2="           ~~~~">
         <location
@@ -6822,7 +5454,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6831,7 +5463,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6840,7 +5472,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public android.view.ActionProvider getActionProvider() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6849,7 +5481,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionProvider getSupportActionProvider() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -6858,16 +5490,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~">
         <location
@@ -6876,16 +5499,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setShowAsActionFlags(int actionEnum) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6894,7 +5508,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6903,16 +5517,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
@@ -6921,7 +5526,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getContentDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -6930,16 +5535,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
@@ -6948,7 +5544,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTooltipText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -6957,7 +5553,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItemWrapperICS(Context context, SupportMenuItem object) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -6966,7 +5562,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItemWrapperICS(Context context, SupportMenuItem object) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~">
         <location
@@ -6975,7 +5571,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6984,7 +5580,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitle(CharSequence title) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
@@ -6993,7 +5589,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitle(int title) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7002,7 +5598,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -7011,7 +5607,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7020,7 +5616,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
@@ -7029,7 +5625,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitleCondensed() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -7038,7 +5634,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7047,7 +5643,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIcon(Drawable icon) {"
         errorLine2="                            ~~~~~~~~">
         <location
@@ -7056,7 +5652,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIcon(int iconRes) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7065,7 +5661,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getIcon() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7074,7 +5670,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7083,7 +5679,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIntent(Intent intent) {"
         errorLine2="                              ~~~~~~">
         <location
@@ -7092,7 +5688,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Intent getIntent() {"
         errorLine2="           ~~~~~~">
         <location
@@ -7101,7 +5697,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7110,7 +5706,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7119,7 +5715,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setNumericShortcut(char numericChar) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7128,7 +5724,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7137,7 +5733,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7146,7 +5742,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7155,7 +5751,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setCheckable(boolean checkable) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7164,7 +5760,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setChecked(boolean checked) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7173,7 +5769,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setVisible(boolean visible) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7182,7 +5778,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setEnabled(boolean enabled) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7191,7 +5787,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SubMenu getSubMenu() {"
         errorLine2="           ~~~~~~~">
         <location
@@ -7200,7 +5796,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7209,7 +5805,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -7218,7 +5814,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ContextMenu.ContextMenuInfo getMenuInfo() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -7227,7 +5823,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setShowAsActionFlags(int actionEnum) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7236,7 +5832,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setActionView(View view) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7245,7 +5841,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setActionView(View view) {"
         errorLine2="                                  ~~~~">
         <location
@@ -7254,7 +5850,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setActionView(int resId) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7263,7 +5859,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getActionView() {"
         errorLine2="           ~~~~">
         <location
@@ -7272,7 +5868,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider provider) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7281,7 +5877,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setActionProvider(android.view.ActionProvider provider) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -7290,7 +5886,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public android.view.ActionProvider getActionProvider() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -7299,7 +5895,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7308,7 +5904,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -7317,7 +5913,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setContentDescription(CharSequence contentDescription) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7326,7 +5922,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setContentDescription(CharSequence contentDescription) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
@@ -7335,7 +5931,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getContentDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -7344,7 +5940,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTooltipText(CharSequence tooltipText) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7353,7 +5949,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setTooltipText(CharSequence tooltipText) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
@@ -7362,7 +5958,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTooltipText() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -7371,7 +5967,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIconTintList(ColorStateList tint) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7380,7 +5976,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIconTintList(ColorStateList tint) {"
         errorLine2="                                    ~~~~~~~~~~~~~~">
         <location
@@ -7389,7 +5985,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ColorStateList getIconTintList() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -7398,7 +5994,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode tintMode) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7407,7 +6003,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuItem setIconTintMode(PorterDuff.Mode tintMode) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~">
         <location
@@ -7416,7 +6012,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PorterDuff.Mode getIconTintMode() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
@@ -7425,7 +6021,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListView getListView() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -7434,7 +6030,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setEnterTransition(Object enterTransition) {"
         errorLine2="                                   ~~~~~~">
         <location
@@ -7443,7 +6039,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setExitTransition(Object exitTransition) {"
         errorLine2="                                  ~~~~~~">
         <location
@@ -7452,7 +6048,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setHoverListener(MenuItemHoverListener hoverListener) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -7461,7 +6057,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuDropDownListView(Context context, boolean hijackFocus) {"
         errorLine2="                                    ~~~~~~~">
         <location
@@ -7470,7 +6066,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setHoverListener(MenuItemHoverListener hoverListener) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -7479,25 +6075,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public boolean onKeyDown(int keyCode, KeyEvent event) {"
-        errorLine2="                                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public boolean onHoverEvent(MotionEvent ev) {"
-        errorLine2="                                    ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void initForMenu(Context context, MenuBuilder menu);"
         errorLine2="                     ~~~~~~~">
         <location
@@ -7506,7 +6084,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void initForMenu(Context context, MenuBuilder menu);"
         errorLine2="                                      ~~~~~~~~~~~">
         <location
@@ -7515,7 +6093,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    MenuView getMenuView(ViewGroup root);"
         errorLine2="    ~~~~~~~~">
         <location
@@ -7524,7 +6102,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    MenuView getMenuView(ViewGroup root);"
         errorLine2="                         ~~~~~~~~~">
         <location
@@ -7533,7 +6111,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setCallback(Callback cb);"
         errorLine2="                     ~~~~~~~~">
         <location
@@ -7542,7 +6120,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    boolean onSubMenuSelected(SubMenuBuilder subMenu);"
         errorLine2="                              ~~~~~~~~~~~~~~">
         <location
@@ -7551,7 +6129,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing);"
         errorLine2="                     ~~~~~~~~~~~">
         <location
@@ -7560,7 +6138,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item);"
         errorLine2="                                 ~~~~~~~~~~~">
         <location
@@ -7569,7 +6147,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item);"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
@@ -7578,7 +6156,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item);"
         errorLine2="                                   ~~~~~~~~~~~">
         <location
@@ -7587,7 +6165,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item);"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
@@ -7596,7 +6174,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    Parcelable onSaveInstanceState();"
         errorLine2="    ~~~~~~~~~~">
         <location
@@ -7605,7 +6183,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void onRestoreInstanceState(Parcelable state);"
         errorLine2="                                ~~~~~~~~~~">
         <location
@@ -7614,7 +6192,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void initialize(MenuBuilder menu);"
         errorLine2="                    ~~~~~~~~~~~">
         <location
@@ -7623,7 +6201,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void initialize(MenuItemImpl itemData, int menuType);"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
@@ -7632,7 +6210,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        MenuItemImpl getItemData();"
         errorLine2="        ~~~~~~~~~~~~">
         <location
@@ -7641,7 +6219,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void setTitle(CharSequence title);"
         errorLine2="                      ~~~~~~~~~~~~">
         <location
@@ -7650,7 +6228,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void setIcon(Drawable icon);"
         errorLine2="                     ~~~~~~~~">
         <location
@@ -7659,7 +6237,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuWrapperICS(Context context, SupportMenu object) {"
         errorLine2="                          ~~~~~~~">
         <location
@@ -7668,7 +6246,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuWrapperICS(Context context, SupportMenu object) {"
         errorLine2="                                           ~~~~~~~~~~~">
         <location
@@ -7677,187 +6255,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(CharSequence title) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(CharSequence title) {"
-        errorLine2="                        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(int titleRes) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(int groupId, int itemId, int order, CharSequence title) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(int groupId, int itemId, int order, CharSequence title) {"
-        errorLine2="                                                            ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem add(int groupId, int itemId, int order, int titleRes) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(CharSequence title) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(CharSequence title) {"
-        errorLine2="                              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(int titleRes) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) {"
-        errorLine2="                                                                  ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int addIntentOptions(int groupId, int itemId, int order, ComponentName caller,"
-        errorLine2="                                                                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
-        errorLine2="            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
-        errorLine2="                                                          ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem findItem(int id) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem getItem(int index) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean performShortcut(int keyCode, KeyEvent event, int flags) {"
-        errorLine2="                                                ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean isShortcutKey(int keyCode, KeyEvent event) {"
-        errorLine2="                                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        boolean onMenuItemClick(MenuItem item);"
         errorLine2="                                ~~~~~~~~">
         <location
@@ -7866,7 +6264,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void onDismiss(PopupMenu menu);"
         errorLine2="                       ~~~~~~~~~">
         <location
@@ -7875,7 +6273,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected ViewPropertyAnimator mVisibilityAnim;"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -7884,16 +6282,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onConfigurationChanged(Configuration newConfig) {"
-        errorLine2="                                          ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addTab(ActionBar.Tab tab, boolean setSelected) {"
         errorLine2="                       ~~~~~~~~~~~~~">
         <location
@@ -7902,7 +6291,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addTab(ActionBar.Tab tab, int position, boolean setSelected) {"
         errorLine2="                       ~~~~~~~~~~~~~">
         <location
@@ -7911,34 +6300,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onItemSelected(AdapterView&lt;?> adapterView, View view, int position, long id) {"
-        errorLine2="                               ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onItemSelected(AdapterView&lt;?> adapterView, View view, int position, long id) {"
-        errorLine2="                                                           ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNothingSelected(AdapterView&lt;?> adapterView) {"
-        errorLine2="                                  ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        boolean onQueryTextSubmit(String query);"
         errorLine2="                                  ~~~~~~">
         <location
@@ -7947,7 +6309,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        boolean onQueryTextChange(String newText);"
         errorLine2="                                  ~~~~~~">
         <location
@@ -7956,7 +6318,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSearchableInfo(SearchableInfo searchable) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
@@ -7965,7 +6327,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setAppSearchData(Bundle appSearchData) {"
         errorLine2="                                 ~~~~~~">
         <location
@@ -7974,16 +6336,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean requestFocus(int direction, Rect previouslyFocusedRect) {"
-        errorLine2="                                               ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnQueryTextListener(OnQueryTextListener listener) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -7992,7 +6345,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnCloseListener(OnCloseListener listener) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~">
         <location
@@ -8001,7 +6354,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnQueryTextFocusChangeListener(OnFocusChangeListener listener) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8010,7 +6363,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnSuggestionListener(OnSuggestionListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8019,7 +6372,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnSearchClickListener(OnClickListener listener) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~">
         <location
@@ -8028,7 +6381,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getQuery() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -8037,7 +6390,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setQuery(CharSequence query, boolean submit) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
@@ -8046,7 +6399,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSuggestionsAdapter(CursorAdapter adapter) {"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
@@ -8055,7 +6408,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CursorAdapter getSuggestionsAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
@@ -8064,7 +6417,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected Parcelable onSaveInstanceState() {"
         errorLine2="              ~~~~~~~~~~">
         <location
@@ -8073,16 +6426,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRestoreInstanceState(Parcelable state) {"
-        errorLine2="                                          ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SearchAutoComplete(Context context) {"
         errorLine2="                                  ~~~~~~~">
         <location
@@ -8091,7 +6435,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SearchAutoComplete(Context context, AttributeSet attrs) {"
         errorLine2="                                  ~~~~~~~">
         <location
@@ -8100,7 +6444,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SearchAutoComplete(Context context, AttributeSet attrs) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
@@ -8109,7 +6453,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SearchAutoComplete(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                  ~~~~~~~">
         <location
@@ -8118,7 +6462,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SearchAutoComplete(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
@@ -8127,16 +6471,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        protected void replaceText(CharSequence text) {"
-        errorLine2="                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {"
         errorLine2="                                                                      ~~~~">
         <location
@@ -8145,34 +6480,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public boolean onKeyPreIme(int keyCode, KeyEvent event) {"
-        errorLine2="                                                ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public InputConnection onCreateInputConnection(EditorInfo editorInfo) {"
-        errorLine2="               ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public InputConnection onCreateInputConnection(EditorInfo editorInfo) {"
-        errorLine2="                                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onShareTargetSelected(ShareActionProvider source, Intent intent);"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8181,7 +6489,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onShareTargetSelected(ShareActionProvider source, Intent intent);"
         errorLine2="                                                                         ~~~~~~">
         <location
@@ -8190,7 +6498,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ShareActionProvider(Context context) {"
         errorLine2="                               ~~~~~~~">
         <location
@@ -8199,7 +6507,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnShareTargetSelectedListener(OnShareTargetSelectedListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8208,7 +6516,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateActionView() {"
         errorLine2="           ~~~~">
         <location
@@ -8217,7 +6525,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onPrepareSubMenu(SubMenu subMenu) {"
         errorLine2="                                 ~~~~~~~">
         <location
@@ -8226,7 +6534,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setShareHistoryFileName(String shareHistoryFile) {"
         errorLine2="                                        ~~~~~~">
         <location
@@ -8235,7 +6543,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setShareIntent(Intent shareIntent) {"
         errorLine2="                               ~~~~~~">
         <location
@@ -8244,7 +6552,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    ListView getListView();"
         errorLine2="    ~~~~~~~~">
         <location
@@ -8253,7 +6561,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public StandaloneActionMode(Context context, ActionBarContextView view,"
         errorLine2="                                ~~~~~~~">
         <location
@@ -8262,7 +6570,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public StandaloneActionMode(Context context, ActionBarContextView view,"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8271,7 +6579,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            ActionMode.Callback callback, boolean isFocusable) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8280,7 +6588,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
@@ -8289,7 +6597,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
@@ -8298,7 +6606,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCustomView(View view) {"
         errorLine2="                              ~~~~">
         <location
@@ -8307,7 +6615,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Menu getMenu() {"
         errorLine2="           ~~~~">
         <location
@@ -8316,7 +6624,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -8325,7 +6633,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -8334,7 +6642,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getCustomView() {"
         errorLine2="           ~~~~">
         <location
@@ -8343,7 +6651,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuInflater getMenuInflater() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -8352,7 +6660,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
         errorLine2="                            ~~~~~~~~~~~">
         <location
@@ -8361,7 +6669,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onSubMenuSelected(SubMenuBuilder subMenu) {"
         errorLine2="                                     ~~~~~~~~~~~~~~">
         <location
@@ -8370,7 +6678,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCloseSubMenu(SubMenuBuilder menu) {"
         errorLine2="                               ~~~~~~~~~~~~~~">
         <location
@@ -8379,7 +6687,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) {"
         errorLine2="                          ~~~~~~~">
         <location
@@ -8388,7 +6696,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) {"
         errorLine2="                                           ~~~~~~~~~~~">
         <location
@@ -8397,7 +6705,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) {"
         errorLine2="                                                                   ~~~~~~~~~~~~">
         <location
@@ -8406,7 +6714,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Menu getParentMenu() {"
         errorLine2="           ~~~~">
         <location
@@ -8415,16 +6723,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuItem getItem() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCallback(Callback callback) {"
         errorLine2="                            ~~~~~~~~">
         <location
@@ -8433,7 +6732,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MenuBuilder getRootMenu() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
@@ -8442,106 +6741,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu setIcon(Drawable icon) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu setIcon(Drawable icon) {"
-        errorLine2="                           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu setIcon(int iconRes) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu setHeaderIcon(Drawable icon) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu setHeaderIcon(Drawable icon) {"
-        errorLine2="                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu setHeaderIcon(int iconRes) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu setHeaderTitle(CharSequence title) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu setHeaderTitle(CharSequence title) {"
-        errorLine2="                                  ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu setHeaderTitle(int titleRes) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu setHeaderView(View view) {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SubMenu setHeaderView(View view) {"
-        errorLine2="                                 ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean expandItemActionView(MenuItemImpl item) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
@@ -8550,7 +6750,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean collapseItemActionView(MenuItemImpl item) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
@@ -8559,7 +6759,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public String getActionViewStatesKey() {"
         errorLine2="           ~~~~~~">
         <location
@@ -8568,7 +6768,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SupportActionModeWrapper(Context context,"
         errorLine2="                                    ~~~~~~~">
         <location
@@ -8577,7 +6777,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            androidx.appcompat.view.ActionMode supportActionMode) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8586,97 +6786,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Object getTag() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTag(Object tag) {"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTitle(CharSequence title) {"
-        errorLine2="                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSubtitle(CharSequence subtitle) {"
-        errorLine2="                            ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Menu getMenu() {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getTitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getSubtitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View getCustomView() {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setCustomView(View view) {"
-        errorLine2="                              ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MenuInflater getMenuInflater() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CallbackWrapper(Context context, Callback supportCallback) {"
         errorLine2="                               ~~~~~~~">
         <location
@@ -8685,7 +6795,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CallbackWrapper(Context context, Callback supportCallback) {"
         errorLine2="                                                ~~~~~~~~">
         <location
@@ -8694,7 +6804,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onCreateActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8703,7 +6813,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onCreateActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
         errorLine2="                                                                                   ~~~~">
         <location
@@ -8712,7 +6822,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8721,7 +6831,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
         errorLine2="                                                                                    ~~~~">
         <location
@@ -8730,7 +6840,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onActionItemClicked(androidx.appcompat.view.ActionMode mode,"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8739,7 +6849,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                android.view.MenuItem item) {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8748,7 +6858,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onDestroyActionMode(androidx.appcompat.view.ActionMode mode) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8757,7 +6867,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ActionMode getActionModeWrapper(androidx.appcompat.view.ActionMode mode) {"
         errorLine2="               ~~~~~~~~~~">
         <location
@@ -8766,7 +6876,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ActionMode getActionModeWrapper(androidx.appcompat.view.ActionMode mode) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8775,7 +6885,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SupportMenuInflater(Context context) {"
         errorLine2="                               ~~~~~~~">
         <location
@@ -8784,16 +6894,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(@LayoutRes int menuRes, Menu menu) {"
-        errorLine2="                                                ~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSwitchTextAppearance(Context context, int resid) {"
         errorLine2="                                        ~~~~~~~">
         <location
@@ -8802,7 +6903,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSwitchTypeface(Typeface tf, int style) {"
         errorLine2="                                  ~~~~~~~~">
         <location
@@ -8811,7 +6912,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSwitchTypeface(Typeface typeface) {"
         errorLine2="                                  ~~~~~~~~">
         <location
@@ -8820,7 +6921,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTrackDrawable(Drawable track) {"
         errorLine2="                                 ~~~~~~~~">
         <location
@@ -8829,7 +6930,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getTrackDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -8838,7 +6939,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setThumbDrawable(Drawable thumb) {"
         errorLine2="                                 ~~~~~~~~">
         <location
@@ -8847,7 +6948,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getThumbDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -8856,7 +6957,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTextOn() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -8865,7 +6966,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTextOn(CharSequence textOn) {"
         errorLine2="                          ~~~~~~~~~~~~">
         <location
@@ -8874,7 +6975,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTextOff() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -8883,7 +6984,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTextOff(CharSequence textOff) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
@@ -8892,52 +6993,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onPopulateAccessibilityEvent(AccessibilityEvent event) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void draw(Canvas c) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onDraw(Canvas canvas) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected int[] onCreateDrawableState(int extraSpace) {"
-        errorLine2="              ~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected boolean verifyDrawable(Drawable who) {"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -8946,25 +7002,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
@@ -8973,7 +7011,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                                                        ~~~~~~~">
         <location
@@ -8982,7 +7020,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                                                                         ~~~~~~~~~~~~">
         <location
@@ -8991,7 +7029,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            int[] attrs) {"
         errorLine2="            ~~~~~">
         <location
@@ -9000,7 +7038,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
@@ -9009,7 +7047,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                                                        ~~~~~~~">
         <location
@@ -9018,7 +7056,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
         errorLine2="                                                                         ~~~~~~~~~~~~">
         <location
@@ -9027,7 +7065,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            int[] attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="            ~~~~~">
         <location
@@ -9036,7 +7074,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, int resid, int[] attrs) {"
         errorLine2="                  ~~~~~~~~~~~~~~">
         <location
@@ -9045,7 +7083,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, int resid, int[] attrs) {"
         errorLine2="                                                        ~~~~~~~">
         <location
@@ -9054,7 +7092,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static TintTypedArray obtainStyledAttributes(Context context, int resid, int[] attrs) {"
         errorLine2="                                                                                    ~~~~~">
         <location
@@ -9063,7 +7101,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TypedArray getWrappedTypeArray() {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -9072,7 +7110,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getDrawable(int index) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -9081,7 +7119,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getDrawableIfKnown(int index) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -9090,7 +7128,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Resources getResources() {"
         errorLine2="           ~~~~~~~~~">
         <location
@@ -9099,7 +7137,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getText(int index) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -9108,7 +7146,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public String getString(int index) {"
         errorLine2="           ~~~~~~">
         <location
@@ -9117,7 +7155,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public String getNonResourceString(int index) {"
         errorLine2="           ~~~~~~">
         <location
@@ -9126,7 +7164,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ColorStateList getColorStateList(int index) {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -9135,7 +7173,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int getLayoutDimension(int index, String name) {"
         errorLine2="                                             ~~~~~~">
         <location
@@ -9144,7 +7182,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence[] getTextArray(int index) {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -9153,7 +7191,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean getValue(int index, TypedValue outValue) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
@@ -9162,7 +7200,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TypedValue peekValue(int index) {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -9171,7 +7209,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public String getPositionDescription() {"
         errorLine2="           ~~~~~~">
         <location
@@ -9180,7 +7218,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMenu(MenuBuilder menu, ActionMenuPresenter outerPresenter) {"
         errorLine2="                        ~~~~~~~~~~~">
         <location
@@ -9189,7 +7227,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMenu(MenuBuilder menu, ActionMenuPresenter outerPresenter) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9198,7 +7236,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setLogo(Drawable drawable) {"
         errorLine2="                        ~~~~~~~~">
         <location
@@ -9207,7 +7245,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getLogo() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -9216,7 +7254,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setLogoDescription(CharSequence description) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
@@ -9225,7 +7263,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getLogoDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -9234,7 +7272,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -9243,7 +7281,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
@@ -9252,7 +7290,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -9261,7 +7299,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
@@ -9270,7 +7308,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitleTextAppearance(Context context, @StyleRes int resId) {"
         errorLine2="                                       ~~~~~~~">
         <location
@@ -9279,7 +7317,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSubtitleTextAppearance(Context context, @StyleRes int resId) {"
         errorLine2="                                          ~~~~~~~">
         <location
@@ -9288,7 +7326,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setNavigationOnClickListener(OnClickListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~">
         <location
@@ -9297,7 +7335,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Menu getMenu() {"
         errorLine2="           ~~~~">
         <location
@@ -9306,7 +7344,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9315,7 +7353,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected Parcelable onSaveInstanceState() {"
         errorLine2="              ~~~~~~~~~~">
         <location
@@ -9324,88 +7362,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRestoreInstanceState(Parcelable state) {"
-        errorLine2="                                          ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onHoverEvent(MotionEvent ev) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateDefaultLayoutParams() {"
-        errorLine2="              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public DecorToolbar getWrapper() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -9414,7 +7371,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9423,7 +7380,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
         errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9432,7 +7389,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onMenuItemClick(MenuItem item);"
         errorLine2="                                       ~~~~~~~~">
         <location
@@ -9441,7 +7398,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(@NonNull Context c, AttributeSet attrs) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
@@ -9450,7 +7407,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
@@ -9459,7 +7416,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ActionBar.LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9468,7 +7425,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(MarginLayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -9477,7 +7434,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9486,7 +7443,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SavedState(Parcel source) {"
         errorLine2="                          ~~~~~~">
         <location
@@ -9495,7 +7452,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SavedState(Parcel source, ClassLoader loader) {"
         errorLine2="                          ~~~~~~">
         <location
@@ -9504,7 +7461,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SavedState(Parcel source, ClassLoader loader) {"
         errorLine2="                                         ~~~~~~~~~~~">
         <location
@@ -9513,7 +7470,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SavedState(Parcelable superState) {"
         errorLine2="                          ~~~~~~~~~~">
         <location
@@ -9522,7 +7479,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void writeToParcel(Parcel out, int flags) {"
         errorLine2="                                  ~~~~~~">
         <location
@@ -9531,7 +7488,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ToolbarWidgetWrapper(Toolbar toolbar, boolean style) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -9540,7 +7497,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ToolbarWidgetWrapper(Toolbar toolbar, boolean style,"
         errorLine2="                                ~~~~~~~">
         <location
@@ -9549,7 +7506,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewGroup getViewGroup() {"
         errorLine2="           ~~~~~~~~~">
         <location
@@ -9558,7 +7515,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Context getContext() {"
         errorLine2="           ~~~~~~~">
         <location
@@ -9567,7 +7524,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setWindowCallback(Window.Callback cb) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~">
         <location
@@ -9576,7 +7533,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setWindowTitle(CharSequence title) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
@@ -9585,7 +7542,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -9594,7 +7551,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
@@ -9603,7 +7560,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -9612,7 +7569,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
@@ -9621,7 +7578,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setIcon(Drawable d) {"
         errorLine2="                        ~~~~~~~~">
         <location
@@ -9630,7 +7587,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setLogo(Drawable d) {"
         errorLine2="                        ~~~~~~~~">
         <location
@@ -9639,7 +7596,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMenu(Menu menu, MenuPresenter.Callback cb) {"
         errorLine2="                        ~~~~">
         <location
@@ -9648,7 +7605,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMenu(Menu menu, MenuPresenter.Callback cb) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9657,7 +7614,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setEmbeddedTabView(ScrollingTabContainerView tabView) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9666,7 +7623,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setDropdownParams(SpinnerAdapter adapter,"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
@@ -9675,7 +7632,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            AdapterView.OnItemSelectedListener listener) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9684,7 +7641,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCustomView(View view) {"
         errorLine2="                              ~~~~">
         <location
@@ -9693,7 +7650,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getCustomView() {"
         errorLine2="           ~~~~">
         <location
@@ -9702,7 +7659,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewPropertyAnimatorCompat setupAnimatorToVisibility(final int visibility,"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9711,7 +7668,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setNavigationIcon(Drawable icon) {"
         errorLine2="                                  ~~~~~~~~">
         <location
@@ -9720,7 +7677,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setDefaultNavigationIcon(Drawable defaultNavigationIcon) {"
         errorLine2="                                         ~~~~~~~~">
         <location
@@ -9729,7 +7686,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setNavigationContentDescription(CharSequence description) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
@@ -9738,7 +7695,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void saveHierarchyState(SparseArray&lt;Parcelable> toolbarStates) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9747,7 +7704,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void restoreHierarchyState(SparseArray&lt;Parcelable> toolbarStates) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9756,7 +7713,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setBackgroundDrawable(Drawable d) {"
         errorLine2="                                      ~~~~~~~~">
         <location
@@ -9765,7 +7722,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMenuCallbacks(MenuPresenter.Callback actionMenuPresenterCallback,"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9774,7 +7731,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            MenuBuilder.Callback menuBuilderCallback) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9783,7 +7740,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Menu getMenu() {"
         errorLine2="           ~~~~">
         <location
@@ -9792,7 +7749,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewPropertyAnimatorCompatSet play(ViewPropertyAnimatorCompat animator) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9801,7 +7758,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewPropertyAnimatorCompatSet play(ViewPropertyAnimatorCompat animator) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9810,7 +7767,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewPropertyAnimatorCompatSet playSequentially(ViewPropertyAnimatorCompat anim1,"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9819,7 +7776,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewPropertyAnimatorCompatSet playSequentially(ViewPropertyAnimatorCompat anim1,"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9828,7 +7785,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            ViewPropertyAnimatorCompat anim2) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9837,7 +7794,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewPropertyAnimatorCompatSet setDuration(long duration) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9846,7 +7803,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewPropertyAnimatorCompatSet setInterpolator(Interpolator interpolator) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9855,7 +7812,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewPropertyAnimatorCompatSet setInterpolator(Interpolator interpolator) {"
         errorLine2="                                                         ~~~~~~~~~~~~">
         <location
@@ -9864,7 +7821,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewPropertyAnimatorCompatSet setListener(ViewPropertyAnimatorListener listener) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9873,7 +7830,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewPropertyAnimatorCompatSet setListener(ViewPropertyAnimatorListener listener) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9882,7 +7839,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setLayoutInflater(LayoutInflater inflater) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
@@ -9891,7 +7848,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public LayoutInflater getLayoutInflater() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -9900,25 +7857,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void draw(Canvas canvas) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void dispatchDraw(Canvas canvas) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View inflate() {"
         errorLine2="           ~~~~">
         <location
@@ -9927,7 +7866,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnInflateListener(OnInflateListener inflateListener) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~">
         <location
@@ -9936,7 +7875,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void onInflate(ViewStubCompat stub, View inflated);"
         errorLine2="                       ~~~~~~~~~~~~~~">
         <location
@@ -9945,7 +7884,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void onInflate(ViewStubCompat stub, View inflated);"
         errorLine2="                                            ~~~~">
         <location
@@ -9954,7 +7893,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static boolean isLayoutRtl(View view) {"
         errorLine2="                                      ~~~~">
         <location
@@ -9963,7 +7902,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void computeFitSystemWindows(View view, Rect inoutInsets, Rect outLocalInsets) {"
         errorLine2="                                               ~~~~">
         <location
@@ -9972,7 +7911,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void computeFitSystemWindows(View view, Rect inoutInsets, Rect outLocalInsets) {"
         errorLine2="                                                          ~~~~">
         <location
@@ -9981,7 +7920,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void computeFitSystemWindows(View view, Rect inoutInsets, Rect outLocalInsets) {"
         errorLine2="                                                                            ~~~~">
         <location
@@ -9990,7 +7929,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void makeOptionalFitsSystemWindows(View view) {"
         errorLine2="                                                     ~~~~">
         <location
@@ -9999,7 +7938,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WindowCallbackWrapper(Window.Callback wrapped) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~">
         <location
@@ -10008,61 +7947,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
-        errorLine2="                                    ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchKeyShortcutEvent(KeyEvent event) {"
-        errorLine2="                                            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchTouchEvent(MotionEvent event) {"
-        errorLine2="                                      ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchTrackballEvent(MotionEvent event) {"
-        errorLine2="                                          ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchGenericMotionEvent(MotionEvent event) {"
-        errorLine2="                                              ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {"
-        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreatePanelView(int featureId) {"
         errorLine2="           ~~~~">
         <location
@@ -10071,7 +7956,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onCreatePanelMenu(int featureId, Menu menu) {"
         errorLine2="                                                    ~~~~">
         <location
@@ -10080,7 +7965,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onPreparePanel(int featureId, View view, Menu menu) {"
         errorLine2="                                                 ~~~~">
         <location
@@ -10089,7 +7974,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onPreparePanel(int featureId, View view, Menu menu) {"
         errorLine2="                                                            ~~~~">
         <location
@@ -10098,7 +7983,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onMenuOpened(int featureId, Menu menu) {"
         errorLine2="                                               ~~~~">
         <location
@@ -10107,7 +7992,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onMenuItemSelected(int featureId, MenuItem item) {"
         errorLine2="                                                     ~~~~~~~~">
         <location
@@ -10116,16 +8001,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onWindowAttributesChanged(WindowManager.LayoutParams attrs) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onPanelClosed(int featureId, Menu menu) {"
         errorLine2="                                             ~~~~">
         <location
@@ -10134,16 +8010,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onSearchRequested(SearchEvent searchEvent) {"
-        errorLine2="                                     ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -10152,16 +8019,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {"
-        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMode onWindowStartingActionMode(ActionMode.Callback callback, int type) {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -10170,43 +8028,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ActionMode onWindowStartingActionMode(ActionMode.Callback callback, int type) {"
-        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onActionModeStarted(ActionMode mode) {"
-        errorLine2="                                    ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onActionModeFinished(ActionMode mode) {"
-        errorLine2="                                     ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            List&lt;KeyboardShortcutGroup> data, Menu menu, int deviceId) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            List&lt;KeyboardShortcutGroup> data, Menu menu, int deviceId) {"
         errorLine2="                                              ~~~~">
         <location
@@ -10215,7 +8037,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Window.Callback getWrapped() {"
         errorLine2="                 ~~~~~~~~~~~~~~~">
         <location
@@ -10224,7 +8046,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WindowDecorActionBar(Activity activity, boolean overlayMode) {"
         errorLine2="                                ~~~~~~~~">
         <location
@@ -10233,7 +8055,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WindowDecorActionBar(Dialog dialog) {"
         errorLine2="                                ~~~~~~">
         <location
@@ -10242,7 +8064,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WindowDecorActionBar(View layout) {"
         errorLine2="                                ~~~~">
         <location
@@ -10251,7 +8073,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onConfigurationChanged(Configuration newConfig) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
@@ -10260,7 +8082,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10269,7 +8091,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10278,7 +8100,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(CharSequence title) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
@@ -10287,7 +8109,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setWindowTitle(CharSequence title) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
@@ -10296,7 +8118,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
@@ -10305,7 +8127,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setBackgroundDrawable(Drawable d) {"
         errorLine2="                                      ~~~~~~~~">
         <location
@@ -10314,7 +8136,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setStackedBackgroundDrawable(Drawable d) {"
         errorLine2="                                             ~~~~~~~~">
         <location
@@ -10323,7 +8145,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSplitBackgroundDrawable(Drawable d) {"
         errorLine2="                                           ~~~~~~~~">
         <location
@@ -10332,7 +8154,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getCustomView() {"
         errorLine2="           ~~~~">
         <location
@@ -10341,7 +8163,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -10350,7 +8172,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -10359,7 +8181,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMode startActionMode(ActionMode.Callback callback) {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -10368,7 +8190,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ActionMode startActionMode(ActionMode.Callback callback) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10377,7 +8199,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addTab(Tab tab) {"
         errorLine2="                       ~~~">
         <location
@@ -10386,7 +8208,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addTab(Tab tab, int position) {"
         errorLine2="                       ~~~">
         <location
@@ -10395,7 +8217,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addTab(Tab tab, boolean setSelected) {"
         errorLine2="                       ~~~">
         <location
@@ -10404,7 +8226,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addTab(Tab tab, int position, boolean setSelected) {"
         errorLine2="                       ~~~">
         <location
@@ -10413,7 +8235,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Tab newTab() {"
         errorLine2="           ~~~">
         <location
@@ -10422,7 +8244,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void removeTab(Tab tab) {"
         errorLine2="                          ~~~">
         <location
@@ -10431,7 +8253,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void selectTab(Tab tab) {"
         errorLine2="                          ~~~">
         <location
@@ -10440,7 +8262,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Tab getSelectedTab() {"
         errorLine2="           ~~~">
         <location
@@ -10449,7 +8271,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Context getThemedContext() {"
         errorLine2="           ~~~~~~~">
         <location
@@ -10458,7 +8280,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setHomeAsUpIndicator(Drawable indicator) {"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -10467,7 +8289,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setHomeActionContentDescription(CharSequence description) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
@@ -10476,7 +8298,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ActionModeImpl(Context context, ActionMode.Callback callback) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -10485,7 +8307,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ActionModeImpl(Context context, ActionMode.Callback callback) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10494,7 +8316,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuInflater getMenuInflater() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -10503,7 +8325,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Menu getMenu() {"
         errorLine2="               ~~~~">
         <location
@@ -10512,7 +8334,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setCustomView(View view) {"
         errorLine2="                                  ~~~~">
         <location
@@ -10521,7 +8343,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setSubtitle(CharSequence subtitle) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
@@ -10530,7 +8352,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setTitle(CharSequence title) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
@@ -10539,7 +8361,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence getTitle() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -10548,7 +8370,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence getSubtitle() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -10557,7 +8379,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View getCustomView() {"
         errorLine2="               ~~~~">
         <location
@@ -10566,7 +8388,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
         errorLine2="                                ~~~~~~~~~~~">
         <location
@@ -10575,7 +8397,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onSubMenuSelected(SubMenuBuilder subMenu) {"
         errorLine2="                                         ~~~~~~~~~~~~~~">
         <location
@@ -10584,7 +8406,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onCloseSubMenu(SubMenuBuilder menu) {"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
@@ -10593,7 +8415,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Object getTag() {"
         errorLine2="               ~~~~~~">
         <location
@@ -10602,7 +8424,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setTag(Object tag) {"
         errorLine2="               ~~~">
         <location
@@ -10611,7 +8433,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setTag(Object tag) {"
         errorLine2="                          ~~~~~~">
         <location
@@ -10620,7 +8442,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ActionBar.TabListener getCallback() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10629,7 +8451,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setTabListener(ActionBar.TabListener callback) {"
         errorLine2="               ~~~">
         <location
@@ -10638,7 +8460,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setTabListener(ActionBar.TabListener callback) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10647,7 +8469,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View getCustomView() {"
         errorLine2="               ~~~~">
         <location
@@ -10656,7 +8478,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setCustomView(View view) {"
         errorLine2="               ~~~">
         <location
@@ -10665,7 +8487,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setCustomView(View view) {"
         errorLine2="                                 ~~~~">
         <location
@@ -10674,7 +8496,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setCustomView(int layoutResId) {"
         errorLine2="               ~~~">
         <location
@@ -10683,7 +8505,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Drawable getIcon() {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -10692,7 +8514,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence getText() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -10701,7 +8523,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setIcon(Drawable icon) {"
         errorLine2="               ~~~">
         <location
@@ -10710,7 +8532,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setIcon(Drawable icon) {"
         errorLine2="                           ~~~~~~~~">
         <location
@@ -10719,7 +8541,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setIcon(int resId) {"
         errorLine2="               ~~~">
         <location
@@ -10728,7 +8550,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setText(CharSequence text) {"
         errorLine2="               ~~~">
         <location
@@ -10737,7 +8559,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setText(CharSequence text) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
@@ -10746,7 +8568,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setText(int resId) {"
         errorLine2="               ~~~">
         <location
@@ -10755,7 +8577,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setContentDescription(int resId) {"
         errorLine2="               ~~~">
         <location
@@ -10764,7 +8586,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setContentDescription(CharSequence contentDesc) {"
         errorLine2="               ~~~">
         <location
@@ -10773,7 +8595,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Tab setContentDescription(CharSequence contentDesc) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
@@ -10782,7 +8604,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence getContentDescription() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -10791,7 +8613,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCustomView(View view) {"
         errorLine2="                              ~~~~">
         <location
@@ -10800,7 +8622,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCustomView(View view, LayoutParams layoutParams) {"
         errorLine2="                              ~~~~">
         <location
@@ -10809,7 +8631,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCustomView(View view, LayoutParams layoutParams) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
@@ -10818,7 +8640,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {"
         errorLine2="                                           ~~~~~~~~~~~~~~">
         <location
@@ -10827,7 +8649,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {"
         errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10836,7 +8658,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Tab getTabAt(int index) {"
         errorLine2="           ~~~">
         <location
@@ -10845,7 +8667,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setIcon(Drawable icon) {"
         errorLine2="                        ~~~~~~~~">
         <location
@@ -10854,7 +8676,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setLogo(Drawable logo) {"
         errorLine2="                        ~~~~~~~~">
         <location
@@ -10863,7 +8685,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onKeyShortcut(int keyCode, KeyEvent event) {"
         errorLine2="                                              ~~~~~~~~">
         <location
diff --git a/appcompat/appcompat/src/androidTest/AndroidManifest.xml b/appcompat/appcompat/src/androidTest/AndroidManifest.xml
index 8176114..2abfc0d 100644
--- a/appcompat/appcompat/src/androidTest/AndroidManifest.xml
+++ b/appcompat/appcompat/src/androidTest/AndroidManifest.xml
@@ -26,6 +26,15 @@
         android:supportsRtl="true"
         android:theme="@style/Theme.AppCompat">
 
+        <service
+            android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
+            android:enabled="false"
+            android:exported="false">
+            <meta-data
+                android:name="autoStoreLocales"
+                android:value="false" />
+        </service>
+
         <activity
             android:name="androidx.appcompat.app.AppCompatActivity"/>
 
@@ -323,6 +332,10 @@
             android:theme="@style/Theme.CustomInflater"/>
 
         <activity
+            android:name="androidx.appcompat.app.NoDisplayAppCompatActivity"
+            android:theme="@style/Theme.AppCompatNoDisplay"/>
+
+        <activity
             android:name="androidx.appcompat.app.NoThemeAppCompatActivity"
             android:theme="@android:style/Theme.Holo.NoActionBar"/>
 
@@ -339,6 +352,40 @@
 
         <activity
             android:name="androidx.appcompat.widget.TooltipCompatTestActivity" />
+        <activity android:name="androidx.appcompat.app.LocalesUpdateActivity"/>
+
+        <activity
+            android:name="androidx.appcompat.app.LocalesConfigChangesActivity"
+            android:configChanges="locale|layoutDirection"/>
+
+        <activity
+            android:name="androidx.appcompat.app.LocalesCustomApplyOverrideConfigurationActivity" />
+
+        <activity android:name="androidx.appcompat.app.LocalesDialogFragment"/>
+
+        <activity android:name="androidx.appcompat.app.LocalesCustomAttachBaseContextActivity"/>
+
+        <activity
+            android:name="androidx.appcompat.app.LocalesRotateDoesNotRecreateActivity"
+            android:configChanges="orientation|screenSize"/>
+
+        <activity android:name="androidx.appcompat.app.LocalesActivityA"/>
+
+        <activity android:name="androidx.appcompat.app.LocalesActivityB"/>
+
+        <activity
+            android:name="androidx.appcompat.app.LocalesConfigChangesActivityA"
+            android:configChanges="locale|layoutDirection"/>
+
+        <activity
+            android:name="androidx.appcompat.app.LocalesConfigChangesActivityB"
+            android:configChanges="locale|layoutDirection"/>
+
+        <activity
+            android:name="androidx.appcompat.app.LocalesConfigChangesActivityWithoutLayoutDirection"
+            android:configChanges="locale"/>
+
+        <activity android:name="androidx.appcompat.app.LocalesLateOnCreateActivity"/>
 
     </application>
 
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityA.java
similarity index 61%
copy from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
copy to appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityA.java
index 8aed834..069c76c 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityA.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2022 The Android Open Source Project
+ * Copyright (C) 2022 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.
@@ -14,15 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.glance.appwidget.preview
+package androidx.appcompat.app;
 
-import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
+/**
+ * An activity for locales with a unique class name.
+ */
+public class LocalesActivityA extends LocalesUpdateActivity {}
 
-@Retention(AnnotationRetention.SOURCE)
-@Target(
-    AnnotationTarget.ANNOTATION_CLASS,
-    AnnotationTarget.FUNCTION
-)
-@ExperimentalGlanceRemoteViewsApi
-@Repeatable
-annotation class PreviewGlance
\ No newline at end of file
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityB.java
similarity index 60%
copy from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
copy to appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityB.java
index 8aed834..b327efb 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityB.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,15 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.glance.appwidget.preview
+package androidx.appcompat.app;
 
-import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
-
-@Retention(AnnotationRetention.SOURCE)
-@Target(
-    AnnotationTarget.ANNOTATION_CLASS,
-    AnnotationTarget.FUNCTION
-)
-@ExperimentalGlanceRemoteViewsApi
-@Repeatable
-annotation class PreviewGlance
\ No newline at end of file
+/**
+ * An activity for locales with a unique class name.
+ */
+public class LocalesActivityB extends LocalesUpdateActivity {}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesChangeWhenInBackground.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesChangeWhenInBackground.kt
new file mode 100644
index 0000000..9ae3adda
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesChangeWhenInBackground.kt
@@ -0,0 +1,85 @@
+/*
+ * 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.appcompat.app
+
+import android.content.Intent
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.testutils.LifecycleOwnerUtils.waitUntilState
+import junit.framework.TestCase.assertNotSame
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+//  setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesChangeWhenInBackground {
+    @get:Rule
+    val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+    private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+
+    @Before
+    fun setUp() {
+        // Since no locales are applied as of now, current configuration will have system
+        // locales.
+        systemLocales = LocalesUpdateActivity.getConfigLocales(
+            rule.activity.resources.configuration)
+    }
+
+    @Test
+    fun testLocalesChangeWhenInBackground() {
+
+        val instrumentation = InstrumentationRegistry.getInstrumentation()
+        val firstActivity = rule.activity
+        assertConfigurationLocalesEquals(systemLocales, firstActivity)
+
+        // Start a new Activity, so that the original Activity goes into the background
+        val intent = Intent(firstActivity, AppCompatActivity::class.java).apply {
+            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+        }
+        val secondActivity = instrumentation.startActivitySync(intent) as AppCompatActivity
+        assertConfigurationLocalesEquals(systemLocales, secondActivity)
+
+        // Now change the locales for the foreground activity
+        val recreatedSecond = setLocalesAndWaitForRecreate(
+            secondActivity,
+            CUSTOM_LOCALE_LIST
+        )
+
+        // Now finish the foreground activity and wait until it is destroyed,
+        // allowing the recreated activity to come to the foreground
+        instrumentation.runOnMainSync { recreatedSecond.finish() }
+        waitUntilState(recreatedSecond, Lifecycle.State.DESTROYED)
+
+        // Assert that the recreated Activity becomes resumed
+        instrumentation.waitForIdleSync()
+        assertNotSame(rule.activity, firstActivity)
+        waitUntilState(rule.activity, Lifecycle.State.RESUMED)
+    }
+}
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivity.java
similarity index 60%
copy from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
copy to appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivity.java
index 8aed834..d7c757e 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivity.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,15 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.glance.appwidget.preview
+package androidx.appcompat.app;
 
-import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
-
-@Retention(AnnotationRetention.SOURCE)
-@Target(
-    AnnotationTarget.ANNOTATION_CLASS,
-    AnnotationTarget.FUNCTION
-)
-@ExperimentalGlanceRemoteViewsApi
-@Repeatable
-annotation class PreviewGlance
\ No newline at end of file
+/**
+ * An activity that handles locales configuration changes.
+ */
+public class LocalesConfigChangesActivity extends LocalesUpdateActivity { }
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityA.java
similarity index 60%
copy from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
copy to appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityA.java
index 8aed834..c6b0d8b 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityA.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,15 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.glance.appwidget.preview
+package androidx.appcompat.app;
 
-import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
-
-@Retention(AnnotationRetention.SOURCE)
-@Target(
-    AnnotationTarget.ANNOTATION_CLASS,
-    AnnotationTarget.FUNCTION
-)
-@ExperimentalGlanceRemoteViewsApi
-@Repeatable
-annotation class PreviewGlance
\ No newline at end of file
+/**
+ * An activity that handles locales configuration changes.
+ */
+public class LocalesConfigChangesActivityA extends LocalesUpdateActivity {}
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityB.java
similarity index 60%
copy from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
copy to appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityB.java
index 8aed834..c59c33b 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityB.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,15 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.glance.appwidget.preview
+package androidx.appcompat.app;
 
-import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
-
-@Retention(AnnotationRetention.SOURCE)
-@Target(
-    AnnotationTarget.ANNOTATION_CLASS,
-    AnnotationTarget.FUNCTION
-)
-@ExperimentalGlanceRemoteViewsApi
-@Repeatable
-annotation class PreviewGlance
\ No newline at end of file
+/**
+ * An activity that handles locales configuration changes.
+ */
+public class LocalesConfigChangesActivityB extends LocalesUpdateActivity {}
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityWithoutLayoutDirection.java
similarity index 66%
copy from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
copy to appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityWithoutLayoutDirection.java
index 8aed834..77d7bfb 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityWithoutLayoutDirection.java
@@ -14,15 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.glance.appwidget.preview
+package androidx.appcompat.app;
 
-import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
-
-@Retention(AnnotationRetention.SOURCE)
-@Target(
-    AnnotationTarget.ANNOTATION_CLASS,
-    AnnotationTarget.FUNCTION
-)
-@ExperimentalGlanceRemoteViewsApi
-@Repeatable
-annotation class PreviewGlance
\ No newline at end of file
+/**
+ * An activity that handles locales configuration changes and does not handle layoutDirection
+ * configChanges.
+ */
+public class LocalesConfigChangesActivityWithoutLayoutDirection extends LocalesUpdateActivity { }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesTestCase.kt
new file mode 100644
index 0000000..a4aff79
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesTestCase.kt
@@ -0,0 +1,183 @@
+/*
+ * 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.appcompat.app
+
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocales
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.testutils.withActivity
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Before
+import org.junit.Test
+
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+//  setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesConfigChangesTestCase() {
+    private lateinit var scenario: ActivityScenario<LocalesConfigChangesActivity>
+    private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+    private var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+
+    @Before
+    fun setup() {
+        LocalesUtils.initCustomLocaleList()
+        // By default we'll set the apps to use system locales, which allows us to make better
+        // assumptions in the tests below.
+        // Launch the test activity.
+        scenario = ActivityScenario.launch(LocalesConfigChangesActivity::class.java)
+        scenario.onActivity {
+            // Since no locales are applied as of now, current configuration will have system
+            // locales.
+            systemLocales = LocalesUpdateActivity.getConfigLocales(it.resources.configuration)
+            // expected locales is an overlay of custom and system locales.
+            expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+                CUSTOM_LOCALE_LIST, systemLocales)
+        }
+    }
+
+    @Test
+    fun testOnConfigurationChangeCalledWhileStarted() {
+        scenario.moveToState(Lifecycle.State.RESUMED)
+
+        // Set locales to CUSTOM_LOCALE_LIST.
+        scenario.onActivity { setLocales(CUSTOM_LOCALE_LIST) }
+        // Assert that the onConfigurationChange was called with a new correct config.
+        scenario.onActivity {
+            val lastConfig = it.lastConfigurationChangeAndClear
+            assertConfigurationLocalesEquals(
+                expectedLocales,
+                lastConfig!!
+            )
+        }
+
+        // Set locales back to system locales.
+        scenario.onActivity { setLocales(LocaleListCompat.getEmptyLocaleList()) }
+        // Assert that the onConfigurationChange was called with a new correct config.
+        scenario.onActivity {
+            val lastConfig = it.lastConfigurationChangeAndClear
+            assertConfigurationLocalesEquals(
+                systemLocales, lastConfig!!
+            )
+        }
+    }
+
+    @Test
+    fun testOnConfigurationChangeCalledWhileStopped() {
+        scenario.moveToState(Lifecycle.State.RESUMED)
+        scenario.moveToState(Lifecycle.State.CREATED)
+
+        // Set locales to CUSTOM_LOCALE_LIST.
+        scenario.onActivity { setLocales(CUSTOM_LOCALE_LIST) }
+        // Assert that the onConfigurationChange was called with a new correct config.
+        scenario.onActivity {
+            val lastConfig = it.lastConfigurationChangeAndClear
+            assertConfigurationLocalesEquals(
+                expectedLocales,
+                lastConfig!!
+            )
+        }
+
+        // Set locales back to system locales.
+        scenario.onActivity { setLocales(LocaleListCompat.getEmptyLocaleList()) }
+        // Assert that the onConfigurationChange was called with a new correct config.
+        scenario.onActivity {
+            val lastConfig = it.lastConfigurationChangeAndClear
+            assertConfigurationLocalesEquals(
+                systemLocales, lastConfig!!
+            )
+        }
+    }
+
+    @Test
+    fun testOnConfigurationChangeNotCalledWhileDestroyed() {
+        scenario.moveToState(Lifecycle.State.RESUMED)
+
+        lateinit var activity: LocalesConfigChangesActivity
+        scenario.onActivity { activity = it }
+
+        scenario.moveToState(Lifecycle.State.DESTROYED)
+
+        // Clear any previous config changes.
+        activity.lastConfigurationChangeAndClear
+
+        // Set locales to CUSTOM_LOCALE_LIST.
+        setLocales(CUSTOM_LOCALE_LIST)
+        // Assert that the onConfigurationChange was not called with a new correct config.
+        assertNull(activity.lastConfigurationChangeAndClear)
+
+        // Set locales back to system locales.
+        setLocales(LocaleListCompat.getEmptyLocaleList())
+        // Assert that the onConfigurationChange was not called with a new correct config.
+        assertNull(activity.lastConfigurationChangeAndClear)
+    }
+
+    @Test
+    fun testResourcesUpdated() {
+        // Set locales to CUSTOM_LOCALE_LIST.
+        scenario.onActivity { setLocales(CUSTOM_LOCALE_LIST) }
+
+        // Assert that the Activity resources configuration was updated.
+        assertConfigurationLocalesEquals(
+            expectedLocales,
+            scenario.withActivity { this }
+        )
+
+        // Set locales back to system locales.
+        scenario.onActivity { setLocales(LocaleListCompat.getEmptyLocaleList()) }
+
+        // Assert that the Activity resources configuration was updated.
+        assertConfigurationLocalesEquals(
+            systemLocales,
+            scenario.withActivity { this }
+        )
+    }
+
+    @Test
+    fun testOnLocalesChangedCalled() {
+        // Set locales to CUSTOM_LOCALE_LIST.
+        scenario.onActivity { setLocales(CUSTOM_LOCALE_LIST) }
+        // Assert that the Activity received a new value.
+        assertEquals(
+            expectedLocales,
+            scenario.withActivity { lastLocalesAndReset }
+        )
+
+        // Set locales back to system locales.
+        scenario.onActivity { setLocales(LocaleListCompat.getEmptyLocaleList()) }
+        // Assert that the Activity received a new value.
+        assertEquals(systemLocales, scenario.withActivity { lastLocalesAndReset })
+    }
+
+    @After
+    fun cleanup() {
+        // Reset the system locales.
+        if (scenario.state != Lifecycle.State.DESTROYED) {
+            scenario.onActivity { setLocales(LocaleListCompat.getEmptyLocaleList()) }
+        }
+        LocalesUpdateActivity.teardown()
+        scenario.close()
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesWithoutLayoutDirectionTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesWithoutLayoutDirectionTestCase.kt
new file mode 100644
index 0000000..c20886a
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesWithoutLayoutDirectionTestCase.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2022 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.
+ */
+
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.filters.SdkSuppress
+import junit.framework.Assert.assertNull
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+//  setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesConfigChangesWithoutLayoutDirectionTestCase {
+    private lateinit var scenario: ActivityScenario<
+        LocalesConfigChangesActivityWithoutLayoutDirection>
+    private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+    private var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+
+    @Before
+    fun setup() {
+        LocalesUtils.initCustomLocaleList()
+        // By default we'll set the apps to use system locales, which allows us to make better
+        // assumptions in the tests below.
+        // Launch the test activity.
+        scenario =
+            ActivityScenario.launch(LocalesConfigChangesActivityWithoutLayoutDirection::class.java)
+        scenario.onActivity {
+            // Since no locales are applied as of now, current configuration will have system
+            // locales.
+            systemLocales = LocalesUpdateActivity.getConfigLocales(it.resources.configuration)
+            // expected locales is an overlay of custom and system locales.
+            expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+                LocalesUtils.CUSTOM_LOCALE_LIST, systemLocales
+            )
+        }
+    }
+
+    @Test
+    fun testOnConfigurationChangeNotCalledWhileStarted() {
+        scenario.moveToState(Lifecycle.State.RESUMED)
+
+        // Set locales to CUSTOM_LOCALE_LIST.
+        scenario.onActivity { LocalesUtils.setLocales(LocalesUtils.CUSTOM_LOCALE_LIST) }
+        // Assert that the onConfigurationChange was called with a new correct config.
+        scenario.onActivity {
+            // the call should not have reached the LocalesUpdateActivity.onConfigurationChange()
+            // because the manifest entry for LocalesConfigChangesActivityWithoutLayoutDirection
+            // only handles locale and not layoutDir.
+            assertNull(it.lastConfigurationChangeAndClear)
+            LocalesUtils.assertConfigurationLocalesEquals(
+                expectedLocales,
+                it.resources.configuration!!
+            )
+        }
+    }
+
+    @After
+    fun teardown() {
+        LocalesUpdateActivity.teardown()
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationActivity.java
new file mode 100644
index 0000000..e39c081
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationActivity.java
@@ -0,0 +1,39 @@
+/*
+ * 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.appcompat.app;
+
+import android.content.Context;
+import android.content.res.Configuration;
+
+import androidx.annotation.RequiresApi;
+
+/**
+ * An activity that has a customized fontScale, set before onCreate().
+ */
+@RequiresApi(17)
+public class LocalesCustomApplyOverrideConfigurationActivity extends LocalesUpdateActivity {
+    public static final float CUSTOM_FONT_SCALE = 4.24f;
+
+    @Override
+    protected void attachBaseContext(Context newBase) {
+        super.attachBaseContext(newBase);
+
+        Configuration config = new Configuration();
+        config.fontScale = CUSTOM_FONT_SCALE;
+        super.applyOverrideConfiguration(config);
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationTestCase.kt
new file mode 100644
index 0000000..27c3d16
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationTestCase.kt
@@ -0,0 +1,83 @@
+/*
+ * 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.appcompat.app
+
+import android.content.res.Configuration
+import androidx.appcompat.app.LocalesCustomApplyOverrideConfigurationActivity.CUSTOM_FONT_SCALE
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.appcompat.testutils.NightModeUtils
+import androidx.appcompat.testutils.NightModeUtils.assertConfigurationNightModeEquals
+import androidx.core.os.LocaleListCompat
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import org.junit.Assert.assertEquals
+import org.junit.Rule
+import org.junit.Test
+
+/**
+ * This is one approach to customize Activity's configuration that's used in google3.
+ */
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(minSdkVersion = 17, maxSdkVersion = 31)
+class LocalesCustomApplyOverrideConfigurationTestCase() {
+
+    @get:Rule
+    val activityRule = LocalesActivityTestRule(
+        LocalesCustomApplyOverrideConfigurationActivity::class.java
+    )
+
+    @Test
+    @Suppress("DEPRECATION")
+    fun testNightModeIsMaintainedOnLocalesChange() {
+        NightModeUtils.setNightModeAndWaitForRecreate(
+            activityRule,
+            AppCompatDelegate.MODE_NIGHT_YES,
+            NightModeUtils.NightSetMode.LOCAL
+        )
+        assertConfigurationNightModeEquals(
+            Configuration.UI_MODE_NIGHT_YES,
+            activityRule.activity.resources.configuration
+        )
+        setLocalesAndWaitForRecreate(activityRule, CUSTOM_LOCALE_LIST)
+        // Check that the custom configuration properties are maintained
+        assertConfigurationNightModeEquals(
+            Configuration.UI_MODE_NIGHT_YES,
+            activityRule.activity.resources.configuration
+        )
+        setLocalesAndWaitForRecreate(activityRule, LocaleListCompat.getEmptyLocaleList())
+    }
+
+    @Test
+    fun testFontScaleIsMaintained() {
+        // Check that the custom configuration properties are maintained
+        val config = activityRule.activity.resources.configuration
+        assertEquals(CUSTOM_FONT_SCALE, config.fontScale)
+    }
+
+    @Test
+    fun testFontScaleIsMaintainedOnLocalesChange() {
+        // Set locales to CUSTOM_LOCALE_LIST.
+        setLocalesAndWaitForRecreate(activityRule, CUSTOM_LOCALE_LIST)
+        // Check that the custom configuration properties are maintained.
+        val config = activityRule.activity.resources.configuration
+        assertEquals(CUSTOM_FONT_SCALE, config.fontScale)
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextActivity.java
new file mode 100644
index 0000000..9f929e5
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextActivity.java
@@ -0,0 +1,48 @@
+/*
+ * 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.appcompat.app;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.os.Build;
+
+/**
+ * An activity with customized configuration.
+ */
+public class LocalesCustomAttachBaseContextActivity extends LocalesUpdateActivity {
+    public static final float CUSTOM_FONT_SCALE = 4.24f;
+
+    @Override
+    protected void attachBaseContext(Context newBase) {
+        super.attachBaseContext(useCustomConfig(newBase));
+    }
+
+    private Context useCustomConfig(Context context) {
+        if (Build.VERSION.SDK_INT >= 24) {
+            Configuration config = new Configuration();
+            config.fontScale = CUSTOM_FONT_SCALE;
+            return context.createConfigurationContext(config);
+        } else {
+            Resources res = context.getResources();
+            Configuration config = new Configuration(res.getConfiguration());
+            config.fontScale = CUSTOM_FONT_SCALE;
+            res.updateConfiguration(config, res.getDisplayMetrics());
+            return context;
+        }
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextTestCase.kt
new file mode 100644
index 0000000..9215bf4
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextTestCase.kt
@@ -0,0 +1,87 @@
+/*
+ * 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.appcompat.app
+
+import android.content.res.Configuration
+import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
+import androidx.appcompat.app.NightModeCustomAttachBaseContextActivity.CUSTOM_FONT_SCALE
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.appcompat.testutils.NightModeUtils.NightSetMode
+import androidx.appcompat.testutils.NightModeUtils.assertConfigurationNightModeEquals
+import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
+import androidx.core.os.LocaleListCompat
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesCustomAttachBaseContextTestCase() {
+
+    @get:Rule
+    val activityRule = LocalesActivityTestRule(
+        LocalesCustomAttachBaseContextActivity::class.java
+    )
+
+    @Before
+    fun setUp() {
+        AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+    }
+
+    @Test
+    @Suppress("DEPRECATION")
+    fun testNightModeIsMaintainedOnLocalesChange() {
+        setNightModeAndWaitForRecreate(
+            activityRule,
+            MODE_NIGHT_YES,
+            NightSetMode.LOCAL
+        )
+        assertConfigurationNightModeEquals(
+            Configuration.UI_MODE_NIGHT_YES,
+            activityRule.activity.resources.configuration
+        )
+        setLocalesAndWaitForRecreate(activityRule, CUSTOM_LOCALE_LIST)
+        // Check that the custom configuration properties are maintained
+        assertConfigurationNightModeEquals(
+            Configuration.UI_MODE_NIGHT_YES,
+            activityRule.activity.resources.configuration
+        )
+    }
+
+    @Test
+    fun testFontScaleIsMaintained() {
+        // Check that the custom configuration properties are maintained.
+        val config = activityRule.activity.resources.configuration
+        assertEquals(CUSTOM_FONT_SCALE, config.fontScale)
+    }
+
+    @Test
+    fun testFontScaleIsMaintainedOnLocalesChange() {
+        // Set locales to CUSTOM_LOCALE_LIST.
+        setLocalesAndWaitForRecreate(activityRule, CUSTOM_LOCALE_LIST)
+        // Check that the custom configuration properties are maintained.
+        val config = activityRule.activity.resources.configuration
+        assertEquals(CUSTOM_FONT_SCALE, config.fontScale)
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesForegroundDialogTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesForegroundDialogTestCase.kt
new file mode 100644
index 0000000..7ced0ff
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesForegroundDialogTestCase.kt
@@ -0,0 +1,72 @@
+/*
+ * 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.appcompat.app
+
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.testutils.LifecycleOwnerUtils.waitUntilState
+import junit.framework.TestCase.assertNotSame
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesForegroundDialogTestCase {
+    @get:Rule
+    val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+    private var baseLocales = LocaleListCompat.getEmptyLocaleList()
+
+    @Before
+    fun setUp() {
+        AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+        baseLocales = LocalesUpdateActivity.getConfigLocales(rule.activity.resources.configuration)
+    }
+
+    @Test
+    fun testLocalesChangeWithForegroundDialog() {
+        val firstActivity = rule.activity
+        assertConfigurationLocalesEquals(baseLocales, firstActivity)
+
+        // Open a dialog on top of the activity.
+        rule.runOnUiThread {
+            val frag = TestDialogFragment.newInstance()
+            frag.show(firstActivity.supportFragmentManager, "dialog")
+        }
+
+        // Now change the locales for the foreground activity.
+        setLocalesAndWaitForRecreate(
+            firstActivity,
+            CUSTOM_LOCALE_LIST
+        )
+
+        // Ensure that it was recreated.
+        assertNotSame(rule.activity, firstActivity)
+        waitUntilState(rule.activity, Lifecycle.State.RESUMED)
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateActivity.java
new file mode 100644
index 0000000..6466e41
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateActivity.java
@@ -0,0 +1,85 @@
+/*
+ * 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.appcompat.app;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.LocaleList;
+
+import androidx.core.os.LocaleListCompat;
+
+import java.util.Locale;
+
+/**
+ * An activity with systemLocales replaced with some customised locales for testing.
+ */
+public class LocalesLateOnCreateActivity extends LocalesUpdateActivity {
+
+    public static LocaleListCompat DEFAULT_LOCALE_LIST;
+    public static LocaleListCompat TEST_LOCALE_LIST;
+    public static LocaleListCompat EXPECTED_LOCALE_LIST;
+
+    @Override
+    public void onCreate(Bundle bundle) {
+        // Override locales so that AppCompat attempts to re-apply during onCreate().
+
+        if (Build.VERSION.SDK_INT >= 21) {
+            DEFAULT_LOCALE_LIST = LocaleListCompat.forLanguageTags(
+                    Locale.US.toLanguageTag() + "," + Locale.CHINESE.toLanguageTag());
+            TEST_LOCALE_LIST = LocaleListCompat.forLanguageTags(
+                    Locale.CANADA_FRENCH.toLanguageTag() + ","
+                            + Locale.US.toLanguageTag());
+            EXPECTED_LOCALE_LIST = LocaleListCompat.forLanguageTags(
+                    Locale.CANADA_FRENCH.toLanguageTag() + ","
+                            + Locale.US.toLanguageTag() + "," + Locale.CHINESE.toLanguageTag());
+        } else {
+            DEFAULT_LOCALE_LIST = LocaleListCompat.create(Locale.US);
+            TEST_LOCALE_LIST = LocaleListCompat.create(Locale.CANADA_FRENCH);
+            EXPECTED_LOCALE_LIST = LocaleListCompat.create(Locale.CANADA_FRENCH);
+        }
+        disableAutomaticLocales(getApplicationContext());
+
+        super.onCreate(bundle);
+    }
+
+    private static void setLocales(LocaleListCompat locales, Context context) {
+        Configuration conf = context.getResources().getConfiguration();
+        if (Build.VERSION.SDK_INT >= 24) {
+            conf.setLocales(LocaleList.forLanguageTags(locales.toLanguageTags()));
+        } else if (Build.VERSION.SDK_INT >= 17) {
+            conf.setLocale(locales.get(0));
+        } else {
+            conf.locale = locales.get(0);
+        }
+        // updateConfiguration is required to make the configuration change stick.
+        // updateConfiguration must be called before any use of the actual Resources.
+        context.getResources().updateConfiguration(conf,
+                context.getResources().getDisplayMetrics());
+    }
+
+    /**
+     * Ensures the context does not use system locales, instead uses the DEFAULT_LOCALE_LIST
+     *
+     * <p>This must be called before a Context's Resources are used for the first time. {@code
+     * Activity.onCreate} is a great place to call {@code disableAutomaticLocales(this)}
+     */
+    public static void disableAutomaticLocales(Context context) {
+        setLocales(DEFAULT_LOCALE_LIST, context);
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateTestCase.kt
new file mode 100644
index 0000000..13968ee
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateTestCase.kt
@@ -0,0 +1,68 @@
+/*
+ * 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.appcompat.app
+
+import androidx.appcompat.app.LocalesLateOnCreateActivity.DEFAULT_LOCALE_LIST
+import androidx.appcompat.app.LocalesLateOnCreateActivity.EXPECTED_LOCALE_LIST
+import androidx.appcompat.app.LocalesLateOnCreateActivity.TEST_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.lifecycle.Lifecycle
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.testutils.LifecycleOwnerUtils.waitUntilState
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+//  setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesLateOnCreateTestCase {
+
+    @get:Rule
+    val activityRule = LocalesActivityTestRule(LocalesLateOnCreateActivity::class.java)
+
+    @Test
+    fun testActivityRecreateLoop() {
+        // Activity should be able to reach fully resumed state in default locales.
+        waitUntilState(activityRule.activity, Lifecycle.State.RESUMED)
+        assertConfigurationLocalesEquals(
+            DEFAULT_LOCALE_LIST,
+            activityRule.activity.resources.configuration
+        )
+
+        // Simulate the user set locales, which should force an activity recreate().
+        setLocalesAndWaitForRecreate(
+            activityRule,
+            TEST_LOCALE_LIST
+        )
+
+        // Activity should be able to reach fully resumed state again.
+        waitUntilState(activityRule.activity, Lifecycle.State.RESUMED)
+
+        // The requested locales should have been set during attachBaseContext().
+        assertConfigurationLocalesEquals(
+            EXPECTED_LOCALE_LIST,
+            activityRule.activity.resources.configuration
+        )
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesPersistTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesPersistTestCase.kt
new file mode 100644
index 0000000..0470ce5f
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesPersistTestCase.kt
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2022 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.
+ */
+
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import android.content.Intent
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.core.os.LocaleListCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import junit.framework.Assert.assertNull
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesPersistTestCase() {
+    @get:Rule
+    val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+    private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+    private var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+
+    @Before
+    fun setUp() {
+        // Since no locales are applied as of now, current configuration will have system
+        // locales.
+        systemLocales = LocalesUpdateActivity.getConfigLocales(
+            rule.activity.resources.configuration
+        )
+        expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+            CUSTOM_LOCALE_LIST, systemLocales
+        )
+    }
+
+    /**
+     * This test verifies that the locales persist in storage when a metadata entry for
+     * "autoStoreLocale" is provided as an opt-in.
+     * To replicate the scenario of app-startup a method resetStaticRequestedAndStoredLocales()
+     * is called to clear out the static storage of locales. The flow of the test is:
+     * setApplicationLocales is called on the firstActivity and it is recreated as recreatedFirst.
+     * Now the locales must have been stored and the static storage would also hold these. Then
+     * we clear out the static storage and create a new activity secondActivity by using an intent
+     * and because the static storage was already clear the activity should sync locales from
+     * storage and start up in the app-specific locales.
+     */
+    @Test
+    fun testLocalesAppliedInNewActivityAfterStaticStorageCleared() {
+        // mimics opting in to "autoStoreLocales"
+        AppCompatDelegate.setIsAutoStoreLocalesOptedIn(true)
+
+        val instrumentation = InstrumentationRegistry.getInstrumentation()
+        val firstActivity = rule.activity
+        assertConfigurationLocalesEquals(systemLocales, firstActivity)
+
+        // Now change the locales for the activity
+        val recreatedFirst = setLocalesAndWaitForRecreate(
+            firstActivity,
+            CUSTOM_LOCALE_LIST
+        )
+
+        assertConfigurationLocalesEquals(expectedLocales, recreatedFirst)
+
+        // clear out static storage so that, when a new activity starts it syncs locales
+        // from storage.
+        AppCompatDelegate.resetStaticRequestedAndStoredLocales()
+        // verify that the static locales were cleared out.
+        assertNull(AppCompatDelegate.getRequestedAppLocales())
+
+        // Start a new Activity, so that the original Activity goes into the background
+        val intent = Intent(recreatedFirst, AppCompatActivity::class.java).apply {
+            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+        }
+        val secondActivity = instrumentation.startActivitySync(intent) as AppCompatActivity
+
+        // assert that the new activity started with the app-specific locales after reading them
+        // from storage.
+        assertConfigurationLocalesEquals(expectedLocales, secondActivity)
+    }
+
+    @Test
+    fun testNewActivityCreatedWhenNoAppLocalesExist() {
+        val instrumentation = InstrumentationRegistry.getInstrumentation()
+        val firstActivity = rule.activity
+        assertConfigurationLocalesEquals(systemLocales, firstActivity)
+
+        // Start a new Activity, so that the original Activity goes into the background
+        val intent = Intent(firstActivity, AppCompatActivity::class.java).apply {
+            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+        }
+        val secondActivity = instrumentation.startActivitySync(intent) as AppCompatActivity
+
+        // assert that the new activity started with the systemLocales.
+        assertConfigurationLocalesEquals(systemLocales, secondActivity)
+    }
+
+    @After
+    fun teardown() {
+        rule.runOnUiThread {
+            // clean-up
+            AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+            // setting auto storage opt-in to false
+            AppCompatDelegate.setIsAutoStoreLocalesOptedIn(false)
+        }
+    }
+}
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivity.java
similarity index 60%
copy from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
copy to appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivity.java
index 8aed834..14efcde 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivity.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,15 +14,6 @@
  * limitations under the License.
  */
 
-package androidx.glance.appwidget.preview
+package androidx.appcompat.app;
 
-import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
-
-@Retention(AnnotationRetention.SOURCE)
-@Target(
-    AnnotationTarget.ANNOTATION_CLASS,
-    AnnotationTarget.FUNCTION
-)
-@ExperimentalGlanceRemoteViewsApi
-@Repeatable
-annotation class PreviewGlance
\ No newline at end of file
+public class LocalesRotateDoesNotRecreateActivity extends LocalesUpdateActivity {}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivityTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivityTestCase.kt
new file mode 100644
index 0000000..ef28708
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivityTestCase.kt
@@ -0,0 +1,107 @@
+/*
+ * 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.appcompat.app
+
+import androidx.appcompat.Orientation
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.appcompat.withOrientation
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.UiDevice
+import androidx.testutils.LifecycleOwnerUtils
+import org.junit.After
+import org.junit.Assert.assertNotSame
+import org.junit.Assert.assertSame
+import org.junit.Rule
+import org.junit.Test
+
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(minSdkVersion = 18, maxSdkVersion = 31)
+class LocalesRotateDoesNotRecreateActivityTestCase() {
+
+    private val instrumentation = InstrumentationRegistry.getInstrumentation()
+    private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
+
+    @get:Rule
+    val activityRule: LocalesActivityTestRule<LocalesRotateDoesNotRecreateActivity> =
+        LocalesActivityTestRule(
+            LocalesRotateDoesNotRecreateActivity::class.java,
+            initialTouchMode = false,
+            // Let the test method launch its own activity so that we can ensure it's RESUMED.
+            launchActivity = false
+        )
+
+    @Test
+    fun testRotateDoesNotRecreateActivity() {
+        // Set locales to CUSTOM_LOCALE_LIST and wait for state RESUMED.
+        val initialActivity = activityRule.launchActivity(null)
+        var systemLocales = LocalesUpdateActivity.getConfigLocales(
+            initialActivity.resources.configuration)
+        LifecycleOwnerUtils.waitUntilState(initialActivity, Lifecycle.State.RESUMED)
+        setLocalesAndWaitForRecreate(initialActivity, CUSTOM_LOCALE_LIST)
+
+        val localesActivity = activityRule.activity
+        val config = localesActivity.resources.configuration
+
+        // On API level 26 and below, the configuration object is going to be identical
+        // across configuration changes, so we need to pull the orientation value now.
+        val orientation = config.orientation
+        val expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+            CUSTOM_LOCALE_LIST, systemLocales)
+        // Assert that the current Activity has the new locales.
+        assertConfigurationLocalesEquals(expectedLocales, config)
+
+        // Now rotate the device. This should NOT result in a lifecycle event, just a call to
+        // onConfigurationChanged.
+        localesActivity.resetOnConfigurationChange()
+        device.withOrientation(Orientation.LEFT) {
+            instrumentation.waitForIdleSync()
+            localesActivity.expectOnConfigurationChange(5000)
+
+            // Assert that we got the same activity and thus it was not recreated.
+            val rotatedLocalesActivity = activityRule.activity
+            val rotatedConfig = rotatedLocalesActivity.resources.configuration
+            assertSame(localesActivity, rotatedLocalesActivity)
+            assertConfigurationLocalesEquals(expectedLocales, rotatedConfig)
+
+            // On API level 26 and below, the configuration object is going to be identical
+            // across configuration changes, so we need to compare against the cached value.
+            assertNotSame(orientation, rotatedConfig.orientation)
+        }
+    }
+
+    @After
+    fun teardown() {
+        device.setOrientationNatural()
+        // setOrientationNatural may need some time rotate orientation to natural, so we wait for
+        // the operation to end for 5000ms.
+        device.waitForIdle(/* timeout= */5000)
+
+        // Clean up
+        activityRule.runOnUiThread {
+            AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+        }
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateRecreatesActivityWithConfigTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateRecreatesActivityWithConfigTestCase.kt
new file mode 100644
index 0000000..d5f5fa1
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateRecreatesActivityWithConfigTestCase.kt
@@ -0,0 +1,137 @@
+/*
+ * 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.appcompat.app
+
+import android.app.Activity
+import android.app.Instrumentation
+import androidx.appcompat.Orientation
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.appcompat.withOrientation
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.UiDevice
+import androidx.testutils.LifecycleOwnerUtils
+import org.junit.After
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNotSame
+import org.junit.Rule
+import org.junit.Test
+
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(minSdkVersion = 18, maxSdkVersion = 31)
+class LocalesRotateRecreatesActivityWithConfigTestCase() {
+
+    private val instrumentation = InstrumentationRegistry.getInstrumentation()
+    private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
+    private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+    @get:Rule
+    public val activityRule: LocalesActivityTestRule<LocalesUpdateActivity> =
+        LocalesActivityTestRule(
+            LocalesUpdateActivity::class.java,
+            initialTouchMode = false,
+            // Let the test method launch its own activity so that we can ensure it's RESUMED.
+            launchActivity = false
+        )
+
+    @After
+    public fun teardown() {
+        device.setOrientationNatural()
+        device.waitForIdle(/* timeout= */5000)
+
+        // Clean up after the default mode test.
+
+        activityRule.runOnUiThread {
+            AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+        }
+    }
+
+    @Test
+    public fun testRotateRecreatesActivityWithConfig() {
+        // Set locales to CUSTOM_LOCALE_LIST and wait for state RESUMED.
+        val initialActivity = activityRule.launchActivity(null)
+        LifecycleOwnerUtils.waitUntilState(initialActivity, Lifecycle.State.RESUMED)
+        systemLocales = LocalesUpdateActivity.getConfigLocales(activityRule.activity.resources
+            .configuration)
+
+        setLocalesAndWaitForRecreate(initialActivity, CUSTOM_LOCALE_LIST)
+
+        val localesActivity = activityRule.activity
+        val config = localesActivity.resources.configuration
+
+        // On API level 26 and below, the configuration object is going to be identical
+        // across configuration changes, so we need to pull the orientation value now.
+        val orientation = config.orientation
+
+        // Assert that the current Activity has the expected locales.
+        assertConfigurationLocalesEquals(LocalesUpdateActivity.overlayCustomAndSystemLocales(
+            CUSTOM_LOCALE_LIST, systemLocales), config)
+
+        // Now rotate the device. This should result in an onDestroy lifecycle event.
+        localesActivity.resetOnDestroy()
+        rotateDeviceAndWaitForRecreate(localesActivity) {
+            localesActivity.expectOnDestroy(/* timeout= */ 5000)
+
+            // Assert that we got a different activity and thus it was recreated.
+            val rotatedLocalesActivity = activityRule.activity
+            val rotatedConfig = rotatedLocalesActivity.resources.configuration
+            assertNotSame(localesActivity, rotatedLocalesActivity)
+            assertConfigurationLocalesEquals(
+                LocalesUpdateActivity.overlayCustomAndSystemLocales(CUSTOM_LOCALE_LIST,
+                    systemLocales),
+                rotatedConfig
+            )
+
+            // On API level 26 and below, the configuration object is going to be identical
+            // across configuration changes, so we need to compare against the cached value.
+            assertNotSame(orientation, rotatedConfig.orientation)
+        }
+    }
+
+    private fun rotateDeviceAndWaitForRecreate(activity: Activity, doThis: () -> Unit) {
+        val monitor = Instrumentation.ActivityMonitor(activity::class.java.name, /* result= */
+            null, /* block= */false)
+        instrumentation.addMonitor(monitor)
+
+        device.withOrientation(Orientation.LEFT) {
+            // Wait for the activity to be recreated after rotation
+            var count = 0
+            var lastActivity: Activity? = activity
+            while ((lastActivity == null || activity == lastActivity) && count < 5) {
+                // If this times out, it will return null.
+                lastActivity = monitor.waitForActivityWithTimeout(/* timeout= */ 1000L)
+                count++
+            }
+            instrumentation.waitForIdleSync()
+
+            // Ensure that we didn't time out
+            assertNotNull("Activity was not recreated within 5000ms", lastActivity)
+            assertNotEquals(
+                "Activity was not recreated within 5000ms", activity, lastActivity
+            )
+            doThis()
+        }
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSetUsingFrameworkApiTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSetUsingFrameworkApiTestCase.kt
new file mode 100644
index 0000000..82fd8e4
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSetUsingFrameworkApiTestCase.kt
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2022 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.
+ */
+
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import android.os.LocaleList
+import androidx.annotation.RequiresApi
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.core.os.BuildCompat
+import androidx.core.os.LocaleListCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import junit.framework.Assert.assertEquals
+import junit.framework.Assert.assertNull
+import org.junit.After
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales. The minSdkVersion should be set to 33 after API bump.
+@SdkSuppress(minSdkVersion = 32)
+class LocalesSetUsingFrameworkApiTestCase {
+    @get:Rule
+    val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+    private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+    private var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+
+    @RequiresApi(33)
+    @Before
+    fun setUp() {
+        // TODO(b/223775393): Remove BuildCompat.isAtLeastT() checks after API version is
+        //  bumped to 33
+        assumeTrue(
+            "Requires API version >=T", BuildCompat.isAtLeastT()
+        )
+
+        // setting the app to follow system.
+        AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
+            AppCompatDelegate.getLocaleManagerForApplication(),
+            LocaleList.getEmptyLocaleList()
+        )
+        // Since no locales are applied as of now, current configuration will have system
+        // locales.
+        systemLocales = LocalesUpdateActivity.getConfigLocales(
+            rule.activity.resources.configuration
+        )
+        expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+            LocalesUtils.CUSTOM_LOCALE_LIST, systemLocales
+        )
+    }
+
+    /**
+     * Verifies that for API version >=T the AppCompatDelegate.setApplicationLocales() call
+     * is redirected to the framework API and the locales are applied successfully.
+     */
+    @Test
+    @RequiresApi(33)
+    fun testSetApplicationLocales_postT_frameworkApiCalled() {
+        val firstActivity = rule.activity
+        assertConfigurationLocalesEquals(systemLocales, firstActivity)
+
+        assertEquals(
+            LocaleListCompat.getEmptyLocaleList(),
+            AppCompatDelegate.getApplicationLocales()
+        )
+        assertNull(AppCompatDelegate.getRequestedAppLocales())
+
+        // Now change the locales for the activity
+        val recreatedFirst = LocalesUtils.setLocalesAndWaitForRecreate(
+            firstActivity,
+            CUSTOM_LOCALE_LIST
+        )
+
+        assertEquals(
+            CUSTOM_LOCALE_LIST,
+            AppCompatDelegate.getApplicationLocales()
+        )
+        // check that the locales were set using the framework API
+        assertEquals(
+            CUSTOM_LOCALE_LIST.toLanguageTags(),
+            AppCompatDelegate.Api33Impl.localeManagerGetApplicationLocales(
+                AppCompatDelegate.getLocaleManagerForApplication()
+            ).toLanguageTags()
+        )
+        // check locales are applied successfully
+        assertConfigurationLocalesEquals(expectedLocales, recreatedFirst)
+        // check that the override was not done by AndroidX, but by the framework
+        assertNull(AppCompatDelegate.getRequestedAppLocales())
+    }
+
+    @RequiresApi(33)
+    @After
+    fun teardown() {
+        // TODO(b/223775393): Remove BuildCompat.isAtLeastT() checks after API version is
+        //  bumped to 33
+        if (!BuildCompat.isAtLeastT()) {
+            return
+        }
+        // clearing locales from framework. setting the app to follow system.
+        AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
+            AppCompatDelegate.getLocaleManagerForApplication(),
+            LocaleList.getEmptyLocaleList()
+        )
+    }
+}
\ No newline at end of file
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesStackedHandlingTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesStackedHandlingTestCase.kt
new file mode 100644
index 0000000..a8cb155
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesStackedHandlingTestCase.kt
@@ -0,0 +1,367 @@
+/*
+ * 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.
+ */
+
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import android.app.Activity
+import android.app.Instrumentation
+import android.app.Instrumentation.ActivityMonitor
+import android.content.Intent
+import android.os.Handler
+import android.os.Looper
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.testutils.LifecycleOwnerUtils.waitUntilState
+import junit.framework.Assert.assertNotNull
+import junit.framework.Assert.assertNotSame
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesStackedHandlingTestCase {
+
+    @Before
+    fun setUp() {
+        LocalesUtils.initCustomLocaleList()
+    }
+
+    /**
+     * Regression test for the following scenario:
+     *
+     * If you have a stack of activities which includes one with android:configChanges="locale" and
+     * android:configChanges="layoutDirection" and you call AppCompatDelegate.setApplicationLocales
+     * it can cause other activities to not be recreated.
+     *
+     * Eg:
+     * - Activity A DOESN'T intercept locales changes and layoutDirection changes in manifest
+     * - Activity B DOESN'T intercept locales changes and layoutDirection changes in manifest
+     * - Activity C DOES intercept both locales and layoutDirection changes in manifest
+     *
+     * Here is your stack : A > B > C (C on top)
+     *
+     * Call AppCompatDelegate.setApplicationLocales with a new mode on activity C. Activity C
+     * receives the change in onConfigurationChanged but there is a good chance that activity A
+     * and/or B were not recreated.
+     */
+    @Test
+    fun testLocalesWithStackedActivities() {
+        val instr = InstrumentationRegistry.getInstrumentation()
+        val result = Instrumentation.ActivityResult(0, Intent())
+        val monitorA = ActivityMonitor(LocalesActivityA::class.java.name, result, false)
+        val monitorB = ActivityMonitor(LocalesActivityB::class.java.name, result, false)
+        val monitorC = ActivityMonitor(
+            LocalesConfigChangesActivity::class.java.name,
+            result, false
+        )
+        instr.addMonitor(monitorA)
+        instr.addMonitor(monitorB)
+        instr.addMonitor(monitorC)
+
+        instr.runOnMainSync {
+            AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+        }
+
+        // Start activity A.
+        instr.startActivitySync(
+            Intent(instr.context, LocalesActivityA::class.java).apply {
+                addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+                putExtra(LocalesUpdateActivity.KEY_TITLE, "A")
+            }
+        )
+
+        // From activity A, start activity B.
+        val activityA = monitorA.waitForActivityWithTimeout(/* timeout= */ 3000)
+            as LocalesUpdateActivity
+        assertNotNull(activityA)
+        activityA.startActivity(
+            Intent(instr.context, LocalesActivityB::class.java).apply {
+                putExtra(LocalesUpdateActivity.KEY_TITLE, "B")
+            }
+        )
+
+        var systemLocales = LocalesUpdateActivity.getConfigLocales(
+            activityA.resources.configuration
+        )
+
+        // Activity A is hidden, wait for it to stop.
+        waitUntilState(activityA, Lifecycle.State.CREATED)
+
+        // From activity B, start activity C.
+        val activityB =
+            monitorB.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+        assertNotNull(activityB)
+        activityB.startActivity(
+            Intent(instr.context, LocalesConfigChangesActivity::class.java).apply {
+                putExtra(LocalesUpdateActivity.KEY_TITLE, "C")
+            }
+        )
+
+        // Activity B is hidden, wait for it to stop.
+        waitUntilState(activityB, Lifecycle.State.CREATED)
+
+        // apply CUSTOM_LOCALE_LIST
+        val activityC =
+            monitorC.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+        assertNotNull(activityC)
+        activityC.runOnUiThread {
+            AppCompatDelegate.setApplicationLocales(CUSTOM_LOCALE_LIST)
+        }
+
+        // Activity C should receive a configuration change.
+        activityC.expectOnConfigurationChange(/* timeout= */ 3000)
+
+        // Activities A and B should recreate() in the background.
+        val activityA2 = expectRecreate(monitorA, activityA) as LocalesUpdateActivity
+        val activityB2 = expectRecreate(monitorB, activityB) as LocalesUpdateActivity
+
+        var expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+            CUSTOM_LOCALE_LIST, systemLocales
+        )
+        // Activity C should have received a locales configuration change.
+        listOf(activityC, activityA2, activityB2).forEach { activity ->
+            activityC.runOnUiThread {
+                assertConfigurationLocalesEquals(
+                    "Activity ${activity.title}'s effective configuration has locales set",
+                    expectedLocales,
+                    activityC.effectiveConfiguration!!
+                )
+            }
+        }
+    }
+
+    /**
+     * Regression test for the following scenario:
+     *
+     * If you have a stack of activities where every activity has `android:configChanges="locale"`
+     * and android:configChanges="layoutDirection" and you call
+     * [AppCompatDelegate.setApplicationLocales] from thread other than the top activity,
+     * then it can cause the bottom activity to not receive `onConfigurationChanged`.
+     *
+     * Eg:
+     * - Activity A DOES intercept locales and layoutDirection changes in manifest
+     * - Activity B DOES intercept locales and layoutDirection changes in manifest
+     * - Activity C DOES intercept locales and layoutDirection changes in manifest
+     *
+     * Here is your stack : A > B > C (C on top)
+     *
+     * Call [AppCompatDelegate.setApplicationLocales] with a new mode on activity C (but not
+     * directly
+     * from this activity, ex with RX AndroidSchedulers.mainThread or an handler). Activity C
+     * receives both `onConfigurationChanged` and `onLocalesChanged`, but activities A and B
+     * may not receive either callback or change their configurations.
+     *
+     * Process:
+     * 1. A > B > C > setApplicationLocales YES
+     * 2. Go back to A (B & C destroyed) > B > C > setApplicationLocales NO (wrong config for A)
+     * 3. repeat (YES/NO/YES/NO...)
+     */
+    @Test
+    fun testLocalesWithStackedActivitiesAndNavigation() {
+        val instr = InstrumentationRegistry.getInstrumentation()
+        val result = Instrumentation.ActivityResult(0, Intent())
+        val monitorA = ActivityMonitor(
+            LocalesConfigChangesActivity::class.java.name,
+            result, false
+        )
+        val monitorB = ActivityMonitor(
+            LocalesConfigChangesActivityA::class.java.name,
+            result, false
+        )
+        val monitorC = ActivityMonitor(
+            LocalesConfigChangesActivityB::class.java.name,
+            result, false
+        )
+        instr.addMonitor(monitorA)
+        instr.addMonitor(monitorB)
+        instr.addMonitor(monitorC)
+
+        instr.runOnMainSync {
+            AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+        }
+
+        // Start activity A.
+        instr.startActivitySync(
+            Intent(instr.context, LocalesConfigChangesActivity::class.java).apply {
+                addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+                putExtra(LocalesUpdateActivity.KEY_TITLE, "A")
+            }
+        )
+
+        // From activity A, start activity B.
+        val activityA =
+            monitorA.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+        assertNotNull("Activity A started within 3000ms", activityA)
+        activityA.startActivity(
+            Intent(instr.context, LocalesConfigChangesActivityA::class.java).apply {
+                putExtra(LocalesUpdateActivity.KEY_TITLE, "B")
+            }
+        )
+
+        var systemLocales = LocalesUpdateActivity.getConfigLocales(
+            activityA.resources.configuration
+        )
+
+        // Activity A is hidden, wait for it to stop.
+        waitUntilState(activityA, Lifecycle.State.CREATED)
+
+        // From activity B, start activity C.
+        val activityB =
+            monitorB.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+        assertNotNull("Activity B started within 3000ms", activityB)
+        activityB.startActivity(
+            Intent(instr.context, LocalesConfigChangesActivityB::class.java).apply {
+                putExtra(LocalesUpdateActivity.KEY_TITLE, "C")
+            }
+        )
+
+        // Activity B is hidden, wait for it to stop.
+        waitUntilState(activityB, Lifecycle.State.CREATED)
+
+        // Wait for activity C to start.
+        val activityC =
+            monitorC.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+        assertNotNull("Activity C started within 3000ms", activityC)
+
+        // Change locales from a non-UI thread.
+        Handler(Looper.getMainLooper()).post {
+            AppCompatDelegate.setApplicationLocales(CUSTOM_LOCALE_LIST)
+        }
+
+        // Activities A, B, and C should all receive configuration changes.
+        listOf(activityA, activityB, activityC).forEach { activity ->
+            activity.expectOnConfigurationChange(/* timeout= */ 3000)
+        }
+
+        var expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+            CUSTOM_LOCALE_LIST, systemLocales
+        )
+
+        // Activities A, B, and C should have all received the new configuration.
+        listOf(activityA, activityB, activityC).forEach { activity ->
+            activity.runOnUiThread {
+                assertConfigurationLocalesEquals(
+                    "Activity ${activity.title}'s effective configuration has locales set",
+                    expectedLocales,
+                    activity.effectiveConfiguration!!
+                )
+            }
+        }
+
+        // Tear down activities C and B, in that order.
+        listOf(activityC, activityB).forEach { activity ->
+            activity.runOnUiThread {
+                activity.finish()
+            }
+            waitUntilState(activity, Lifecycle.State.DESTROYED)
+        }
+
+        // Activity A is in the foreground, wait for it to resume.
+        waitUntilState(activityA, Lifecycle.State.RESUMED)
+
+        // From activity A, start activity B again.
+        activityA.startActivity(
+            Intent(instr.context, LocalesConfigChangesActivityA::class.java).apply {
+                putExtra(LocalesUpdateActivity.KEY_TITLE, "B2")
+            }
+        )
+
+        // Activity A is hidden, wait for it to stop.
+        waitUntilState(activityA, Lifecycle.State.CREATED)
+
+        // From activity B, start activity C. Double-check the return, since the monitor could
+        // trigger on Activity B's lifecycle if the platform does something unexpected.
+        val activityB2 =
+            monitorB.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+        assertNotSame("Monitor responded to activity B2 lifecycle", activityB, activityB2)
+        assertNotNull("Activity B2 started within 3000ms", activityB2)
+        activityB2.startActivity(
+            Intent(instr.context, LocalesConfigChangesActivityB::class.java).apply {
+                putExtra(LocalesUpdateActivity.KEY_TITLE, "C2")
+            }
+        )
+
+        // Activity B is hidden, wait for it to stop.
+        waitUntilState(activityB2, Lifecycle.State.CREATED)
+
+        // Wait for activity C to start. Double-check the return.
+        val activityC2 =
+            monitorC.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+        assertNotSame("Monitor responded to Activity C2 lifecycle", activityC, activityC2)
+        assertNotNull("Activity C2 started within 3000ms", activityC2)
+
+        // Prepare activities A, B, and C to track configuration changes.
+        listOf(activityA, activityB2, activityC2).forEach { activity ->
+            activity.resetOnConfigurationChange()
+        }
+
+        // Change locales again from a non-UI thread.
+        Handler(Looper.getMainLooper()).post {
+            AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+        }
+
+        // Activities A, B, and C should all receive configuration changes.
+        listOf(activityA, activityB2, activityC2).forEach { activity ->
+            activity.expectOnConfigurationChange(/* timeout= */ 3000)
+        }
+
+        // Activities A, B, and C should have all received the new configuration.
+        listOf(activityA, activityB2, activityC2).forEach { activity ->
+            activity.runOnUiThread {
+                assertConfigurationLocalesEquals(
+                    "Activity ${activity.title}'s effective configuration has locales set",
+                    systemLocales,
+                    activity.effectiveConfiguration!!
+                )
+            }
+        }
+    }
+
+    private fun expectRecreate(monitor: ActivityMonitor, activity: Activity): Activity {
+        // 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"...
+        var activityResult: Activity?
+        synchronized(monitor) {
+            do {
+                // this call will release synchronization monitor's monitor
+                activityResult = monitor.waitForActivityWithTimeout(/* timeout= */ 3000)
+            } while (activityResult != null && activityResult == activity)
+        }
+
+        assertNotNull("Recreated activity " + activity.title, activityResult)
+        return activityResult!!
+    }
+
+    @After
+    fun teardown() {
+        LocalesUpdateActivity.teardown()
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSyncToFrameworkTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSyncToFrameworkTestCase.kt
new file mode 100644
index 0000000..7c51c8b
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSyncToFrameworkTestCase.kt
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2022 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.
+ */
+
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import android.content.ComponentName
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.os.LocaleList
+import androidx.annotation.RequiresApi
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.core.os.BuildCompat
+import androidx.core.os.LocaleListCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import junit.framework.Assert.assertEquals
+import junit.framework.Assert.assertNull
+import org.junit.After
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Test case to verify app-locales sync to framework on Version upgrade from Pre T to T.
+ */
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+// This test should only be run for API version T and hence after API bump both
+// minSdkVersion and maxSdkVersion should be set to 33.
+@SdkSuppress(minSdkVersion = 32, maxSdkVersion = 33)
+class LocalesSyncToFrameworkTestCase {
+    @get:Rule
+    val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+    private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+    private var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+    private lateinit var appLocalesComponent: ComponentName
+    private val instrumentation = InstrumentationRegistry.getInstrumentation()
+
+    @RequiresApi(33)
+    @Before
+    fun setUp() {
+        // TODO(b/223775393): Remove BuildCompat.isAtLeastT() checks after API version is
+        //  bumped to 33
+        assumeTrue("Requires API version >=T", BuildCompat.isAtLeastT())
+        // setting the app to follow system.
+        AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
+            AppCompatDelegate.getLocaleManagerForApplication(),
+            LocaleList.getEmptyLocaleList()
+        )
+
+        // Since no locales are applied as of now, current configuration will have system
+        // locales.
+        systemLocales = LocalesUpdateActivity.getConfigLocales(
+            rule.activity.resources.configuration
+        )
+        expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+            CUSTOM_LOCALE_LIST, systemLocales
+        )
+
+        appLocalesComponent = ComponentName(
+            instrumentation.context,
+            AppLocalesStorageHelper.APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME
+        )
+    }
+
+    @RequiresApi(33)
+    @Test
+    fun testAutoSync_preTToPostT_syncsSuccessfully() {
+        val firstActivity = rule.activity
+
+        // activity is following the system and the requested locales are null.
+        assertConfigurationLocalesEquals(systemLocales, firstActivity)
+        assertNull(AppCompatDelegate.getRequestedAppLocales())
+
+        val context = instrumentation.context
+
+        // persist some app locales in storage, mimicking locales set using the backward
+        // compatibility API
+        AppCompatDelegate.setIsAutoStoreLocalesOptedIn(true)
+        AppLocalesStorageHelper.persistLocales(context, CUSTOM_LOCALE_LIST.toLanguageTags())
+
+        // explicitly disable appLocalesComponent that acts as a marker to represent that the
+        // locales has been synced so that when a new activity is created the locales are
+        // synced from storage
+        context.packageManager.setComponentEnabledSetting(
+            appLocalesComponent,
+            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+            /* flags= */ PackageManager.DONT_KILL_APP
+        )
+
+        // resetting static storage represents a fresh app start up.
+        AppCompatDelegate.resetStaticRequestedAndStoredLocales()
+
+        // Start a new Activity, so that the original Activity goes into the background
+        val intent = Intent(firstActivity, AppCompatActivity::class.java).apply {
+            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+        }
+        val secondActivity = instrumentation.startActivitySync(intent) as AppCompatActivity
+
+        // wait for locales to get synced, stop execution of the current thread for the
+        // timeout period
+        Thread.sleep(/* timeout= */ 1000)
+
+        // check that the locales were set using the framework API and they have been synced
+        // successfully
+        assertEquals(
+            CUSTOM_LOCALE_LIST.toLanguageTags(),
+            AppCompatDelegate.Api33Impl.localeManagerGetApplicationLocales(
+                AppCompatDelegate.getLocaleManagerForApplication()
+            ).toLanguageTags()
+        )
+        // check that the activity has the app specific locales
+        assertConfigurationLocalesEquals(expectedLocales, secondActivity)
+        // check that the override was not done by AndroidX, but by the framework
+        assertNull(AppCompatDelegate.getRequestedAppLocales())
+        // check that the synced marker was set to true
+        assertEquals(
+            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+            context.packageManager.getComponentEnabledSetting(appLocalesComponent)
+        )
+
+        AppCompatDelegate.setIsAutoStoreLocalesOptedIn(false)
+    }
+
+    @After
+    @RequiresApi(33)
+    fun teardown() {
+        // TODO(b/223775393): Remove BuildCompat.isAtLeastT() checks after API version is
+        //  bumped to 33
+        if (!BuildCompat.isAtLeastT()) {
+            return
+        }
+        val context = instrumentation.context
+
+        AppCompatDelegate.setIsAutoStoreLocalesOptedIn(true)
+        // setting empty locales deletes the persisted locales record.
+        AppLocalesStorageHelper.persistLocales(context, /* empty locales */ "")
+        AppCompatDelegate.setIsAutoStoreLocalesOptedIn(false)
+
+        // clearing locales from framework.
+        // setting the app to follow system.
+        AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
+            AppCompatDelegate.getLocaleManagerForApplication(),
+            LocaleList.getEmptyLocaleList()
+        )
+
+        // disabling component enabled setting for app_locales sync marker.
+        context.packageManager.setComponentEnabledSetting(
+            appLocalesComponent,
+            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+            /* flags= */ PackageManager.DONT_KILL_APP
+        )
+    }
+}
\ No newline at end of file
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java
new file mode 100644
index 0000000..7678876
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java
@@ -0,0 +1,217 @@
+/*
+ * 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.appcompat.app;
+
+import static androidx.appcompat.app.LocaleOverlayHelper.combineLocalesIfOverlayExists;
+
+import android.content.res.Configuration;
+import android.os.Build;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.test.R;
+import androidx.appcompat.testutils.BaseTestActivity;
+import androidx.core.os.LocaleListCompat;
+
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+
+public class LocalesUpdateActivity extends BaseTestActivity {
+
+
+    public static final String KEY_TITLE = "title";
+
+    private final Semaphore mOnConfigurationChangeSemaphore = new Semaphore(0);
+    private final Semaphore mOnDestroySemaphore = new Semaphore(0);
+    private final Semaphore mOnCreateSemaphore = new Semaphore(0);
+
+    private LocaleListCompat mLastLocales = LocaleListCompat.getEmptyLocaleList();
+
+    private Configuration mEffectiveConfiguration;
+    private Configuration mLastConfigurationChange;
+
+    @Override
+    protected int getContentViewLayoutResId() {
+        return R.layout.activity_locales;
+    }
+
+    @Override
+    public void onLocalesChanged(@NonNull LocaleListCompat locales) {
+        mLastLocales = locales;
+    }
+
+    @Override
+    public void onConfigurationChanged(@NonNull Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        mLastConfigurationChange = new Configuration(newConfig);
+        mEffectiveConfiguration = mLastConfigurationChange;
+        mOnConfigurationChangeSemaphore.release();
+    }
+
+    @Override
+    public void onCreate(Bundle bundle) {
+        super.onCreate(bundle);
+
+        String title = getIntent().getStringExtra(KEY_TITLE);
+        if (title != null) {
+            setTitle(title);
+        }
+
+        mEffectiveConfiguration = new Configuration(getResources().getConfiguration());
+        mOnCreateSemaphore.release();
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+
+        mOnDestroySemaphore.release();
+    }
+
+    @Nullable
+    Configuration getLastConfigurationChangeAndClear() {
+        final Configuration config = mLastConfigurationChange;
+        mLastConfigurationChange = null;
+        return config;
+    }
+
+    /**
+     * @return a copy of the {@link Configuration} from the most recent call to {@link #onCreate} or
+     * {@link #onConfigurationChanged}, or {@code null} if neither has been called yet
+     */
+    @Nullable
+    Configuration getEffectiveConfiguration() {
+        return mEffectiveConfiguration;
+    }
+
+    LocaleListCompat getLastLocalesAndReset() {
+        final LocaleListCompat locales = mLastLocales;
+        mLastLocales = LocaleListCompat.getEmptyLocaleList();
+        return locales;
+    }
+
+    public static LocaleListCompat getConfigLocales(Configuration conf) {
+        if (Build.VERSION.SDK_INT >= 24) {
+            return AppCompatDelegateImpl.Api24Impl.getLocales(conf);
+        } else if (Build.VERSION.SDK_INT >= 21) {
+            return LocaleListCompat.forLanguageTags(AppCompatDelegateImpl.Api21Impl
+                    .toLanguageTag(conf.locale));
+        } else {
+            return LocaleListCompat.create(conf.locale);
+        }
+    }
+
+    public static LocaleListCompat overlayCustomAndSystemLocales(LocaleListCompat customLocales,
+            LocaleListCompat baseLocales) {
+        if (Build.VERSION.SDK_INT >= 24) {
+            return combineLocalesIfOverlayExists(customLocales, baseLocales);
+        } else {
+            return LocaleListCompat.create(customLocales.get(0));
+        }
+    }
+
+    /**
+     * Resets the number of received configuration changes.
+     * <p>
+     * Call this method before {@link #expectOnConfigurationChange(long)} to ensure only future
+     * configuration changes are counted.
+     */
+    public void resetOnConfigurationChange() {
+        mOnConfigurationChangeSemaphore.drainPermits();
+    }
+
+    /**
+     * Blocks until a single configuration change has been received.
+     * <p>
+     * Configuration changes are sticky; if any configuration changes were received prior to
+     * calling this method and {@link #resetOnConfigurationChange()} has not been called, this
+     * method will return immediately.
+     *
+     * @param timeout maximum amount of time (in ms) to wait for a configuration change
+     * @throws InterruptedException if the lock is interrupted
+     */
+    public void expectOnConfigurationChange(long timeout) throws InterruptedException {
+        if (Thread.currentThread() == getMainLooper().getThread()) {
+            throw new IllegalStateException("Method cannot be called on the Activity's UI thread");
+        }
+
+        mOnConfigurationChangeSemaphore.tryAcquire(timeout, TimeUnit.MILLISECONDS);
+    }
+
+    /**
+     * Resets the number of received onCreate lifecycle events.
+     * <p>
+     * Call this method before {@link #expectOnCreate(long)} to ensure only future
+     * onCreate lifecycle events are counted.
+     */
+    public void resetOnCreate() {
+        mOnCreateSemaphore.drainPermits();
+    }
+
+    /**
+     * Blocks until a single onCreate lifecycle event has been received.
+     * <p>
+     * Lifecycle events are sticky; if any events were received prior to calling this method and
+     * an event has been received, this method will return immediately.
+     *
+     * @param timeout maximum amount of time (in ms) to wait for an onCreate event
+     * @throws InterruptedException if the lock is interrupted
+     */
+    public void expectOnCreate(long timeout) throws InterruptedException {
+        if (Thread.currentThread() == getMainLooper().getThread()) {
+            throw new IllegalStateException("Method cannot be called on the Activity's UI thread");
+        }
+
+        mOnCreateSemaphore.tryAcquire(timeout, TimeUnit.MILLISECONDS);
+    }
+
+    /**
+     * Resets the number of received onDestroy lifecycle events.
+     * <p>
+     * Call this method before {@link #expectOnDestroy(long)} to ensure only future
+     * onDestroy lifecycle events are counted.
+     */
+    public void resetOnDestroy() {
+        mOnDestroySemaphore.drainPermits();
+    }
+
+    /**
+     * Blocks until a single onDestroy lifecycle event has been received.
+     * <p>
+     * Lifecycle events are sticky; if any events were received prior to calling this method and
+     * an event has been received, this method will return immediately.
+     *
+     * @param timeout maximum amount of time (in ms) to wait for an onDestroy event
+     * @throws InterruptedException if the lock is interrupted
+     */
+    public void expectOnDestroy(long timeout) throws InterruptedException {
+        if (Thread.currentThread() == getMainLooper().getThread()) {
+            throw new IllegalStateException("Method cannot be called on the Activity's UI thread");
+        }
+
+        mOnDestroySemaphore.tryAcquire(timeout, TimeUnit.MILLISECONDS);
+    }
+
+    /**
+     * Teardown method to clean up persistent locales in static storage.
+     */
+    public static void teardown() {
+        AppCompatDelegate.resetStaticRequestedAndStoredLocales();
+    }
+
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateTestCase.kt
new file mode 100644
index 0000000..d504dc6
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateTestCase.kt
@@ -0,0 +1,118 @@
+/*
+ * 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.appcompat.app
+
+import android.webkit.WebView
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWait
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.core.os.LocaleListCompat
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.testutils.waitForExecution
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+//  setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesUpdateTestCase() {
+    @get:Rule
+    val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+    var systemLocales = LocaleListCompat.getEmptyLocaleList()
+    var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+
+    @Before
+    fun setUp() {
+        // Since no locales are applied as of now, current configuration will have system
+        // locales.
+        systemLocales = LocalesUpdateActivity.getConfigLocales(rule.activity
+            .resources.configuration)
+        expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(CUSTOM_LOCALE_LIST,
+            systemLocales)
+    }
+    @Test
+    fun testDialogDoesNotOverrideActivityConfiguration() {
+        setLocalesAndWaitForRecreate(rule, CUSTOM_LOCALE_LIST)
+        // Now show a AppCompatDialog
+        lateinit var dialog: AppCompatDialog
+        rule.runOnUiThread {
+            dialog = AppCompatDialog(rule.activity)
+            dialog.show()
+        }
+        rule.waitForExecution()
+        // Now dismiss the dialog
+        rule.runOnUiThread { dialog.dismiss() }
+
+        // Assert that the locales are unchanged
+        assertConfigurationLocalesEquals(
+            expectedLocales,
+            rule.activity.resources.configuration
+        )
+    }
+
+    @Test
+    fun testLoadingWebViewMaintainsConfiguration() {
+        setLocalesAndWaitForRecreate(rule, CUSTOM_LOCALE_LIST)
+
+        // Now load a WebView into the Activity
+        rule.runOnUiThread { WebView(rule.activity) }
+
+        // Now assert that the context still has applied locales.
+        assertEquals(
+            expectedLocales,
+            LocalesUpdateActivity.getConfigLocales(rule.activity.resources.configuration)
+        )
+    }
+
+    @Test
+    fun testOnLocalesChangedCalled() {
+        val activity = rule.activity
+        // Set local night mode to YES
+        setLocalesAndWait(rule, CUSTOM_LOCALE_LIST)
+        // Assert that the Activity received a new value
+        assertEquals(expectedLocales, activity.lastLocalesAndReset)
+    }
+
+    @Test
+    fun testOnConfigurationChangeNotCalled() {
+        var activity = rule.activity
+        // Set locales to CUSTOM_LOCALE_LIST.
+        LocalesUtils.setLocalesAndWait(
+            rule,
+            CUSTOM_LOCALE_LIST
+        )
+        // Assert that onConfigurationChange was not called on the original activity
+        assertNull(activity.lastConfigurationChangeAndClear)
+
+        activity = rule.activity
+        // Set locales back to system locales.
+        setLocalesAndWait(
+            rule,
+            LocaleListCompat.getEmptyLocaleList()
+        )
+        // Assert that onConfigurationChange was not called
+        assertNull(activity.lastConfigurationChangeAndClear)
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeForegroundDialogTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeForegroundDialogTestCase.kt
index 2ccfc39..a0e190b 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeForegroundDialogTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeForegroundDialogTestCase.kt
@@ -44,7 +44,7 @@
 
         // Open a dialog on top of the activity.
         rule.runOnUiThread {
-            val frag = NightModeDialogFragment.newInstance()
+            val frag = TestDialogFragment.newInstance()
             frag.show(firstActivity.supportFragmentManager, "dialog")
         }
 
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NoDisplayAppCompatActivity.java
similarity index 66%
copy from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
copy to appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NoDisplayAppCompatActivity.java
index 8aed834..6c00827 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NoDisplayAppCompatActivity.java
@@ -14,15 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.glance.appwidget.preview
+package androidx.appcompat.app;
 
-import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
+public class NoDisplayAppCompatActivity extends AppCompatActivity {
+    @Override
+    protected void onResume() {
+        super.onResume();
 
-@Retention(AnnotationRetention.SOURCE)
-@Target(
-    AnnotationTarget.ANNOTATION_CLASS,
-    AnnotationTarget.FUNCTION
-)
-@ExperimentalGlanceRemoteViewsApi
-@Repeatable
-annotation class PreviewGlance
\ No newline at end of file
+        // NoDisplay-themed activities must call finish() before completing onResume().
+        finish();
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NoDisplayAppCompatTest.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NoDisplayAppCompatTest.kt
new file mode 100644
index 0000000..a5e2068
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NoDisplayAppCompatTest.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2022 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.test.core.app.ActivityScenario
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+class NoDisplayAppCompatTest {
+
+    @Test
+    fun initializeNoDisplayAppCompatActivity() {
+        try {
+            ActivityScenario.launch(NoDisplayAppCompatActivity::class.java)
+        } catch (e: IllegalStateException) {
+            fail("launching AppCompatActivity with NoDisplay theme should not throw error")
+        }
+    }
+}
\ No newline at end of file
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/SystemLocalesMaintainedOnAppLanguageChangeTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/SystemLocalesMaintainedOnAppLanguageChangeTestCase.kt
new file mode 100644
index 0000000..02066e3
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/SystemLocalesMaintainedOnAppLanguageChangeTestCase.kt
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2022 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.
+ */
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import android.os.LocaleList
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.core.app.LocaleManagerCompat
+import androidx.core.os.BuildCompat
+import androidx.core.os.LocaleListCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.platform.app.InstrumentationRegistry
+import junit.framework.Assert.assertEquals
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+class SystemLocalesMaintainedOnAppLanguageChangeTestCase {
+    @get:Rule
+    val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+    private var expectedSystemLocales = LocaleListCompat.getEmptyLocaleList()
+
+    @Before
+    fun setUp() {
+        // Since no locales are applied as of now, current configuration will have system
+        // locales.
+        expectedSystemLocales = LocalesUpdateActivity.getConfigLocales(
+            rule.activity.resources.configuration
+        )
+    }
+
+    @Test
+    fun testGetSystemLocales_noAppLocalesSet_systemLocalesSameAsExpectedSystemLocales() {
+        val context = InstrumentationRegistry.getInstrumentation().context
+        assertEquals(expectedSystemLocales, LocaleManagerCompat.getSystemLocales(context))
+    }
+
+    @Test
+    fun testGetSystemLocales_afterAppLocalesSet_systemLocalesSameAsExpectedSystemLocales() {
+        LocalesUtils.setLocalesAndWaitForRecreate(rule.activity, LocalesUtils.CUSTOM_LOCALE_LIST)
+        // verify the custom locales were applied.
+        assertEquals(LocalesUtils.CUSTOM_LOCALE_LIST, AppCompatDelegate.getApplicationLocales())
+
+        val context = InstrumentationRegistry.getInstrumentation().context
+        // verify correct system locales are returned.
+        assertEquals(expectedSystemLocales, LocaleManagerCompat.getSystemLocales(context))
+       }
+
+    @After
+    fun teardown() {
+        if (BuildCompat.isAtLeastT()) {
+            // cleaning up any platform-persisted locales.
+            AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
+                AppCompatDelegate.getLocaleManagerForApplication(),
+                LocaleList.getEmptyLocaleList()
+            )
+        }
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeDialogFragment.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
similarity index 70%
rename from appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeDialogFragment.java
rename to appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
index ba3932e..907c068 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeDialogFragment.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2020 The Android Open Source Project
+ * 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.
@@ -23,22 +23,26 @@
 import androidx.annotation.Nullable;
 import androidx.fragment.app.DialogFragment;
 
-public class NightModeDialogFragment extends DialogFragment {
+/**
+ * Test class extending DialogFragment used for testing of configuration changes like nightMode and
+ * locales.
+ */
+public class TestDialogFragment extends DialogFragment {
 
-    public NightModeDialogFragment() {
+    public TestDialogFragment() {
         // Public empty constructor used to handle lifecycle events.
     }
 
-    public static NightModeDialogFragment newInstance() {
-        return new NightModeDialogFragment();
+    public static TestDialogFragment newInstance() {
+        return new TestDialogFragment();
     }
 
     @NonNull
     @Override
     public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
         AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
-        builder.setTitle("NightModeDialogFragment");
-        builder.setMessage("NightModeDialogFragment");
+        builder.setTitle("TestDialogFragment");
+        builder.setMessage("TestDialogFragment");
         return builder.create();
     }
 }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesActivityTestRule.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesActivityTestRule.kt
new file mode 100644
index 0000000..976fac7
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesActivityTestRule.kt
@@ -0,0 +1,44 @@
+/*
+ * 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.appcompat.testutils
+
+import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatDelegate
+import androidx.appcompat.app.LocalesUpdateActivity
+import androidx.appcompat.testutils.LocalesUtils.initCustomLocaleList
+import androidx.core.os.LocaleListCompat
+
+@Suppress("DEPRECATION")
+class LocalesActivityTestRule<T : AppCompatActivity>(
+    activityClazz: Class<T>,
+    initialTouchMode: Boolean = false,
+    launchActivity: Boolean = true
+) : androidx.test.rule.ActivityTestRule<T>(activityClazz, initialTouchMode, launchActivity) {
+    override fun beforeActivityLaunched() {
+        initCustomLocaleList()
+        // By default we'll set the locales to match system locales, which allows us to make better
+        // assumptions in the test below.
+        runOnUiThread {
+            AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+        }
+    }
+
+    override fun afterActivityFinished() {
+        // Reset locales persisted in static storage.
+        LocalesUpdateActivity.teardown()
+    }
+}
\ No newline at end of file
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesUtils.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesUtils.kt
new file mode 100644
index 0000000..36dd7ea
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesUtils.kt
@@ -0,0 +1,165 @@
+/*
+ * 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.appcompat.testutils
+
+import android.content.Context
+import android.content.res.Configuration
+import android.os.Build
+import android.util.Log
+import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatDelegate
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.testutils.LifecycleOwnerUtils
+import androidx.testutils.PollingCheck
+import java.util.Locale
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotEquals
+
+object LocalesUtils {
+    private const val LOG_TAG = "LocalesUtils"
+
+    /**
+     * A test {@link LocaleListCompat} containing locales [CANADA_FRENCH, CHINESE].
+     */
+    var CUSTOM_LOCALE_LIST: LocaleListCompat = LocaleListCompat.getEmptyLocaleList()
+
+    fun initCustomLocaleList() {
+        if (Build.VERSION.SDK_INT >= 24) {
+            CUSTOM_LOCALE_LIST = LocaleListCompat.forLanguageTags(
+                Locale.CANADA_FRENCH.toLanguageTag() + "," +
+                    Locale.CHINESE.toLanguageTag()
+            )
+        } else {
+            CUSTOM_LOCALE_LIST = LocaleListCompat.create(Locale.CHINESE)
+        }
+    }
+
+    fun assertConfigurationLocalesEquals(
+        expectedLocales: LocaleListCompat,
+        context: Context
+    ) {
+        assertConfigurationLocalesEquals(
+            null,
+            expectedLocales,
+            context
+        )
+    }
+
+    fun assertConfigurationLocalesEquals(
+        message: String?,
+        expectedLocales: LocaleListCompat,
+        context: Context
+    ) {
+        assertConfigurationLocalesEquals(
+            message,
+            expectedLocales,
+            context.resources.configuration
+        )
+    }
+
+    fun assertConfigurationLocalesEquals(
+        expectedLocales: LocaleListCompat,
+        configuration: Configuration
+    ) {
+        assertConfigurationLocalesEquals(
+            null,
+            expectedLocales,
+            configuration
+        )
+    }
+
+    fun assertConfigurationLocalesEquals(
+        message: String?,
+        expectedLocales: LocaleListCompat,
+        configuration: Configuration
+    ) {
+        if (Build.VERSION.SDK_INT >= 24) {
+            assertEquals(
+                message,
+                expectedLocales.toLanguageTags(),
+                configuration.locales.toLanguageTags()
+            )
+        } else {
+            assertEquals(
+                message,
+                expectedLocales.get(0),
+                @Suppress("DEPRECATION") configuration.locale
+            )
+        }
+    }
+
+    fun <T : AppCompatActivity> setLocalesAndWait(
+        @Suppress("DEPRECATION") activityRule: androidx.test.rule.ActivityTestRule<T>,
+        locales: LocaleListCompat
+    ) {
+        setLocalesAndWait(activityRule.activity, activityRule, locales)
+    }
+
+    fun <T : AppCompatActivity> setLocalesAndWait(
+        activity: AppCompatActivity?,
+        @Suppress("DEPRECATION") activityRule: androidx.test.rule.ActivityTestRule<T>,
+        locales: LocaleListCompat
+    ) {
+        Log.d(
+            LOG_TAG,
+            "setLocalesAndWait on Activity: " + activity +
+                " to locales: " + locales
+        )
+
+        val instrumentation = InstrumentationRegistry.getInstrumentation()
+        activityRule.runOnUiThread { setLocales(locales) }
+        instrumentation.waitForIdleSync()
+    }
+
+    fun <T : AppCompatActivity> setLocalesAndWaitForRecreate(
+        @Suppress("DEPRECATION") activityRule: androidx.test.rule.ActivityTestRule<T>,
+        locales: LocaleListCompat
+    ): T = setLocalesAndWaitForRecreate(activityRule.activity, locales)
+
+    fun <T : AppCompatActivity> setLocalesAndWaitForRecreate(
+        activity: T,
+        locales: LocaleListCompat
+    ): T {
+        Log.d(
+            LOG_TAG,
+            "setLocalesAndWaitForRecreate on Activity: " + activity +
+                " to mode: " + locales
+        )
+
+        LifecycleOwnerUtils.waitUntilState(activity, Lifecycle.State.RESUMED)
+
+        // Screen rotation kicks off a lot of background work, so we might need to wait a bit
+        // between the activity reaching RESUMED state and it actually being shown on screen.
+        PollingCheck.waitFor {
+            activity.hasWindowFocus()
+        }
+        assertNotEquals(locales, getLocales())
+
+        // Now perform locales change and wait for the Activity to be recreated.
+        return LifecycleOwnerUtils.waitForRecreation(activity) {
+            setLocales(locales)
+        }
+    }
+
+    fun setLocales(
+        locales: LocaleListCompat
+    ) = AppCompatDelegate.setApplicationLocales(locales)
+
+    private fun getLocales(): LocaleListCompat = AppCompatDelegate.getApplicationLocales()
+}
\ No newline at end of file
diff --git a/appcompat/appcompat/src/androidTest/res/layout/activity_locales.xml b/appcompat/appcompat/src/androidTest/res/layout/activity_locales.xml
new file mode 100644
index 0000000..cbbdf80
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/res/layout/activity_locales.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  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.
+  -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/text_locales"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="locales" />
+
+    <WebView
+        android:id="@+id/webView"
+        android:layout_width="match_parent"
+        android:layout_height="100dp"
+        android:layout_gravity="bottom" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/appcompat/appcompat/src/androidTest/res/values/styles.xml b/appcompat/appcompat/src/androidTest/res/values/styles.xml
index 73afe40..0b540bf 100644
--- a/appcompat/appcompat/src/androidTest/res/values/styles.xml
+++ b/appcompat/appcompat/src/androidTest/res/values/styles.xml
@@ -25,6 +25,15 @@
         <item name="android:windowContentOverlay">@null</item>
     </style>
 
+    <style name="Theme.AppCompatNoDisplay" parent="@style/Theme.AppCompat">
+        <item name="android:windowBackground">@null</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <item name="android:windowIsTranslucent">true</item>
+        <item name="android:windowAnimationStyle">@null</item>
+        <item name="android:windowDisablePreview">true</item>
+        <item name="android:windowNoDisplay">true</item>
+    </style>
+
     <style name="Theme.TextColors" parent="@style/Theme.AppCompat.Light">
         <item name="android:textColorPrimary">#FF0000FF</item>
         <item name="android:textColorSecondary">@color/color_state_list_sand</item>
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
index 5ce91f2..a81cb3c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
@@ -45,6 +45,7 @@
 import androidx.core.app.ActivityCompat;
 import androidx.core.app.NavUtils;
 import androidx.core.app.TaskStackBuilder;
+import androidx.core.os.LocaleListCompat;
 import androidx.fragment.app.FragmentActivity;
 import androidx.lifecycle.ViewTreeLifecycleOwner;
 import androidx.lifecycle.ViewTreeViewModelStoreOwner;
@@ -664,4 +665,13 @@
      */
     protected void onNightModeChanged(@NightMode int mode) {
     }
+
+    /**
+     * Called when the locales have been changed. See {@link AppCompatDelegate#applyAppLocales()}
+     * for more information.
+     *
+     * @param locales the localeListCompat which has been applied
+     */
+    protected void onLocalesChanged(@NonNull LocaleListCompat locales) {
+    }
 }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
index fc04398..b6944ba 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
@@ -17,32 +17,48 @@
 package androidx.appcompat.app;
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
+import static androidx.appcompat.app.AppLocalesStorageHelper.persistLocales;
+import static androidx.appcompat.app.AppLocalesStorageHelper.readLocales;
+import static androidx.appcompat.app.AppLocalesStorageHelper.syncLocalesToFramework;
+
+import static java.util.Objects.requireNonNull;
 
 import android.app.Activity;
 import android.app.Dialog;
+import android.app.LocaleManager;
 import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
 import android.content.res.Configuration;
 import android.os.Bundle;
+import android.os.LocaleList;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.MenuInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
+import android.window.OnBackInvokedDispatcher;
 
+import androidx.annotation.AnyThread;
 import androidx.annotation.CallSuper;
+import androidx.annotation.DoNotInline;
 import androidx.annotation.IdRes;
 import androidx.annotation.IntDef;
 import androidx.annotation.LayoutRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StyleRes;
+import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.view.ActionMode;
 import androidx.appcompat.widget.Toolbar;
 import androidx.appcompat.widget.VectorEnabledTintResources;
 import androidx.collection.ArraySet;
+import androidx.core.os.BuildCompat;
+import androidx.core.os.LocaleListCompat;
 import androidx.core.view.WindowCompat;
 import androidx.fragment.app.FragmentActivity;
 
@@ -95,6 +111,10 @@
     static final boolean DEBUG = false;
     static final String TAG = "AppCompatDelegate";
 
+    static AppLocalesStorageHelper.SerialExecutor sSerialExecutorForLocalesStorage = new
+            AppLocalesStorageHelper.SerialExecutor(
+                    new AppLocalesStorageHelper.ThreadPerTaskExecutor());
+
     /**
      * Mode which uses the system's night mode setting to determine if it is night or not.
      *
@@ -165,6 +185,13 @@
     @NightMode
     private static int sDefaultNightMode = MODE_NIGHT_UNSPECIFIED;
 
+    private static LocaleListCompat sRequestedAppLocales = null;
+    private static LocaleListCompat sStoredAppLocales = null;
+    private static Boolean sIsAutoStoreLocalesOptedIn = null;
+    private static boolean sIsFrameworkSyncChecked = false;
+    private static Object sLocaleManager = null;
+    private static Context sAppContext = null;
+
     /**
      * All AppCompatDelegate instances associated with a "live" Activity, e.g. lifecycle state is
      * post-onCreate and pre-onDestroy. These instances are used to instrument night mode's uiMode
@@ -173,6 +200,7 @@
     private static final ArraySet<WeakReference<AppCompatDelegate>> sActivityDelegates =
             new ArraySet<>();
     private static final Object sActivityDelegatesLock = new Object();
+    private static final Object sAppLocalesStorageSyncLock = new Object();
 
     /** @hide */
     @SuppressWarnings("deprecation")
@@ -521,6 +549,47 @@
     public abstract boolean applyDayNight();
 
     /**
+     * Sets the {@link OnBackInvokedDispatcher} for handling system back for Android SDK 33 and
+     * above.
+     * <p>
+     * If the delegate is hosted by an {@link Activity}, the default dispatcher is obtained via
+     * {@link Activity#getOnBackInvokedDispatcher()}.
+     *
+     * @param dispatcher the OnBackInvokedDispatcher to be set on this delegate, or {@code null}
+     *                   to use the default dispatcher
+     */
+    @CallSuper
+    @RequiresApi(33)
+    public void setOnBackInvokedDispatcher(@Nullable OnBackInvokedDispatcher dispatcher) {
+        // Stub.
+    }
+
+    /**
+     * Applies the current locales to this delegate's host component.
+     *
+     * <p>Apps can be notified when the locales are changed by overriding the
+     * {@link AppCompatActivity#onLocalesChanged(LocaleListCompat)} method.</p>
+     *
+     * <p>This is a default implementation and it is overridden atin
+     * {@link AppCompatDelegateImpl#applyAppLocales()} </p>
+     *
+     * @see #setApplicationLocales(LocaleListCompat)
+     *
+     * @return true if requested app-specific locales were applied, false if not.
+     */
+    boolean applyAppLocales() {
+        return false;
+    }
+
+    /**
+     * Returns the context for the current delegate.
+     */
+    @Nullable
+    public Context getContextForDelegate() {
+        return null;
+    }
+
+    /**
      * Override the night mode used for this delegate's host component.
      *
      * <p>When setting a mode to be used across an entire app, the
@@ -595,6 +664,120 @@
     }
 
     /**
+     * Sets the current locales for the calling app.
+     *
+     * <p>If this method is called after any host components with attached
+     * {@link AppCompatDelegate}s have been 'created', a {@link LocaleList} configuration
+     * change will occur in each. This may result in those components being recreated, depending
+     * on their manifest configuration.</p>
+     *
+     * <p>This method accepts {@link LocaleListCompat} as an input parameter.</p>
+     *
+     * <p>Apps should continue to read Locales via their in-process {@link LocaleList}s.</p>
+     *
+     * <p>Pass a {@link LocaleListCompat#getEmptyLocaleList()} to reset to the system locale.</p>
+     *
+     * <p><b>Note: This API should always be called after Activity.onCreate(), apart from any
+     * exceptions explicitly mentioned in this documentation.</b></p>
+     *
+     * <p>On API level 33 and above, this API will handle storage automatically.</p>
+     *
+     * <p>For API levels below that, the developer has two options:</p>
+     * <ul>
+     *     <li>They can opt-in to automatic storage handled through the library. They can do this by
+     *     adding a special metaData entry in their {@code AndroidManifest.xml}, similar to :
+     *     <pre><code>
+     *     &lt;service
+     *         android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
+     *         android:enabled="false"
+     *         android:exported="false"&gt;
+     *         &lt;meta-data
+     *             android:name="autoStoreLocales"
+     *             android:value="true" /&gt;
+     *     &lt;/service&gt;
+     *     </code></pre>
+     *     They should be mindful that this will cause a blocking diskRead and diskWrite
+     *     strictMode violation, and they might need to suppress it at their end.</li>
+     *
+     *     <li>The second option is that they can choose to handle storage themselves. In order to
+     *     do so they must use this API to initialize locales during app-start up and provide
+     *     their stored locales. In this case, API should be called before Activity.onCreate()
+     *     in the activity lifecycle, e.g. in attachBaseContext().
+     *     <b>Note: Developers should gate this to API versions < 33.</b>
+     *     <p><b>This API should be called after Activity.onCreate() for all other cases.</b></p>
+     *     </li>
+     * </ul>
+     *
+     * <p>When the application using this API with API versions < 33 updates to a
+     * version >= 33, then there can be two scenarios for this transition:
+     * <ul>
+     *     <li>If the developer has opted-in for autoStorage then the locales will be automatically
+     *     synced to the framework. Developers must specify android:enabled="false" for the
+     *     AppLocalesMetadataHolderService as shown in the meta-data entry above.</li>
+     *     <li>If the developer has not opted-in for autoStorage then they will need to handle
+     *     this transition on their end.</li>
+     * </ul>
+     *
+     * @param locales a list of locales.
+     */
+    @OptIn(markerClass = androidx.core.os.BuildCompat.PrereleaseSdkCheck.class)
+    public static void setApplicationLocales(@NonNull LocaleListCompat locales) {
+        requireNonNull(locales);
+        if (BuildCompat.isAtLeastT()) {
+            // If the API version is 33 (version for T) or above we want to redirect the call to
+            // the framework API.
+            Object localeManager = getLocaleManagerForApplication();
+            if (localeManager != null) {
+                Api33Impl.localeManagerSetApplicationLocales(localeManager,
+                        Api24Impl.localeListForLanguageTags(locales.toLanguageTags()));
+            }
+        } else {
+            if (DEBUG) {
+                Log.d(TAG, String.format("sRequestedAppLocales. New:%s, Current:%s",
+                        locales, sRequestedAppLocales));
+            }
+            if (!locales.equals(sRequestedAppLocales)) {
+                synchronized (sActivityDelegatesLock) {
+                    sRequestedAppLocales = locales;
+                    applyLocalesToActiveDelegates();
+                }
+            } else if (DEBUG) {
+                Log.d(TAG, String.format("Not applying changes, sRequestedAppLocales is already %s",
+                        locales));
+            }
+        }
+    }
+
+    /**
+     * Returns application locales for the calling app as a {@link LocaleListCompat}.
+     *
+     * <p>Returns a {@link LocaleListCompat#getEmptyLocaleList()} if no app-specific locales are
+     * set.
+     *
+     * <p><b>Note: This API should always be called after Activity.onCreate().</b></p>
+     */
+    @AnyThread
+    @NonNull
+    @OptIn(markerClass = androidx.core.os.BuildCompat.PrereleaseSdkCheck.class)
+    public static LocaleListCompat getApplicationLocales() {
+        if (BuildCompat.isAtLeastT()) {
+            // If the API version is 33 or above we want to redirect the call to the framework API.
+            Object localeManager = getLocaleManagerForApplication();
+            if (localeManager != null) {
+                return LocaleListCompat.wrap(Api33Impl.localeManagerGetApplicationLocales(
+                        localeManager));
+            }
+        } else {
+            if (sRequestedAppLocales != null) {
+                // If app-specific locales exists then sRequestedApplicationLocales contains the
+                // latest locales.
+                return sRequestedAppLocales;
+            }
+        }
+        return LocaleListCompat.getEmptyLocaleList();
+    }
+
+    /**
      * Returns the default night mode.
      *
      * @see #setDefaultNightMode(int)
@@ -605,6 +788,183 @@
     }
 
     /**
+     * Returns the requested app locales.
+     *
+     * @see #setApplicationLocales(LocaleListCompat)
+     */
+    @Nullable
+    static LocaleListCompat getRequestedAppLocales() {
+        return sRequestedAppLocales;
+    }
+
+    /**
+     * Returns the stored app locales.
+     *
+     * @see #setApplicationLocales(LocaleListCompat)
+     */
+    @Nullable
+    static LocaleListCompat getStoredAppLocales() {
+        return sStoredAppLocales;
+    }
+
+    /**
+     * Resets the static variables for requested and stored locales to null. This method is used
+     * for testing as it mimics activity restart which is difficult to do in a test.
+     */
+    @VisibleForTesting
+    static void resetStaticRequestedAndStoredLocales() {
+        sRequestedAppLocales = null;
+        sStoredAppLocales = null;
+    }
+
+    /**
+     * Sets {@link AppCompatDelegate#sIsAutoStoreLocalesOptedIn} to the provided value. This method
+     * is used for testing, setting sIsAutoStoreLocalesOptedIn to true mimics adding an opt-in
+     * "autoStoreLocales" meta-data entry.
+     *
+     * see {@link AppCompatDelegate#setApplicationLocales(LocaleListCompat)}.
+     */
+    @VisibleForTesting
+    static void setIsAutoStoreLocalesOptedIn(boolean isAutoStoreLocalesOptedIn) {
+        sIsAutoStoreLocalesOptedIn = isAutoStoreLocalesOptedIn;
+    }
+
+    /**
+     * Returns the localeManager for the current application using active delegates to fetch
+     * context, returns null if no active delegates present.
+     */
+    @RequiresApi(33)
+    static Object getLocaleManagerForApplication() {
+        if (sLocaleManager != null) {
+            return sLocaleManager;
+        }
+        // Traversing through the active delegates to retrieve context for any one non null
+        // delegate.
+        // This context is used to create a localeManager which is saved as a static variable to
+        // reduce multiple object creation for different activities.
+        if (sAppContext == null) {
+            for (WeakReference<AppCompatDelegate> activeDelegate : sActivityDelegates) {
+                final AppCompatDelegate delegate = activeDelegate.get();
+                if (delegate != null) {
+                    Context context = delegate.getContextForDelegate();
+                    if (context != null) {
+                        sAppContext = context;
+                        break;
+                    }
+                }
+            }
+        }
+
+        if (sAppContext != null) {
+            sLocaleManager = sAppContext.getSystemService(Context.LOCALE_SERVICE);
+        }
+        return sLocaleManager;
+    }
+
+    /**
+     * Returns true is the "autoStoreLocales" metaData is marked true in the app manifest.
+     */
+    static boolean isAutoStorageOptedIn(Context context) {
+        if (sIsAutoStoreLocalesOptedIn == null) {
+            try {
+                ServiceInfo serviceInfo = AppLocalesMetadataHolderService.getServiceInfo(
+                        context);
+                if (serviceInfo.metaData != null) {
+                    sIsAutoStoreLocalesOptedIn = serviceInfo.metaData.getBoolean(
+                            /* key= */ "autoStoreLocales");
+                }
+            } catch (PackageManager.NameNotFoundException e) {
+                Log.d(TAG, "Checking for metadata for AppLocalesMetadataHolderService "
+                        + ": Service not found");
+                sIsAutoStoreLocalesOptedIn = false;
+            }
+        }
+        return sIsAutoStoreLocalesOptedIn;
+    }
+
+    /**
+     * Executes {@link AppCompatDelegate#syncRequestedAndStoredLocales(Context)} asynchronously
+     * on a worker thread, serialized using {@link
+     * AppCompatDelegate#sSerialExecutorForLocalesStorage}.
+     *
+     * <p>This is done to perform the storage read operation without blocking the main thread.</p>
+     */
+    void asyncExecuteSyncRequestedAndStoredLocales(Context context) {
+        sSerialExecutorForLocalesStorage.execute(() -> syncRequestedAndStoredLocales(context));
+    }
+
+    /**
+     * Syncs requested and persisted app-specific locales.
+     *
+     * <p>This sync is only performed if the developer has opted in to use the autoStoredLocales
+     * feature, marked by the metaData "autoStoreLocales" wrapped in the service
+     * "AppLocalesMetadataHolderService". If the metaData is not found in the manifest or holds
+     * the value false then we return from this function without doing anything. If the metaData
+     * is set to true, then we perform a sync for app-locales.</p>
+     *
+     * <p>If the API version is >=33, then the storage is checked for app-specific locales, if
+     * found they are synced to the framework by calling the
+     * {@link AppCompatDelegate#setApplicationLocales(LocaleListCompat)}</p>
+     *
+     * <p>If the API version is <33, then there are two scenarios:</p>
+     * <ul>
+     * <li>If the requestedAppLocales are not set then the app-specific locales are read from
+     * storage. If persisted app-specific locales are found then they are used to
+     * update the requestedAppLocales.</li>
+     * <li>If the requestedAppLocales are populated and are different from the stored locales
+     * then in that case the requestedAppLocales are stored and the static variable for
+     * storedAppLocales is updated accordingly.</li>
+     * </ul>
+     */
+    @OptIn(markerClass = androidx.core.os.BuildCompat.PrereleaseSdkCheck.class)
+    static void syncRequestedAndStoredLocales(Context context) {
+        if (!isAutoStorageOptedIn(context)) {
+            return;
+        } else if (BuildCompat.isAtLeastT()) {
+            // TODO: After BuildCompat.isAtLeast() is deprecated, the above condition needs to be
+            //  replaced by (Build.VERSION.SDK_INT == 33).
+            if (!sIsFrameworkSyncChecked) {
+                // syncs locales from androidX to framework, it only happens once after the
+                // device is updated to T (API version 33).
+                sSerialExecutorForLocalesStorage.execute(() -> {
+                    syncLocalesToFramework(context);
+                    sIsFrameworkSyncChecked = true;
+                });
+            }
+        } else {
+            synchronized (sAppLocalesStorageSyncLock) {
+                if (sRequestedAppLocales == null) {
+                    if (sStoredAppLocales == null) {
+                        sStoredAppLocales =
+                                LocaleListCompat.forLanguageTags(readLocales(context));
+                    }
+                    if (sStoredAppLocales.isEmpty()) {
+                        // if both requestedLocales and storedLocales not set, then the user has not
+                        // specified any application-specific locales. So no alterations in current
+                        // application locales should take place.
+                        return;
+                    }
+                    sRequestedAppLocales = sStoredAppLocales;
+                } else if (!sRequestedAppLocales.equals(sStoredAppLocales)) {
+                    // if requestedLocales is set and is not equal to the storedLocales then in this
+                    // case we need to store these locales in storage.
+                    sStoredAppLocales = sRequestedAppLocales;
+                    persistLocales(context, sRequestedAppLocales.toLanguageTags());
+                }
+            }
+        }
+    }
+
+
+    /**
+     * Sets the value for {@link AppCompatDelegate#sAppContext} which is the context for the
+     * current application.
+     */
+    static void setAppContext(Context context) {
+        sAppContext = context;
+    }
+
+    /**
      * Sets whether vector drawables on older platforms (< API 21) can be used within
      * {@link android.graphics.drawable.DrawableContainer} resources.
      *
@@ -695,4 +1055,48 @@
             }
         }
     }
+
+    private static void applyLocalesToActiveDelegates() {
+        for (WeakReference<AppCompatDelegate> activeDelegate : sActivityDelegates) {
+            final AppCompatDelegate delegate = activeDelegate.get();
+            if (delegate != null) {
+                if (DEBUG) {
+                    Log.d(TAG, "applyLocalesToActiveDelegates. Applying to " + delegate);
+                }
+                delegate.applyAppLocales();
+            }
+        }
+    }
+
+    @RequiresApi(24)
+    static class Api24Impl {
+        private Api24Impl() {
+            // This class is not instantiable.
+        }
+
+        @DoNotInline
+        static LocaleList localeListForLanguageTags(String list) {
+            return LocaleList.forLanguageTags(list);
+        }
+    }
+
+    @RequiresApi(33)
+    static class Api33Impl {
+        private Api33Impl() {
+            // This class is not instantiable.
+        }
+
+        @DoNotInline
+        static void localeManagerSetApplicationLocales(Object localeManager,
+                LocaleList locales) {
+            LocaleManager mLocaleManager = (LocaleManager) localeManager;
+            mLocaleManager.setApplicationLocales(locales);
+        }
+
+        @DoNotInline
+        static LocaleList localeManagerGetApplicationLocales(Object localeManager) {
+            LocaleManager mLocaleManager = (LocaleManager) localeManager;
+            return mLocaleManager.getApplicationLocales();
+        }
+    }
 }
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 09c00d772..9a367b3 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
@@ -24,6 +24,7 @@
 import static android.view.Window.FEATURE_OPTIONS_PANEL;
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+import static androidx.appcompat.app.LocaleOverlayHelper.combineLocalesIfOverlayExists;
 
 import android.annotation.SuppressLint;
 import android.app.Activity;
@@ -73,8 +74,11 @@
 import android.widget.FrameLayout;
 import android.widget.PopupWindow;
 import android.widget.TextView;
+import android.window.OnBackInvokedCallback;
+import android.window.OnBackInvokedDispatcher;
 
 import androidx.annotation.CallSuper;
+import androidx.annotation.DoNotInline;
 import androidx.annotation.IdRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -109,6 +113,7 @@
 import androidx.core.app.NavUtils;
 import androidx.core.content.ContextCompat;
 import androidx.core.content.res.ResourcesCompat;
+import androidx.core.os.LocaleListCompat;
 import androidx.core.util.ObjectsCompat;
 import androidx.core.view.KeyEventDispatcher;
 import androidx.core.view.LayoutInflaterCompat;
@@ -125,6 +130,7 @@
 import org.xmlpull.v1.XmlPullParser;
 
 import java.util.List;
+import java.util.Locale;
 
 /**
  * @hide
@@ -258,9 +264,8 @@
     private int mLocalNightMode = MODE_NIGHT_UNSPECIFIED;
 
     private int mThemeResId;
-    private boolean mActivityHandlesUiMode;
-    private boolean mActivityHandlesUiModeChecked;
-
+    private int mActivityHandlesConfigFlags;
+    private boolean mActivityHandlesConfigFlagsChecked;
     private AutoNightModeManager mAutoTimeNightModeManager;
     private AutoNightModeManager mAutoBatteryNightModeManager;
 
@@ -287,6 +292,8 @@
 
     private AppCompatViewInflater mAppCompatViewInflater;
     private LayoutIncludeDetector mLayoutIncludeDetector;
+    private OnBackInvokedDispatcher mDispatcher;
+    private OnBackInvokedCallback mBackCallback;
 
     AppCompatDelegateImpl(Activity activity, AppCompatCallback callback) {
         this(activity, null, callback, activity);
@@ -342,6 +349,39 @@
         AppCompatDrawableManager.preload();
     }
 
+    @Override
+    @RequiresApi(33)
+    public void setOnBackInvokedDispatcher(@Nullable OnBackInvokedDispatcher dispatcher) {
+        super.setOnBackInvokedDispatcher(dispatcher);
+
+        // Clean up the callback on the previous dispatcher, if necessary.
+        if (mDispatcher != null && mBackCallback != null) {
+            Api33Impl.unregisterOnBackInvokedCallback(mDispatcher, mBackCallback);
+            mBackCallback = null;
+        }
+
+        if (dispatcher == null && mHost instanceof Activity
+                && ((Activity) mHost).getWindow() != null) {
+            mDispatcher = Api33Impl.getOnBackInvokedDispatcher((Activity) mHost);
+        } else {
+            mDispatcher = dispatcher;
+        }
+
+        // Register a callback on the new dispatcher, if necessary.
+        updateBackInvokedCallbackState();
+    }
+
+    void updateBackInvokedCallbackState() {
+        if (Build.VERSION.SDK_INT >= 33) {
+            boolean shouldRegister = shouldRegisterBackInvokedCallback();
+            if (shouldRegister && mBackCallback == null) {
+                mBackCallback = Api33Impl.registerOnBackPressedCallback(mDispatcher, this);
+            } else if (!shouldRegister && mBackCallback != null) {
+                Api33Impl.unregisterOnBackInvokedCallback(mDispatcher, mBackCallback);
+            }
+        }
+    }
+
     @NonNull
     @Override
     @CallSuper
@@ -360,13 +400,22 @@
 
         final int modeToApply = mapNightMode(baseContext, calculateNightMode());
 
+        if (isAutoStorageOptedIn(baseContext)) {
+            // If the developer has opted in to auto store the locales, then we use
+            // syncRequestedAndStoredLocales() to load the saved locales from storage. This is
+            // performed only during cold app start-ups because in other cases the locales can be
+            // found in the static storage.
+            syncRequestedAndStoredLocales(baseContext);
+        }
+        final LocaleListCompat localesToApply = calculateApplicationLocales(baseContext);
+
         // If the base context is a ContextThemeWrapper (thus not an Application context)
         // and nobody's touched its Resources yet, we can shortcut and directly apply our
         // override configuration.
         if (sCanApplyOverrideConfiguration
                 && baseContext instanceof android.view.ContextThemeWrapper) {
-            final Configuration config = createOverrideConfigurationForDayNight(
-                    baseContext, modeToApply, null, false);
+            final Configuration config = createOverrideAppConfiguration(
+                    baseContext, modeToApply, localesToApply, null, false);
             if (DEBUG) {
                 Log.d(TAG, String.format("Attempting to apply config to base context: %s",
                         config.toString()));
@@ -385,8 +434,8 @@
 
         // Again, but using the AppCompat version of ContextThemeWrapper.
         if (baseContext instanceof ContextThemeWrapper) {
-            final Configuration config = createOverrideConfigurationForDayNight(
-                    baseContext, modeToApply, null, false);
+            final Configuration config = createOverrideAppConfiguration(
+                    baseContext, modeToApply, localesToApply, null, false);
             if (DEBUG) {
                 Log.d(TAG, String.format("Attempting to apply config to base context: %s",
                         config.toString()));
@@ -442,8 +491,8 @@
             }
         }
 
-        final Configuration config = createOverrideConfigurationForDayNight(
-                baseContext, modeToApply, configOverlay, true);
+        final Configuration config = createOverrideAppConfiguration(
+                baseContext, modeToApply, localesToApply, configOverlay, true);
         if (DEBUG) {
             Log.d(TAG, String.format("Applying night mode using ContextThemeWrapper and "
                     + "applyOverrideConfiguration(). Config: %s", config.toString()));
@@ -497,9 +546,9 @@
         // Dialogs, etc
         mBaseContextAttached = true;
 
-        // Our implicit call to applyDayNight() should not recreate until after the Activity is
-        // created
-        applyDayNight(false);
+        // Our implicit call to applyApplicationSpecificConfig() should not recreate
+        // until after the Activity is created
+        applyApplicationSpecificConfig(false);
 
         // We lazily fetch the Window for Activities, to allow DayNight to apply in
         // attachBaseContext
@@ -599,6 +648,8 @@
             mActionBar = tbab;
             // Set the nested action bar window callback so that it receive menu events
             mAppCompatWindowCallback.setActionBarCallback(tbab.mMenuCallback);
+            // Toolbars managed by AppCompat should handle their own back invocations.
+            toolbar.setBackInvokedCallbackEnabled(true);
         } else {
             // Clear the nested action bar window callback
             mAppCompatWindowCallback.setActionBarCallback(null);
@@ -661,9 +712,19 @@
         // inspects the last-seen configuration. Otherwise, we'll recurse back to this method.
         mEffectiveConfiguration = new Configuration(mContext.getResources().getConfiguration());
 
-        // Re-apply Day/Night with the new configuration but disable recreations. Since this
-        // configuration change has only just happened we can safely just update the resources now
-        applyDayNight(false);
+        // Re-apply Day/Night with the new configuration but disable recreations.
+        // Since this configuration change has only just happened we can safely just update the
+        // resources now.
+        // For locales, no re-application is required since locales must have already been applied
+        // to the configuration when AppCompatDelegate.setApplicationLocales() is called.
+        // Also, in the case where an invalid locale is passed at the top position in the input
+        // locales, framework re-adjusts the list to bring forward the most suitable locale in
+        // the configuration. Therefore if we apply the new locales here again, the code will get
+        // stuck in a loop of attempted re-application since the configuration locales are never
+        // the same as we applied. The same thing is valid during the case when configChanges are
+        // handled by the application.
+        applyApplicationSpecificConfig(false,
+                /* isLocalesApplicationRequired */ false);
 
         // We may have just changed the resource configuration. Make sure that everyone after us
         // sees the same configuration by modifying the parameter's internal state.
@@ -673,8 +734,16 @@
     @Override
     public void onStart() {
         // This will apply day/night if the time has changed, it will also call through to
-        // setupAutoNightModeIfNeeded()
-        applyDayNight();
+        // setupAutoNightModeIfNeeded().
+        // For locales, no re-application is required since the requested locales must have
+        // already been updated before this point in activity lifecycle.
+        // Also, in the case where an invalid locale is passed at the top position in the input
+        // locales, framework re-adjusts the list to bring forward the most suitable locale in
+        // the configuration. Therefore if we apply the new locales here again, the code will get
+        // stuck in a loop of attempted re-application since the configuration locales are never
+        // the same as we applied.
+        applyApplicationSpecificConfig(true,
+                /* isLocalesApplicationRequired */false);
     }
 
     @Override
@@ -812,6 +881,11 @@
         a.recycle();
 
         mWindow = window;
+
+        // Obtain a default dispatcher, if we still need one.
+        if (Build.VERSION.SDK_INT >= 33 && mDispatcher == null) {
+            setOnBackInvokedDispatcher(null);
+        }
     }
 
     private void ensureSubDecor() {
@@ -1222,6 +1296,9 @@
             mActionMode = startSupportActionModeFromWindow(wrappedCallback);
         }
 
+        // mActionMode changed.
+        updateBackInvokedCallbackState();
+
         return mActionMode;
     }
 
@@ -1376,6 +1453,10 @@
         if (mActionMode != null && mAppCompatCallback != null) {
             mAppCompatCallback.onSupportActionModeStarted(mActionMode);
         }
+
+        // mActionMode changed.
+        updateBackInvokedCallbackState();
+
         return mActionMode;
     }
 
@@ -1401,7 +1482,50 @@
         }
     }
 
+    /**
+     * Computes whether the delegate should intercept back invocations.
+     * <p>
+     * This method must be kept in sync with {@link #onBackPressed()}. If any of the properties
+     * observed by this method change, we must call {@link #updateBackInvokedCallbackState()}.
+     */
+    boolean shouldRegisterBackInvokedCallback() {
+        if (mDispatcher == null) {
+            return false;
+        }
+
+        PanelFeatureState st = getPanelState(Window.FEATURE_OPTIONS_PANEL, false);
+        if (st != null && st.isOpen) {
+            return true;
+        }
+
+        if (mActionMode != null) {
+            return true;
+        }
+
+        // Don't check canCollapseActionView() since the support
+        // action bar manages its own back invocation callback.
+        return false;
+    }
+
+    /**
+     * Handles back press, returning {@code true} if the press was handled.
+     * <p>
+     * This method must be kept in sync with {@link #shouldRegisterBackInvokedCallback()}.
+     */
     boolean onBackPressed() {
+        final boolean wasLongPressBackDown = mLongPressBackDown;
+        mLongPressBackDown = false;
+
+        // Certain devices allow opening the options menu via a long press of the back button. We
+        // should only close the open options menu if it wasn't opened via a long press gesture.
+        PanelFeatureState st = getPanelState(Window.FEATURE_OPTIONS_PANEL, false);
+        if (st != null && st.isOpen) {
+            if (!wasLongPressBackDown) {
+                closePanel(st, true);
+            }
+            return true;
+        }
+
         // Back cancels action modes first.
         if (mActionMode != null) {
             mActionMode.finish();
@@ -1484,19 +1608,6 @@
                 onKeyUpPanel(Window.FEATURE_OPTIONS_PANEL, event);
                 return true;
             case KeyEvent.KEYCODE_BACK:
-                final boolean wasLongPressBackDown = mLongPressBackDown;
-                mLongPressBackDown = false;
-
-                PanelFeatureState st = getPanelState(Window.FEATURE_OPTIONS_PANEL, false);
-                if (st != null && st.isOpen) {
-                    if (!wasLongPressBackDown) {
-                        // Certain devices allow opening the options menu via a long press of the
-                        // back button. We should only close the open options menu if it wasn't
-                        // opened via a long press gesture.
-                        closePanel(st, true);
-                    }
-                    return true;
-                }
                 if (onBackPressed()) {
                     return true;
                 }
@@ -1515,7 +1626,9 @@
                 return true;
             case KeyEvent.KEYCODE_BACK:
                 // Certain devices allow opening the options menu via a long press of the back
-                // button. We keep a record of whether the last event is from a long press.
+                // button. We keep a record of whether the last event is from a long press. On SDK
+                // 33 and above, back invocation handling may prevent us from receiving this event;
+                // however, devices running SDK 33 are unlikely to support this feature anyway.
                 mLongPressBackDown = (event.getFlags() & KeyEvent.FLAG_LONG_PRESS) != 0;
                 break;
         }
@@ -1742,6 +1855,11 @@
 
         wm.addView(st.decorView, lp);
         st.isOpen = true;
+
+        // st.isOpen for feature FEATURE_OPTIONS_PANEL changed.
+        if (st.featureId == Window.FEATURE_OPTIONS_PANEL) {
+            updateBackInvokedCallbackState();
+        }
     }
 
     private boolean initializePanelDecor(PanelFeatureState st) {
@@ -2011,6 +2129,11 @@
         if (mPreparedPanel == st) {
             mPreparedPanel = null;
         }
+
+        // st.isOpen for feature FEATURE_OPTIONS_PANEL changed.
+        if (st.featureId == Window.FEATURE_OPTIONS_PANEL) {
+            updateBackInvokedCallbackState();
+        }
     }
 
     private boolean onKeyDownPanel(int featureId, KeyEvent event) {
@@ -2373,15 +2496,50 @@
     }
 
     @Override
-    public boolean applyDayNight() {
-        return applyDayNight(true);
+    public Context getContextForDelegate() {
+        return mContext;
     }
 
+    @Override
+    public boolean applyDayNight() {
+        return applyApplicationSpecificConfig(true);
+    }
+
+    @Override
+    boolean applyAppLocales() {
+        // This method is only reached when there is an explicit call to setApplicationLocales().
+        if (isAutoStorageOptedIn(mContext)
+                && getRequestedAppLocales() != null
+                && !getRequestedAppLocales().equals(getStoredAppLocales())) {
+            // If the developer has opted in to autoStore the locales, we need to store the locales
+            // for the application here. This is done using the syncRequestedAndStoredLocales,
+            // called asynchronously on a worker thread.
+            asyncExecuteSyncRequestedAndStoredLocales(mContext);
+        }
+        return applyApplicationSpecificConfig(true);
+    }
+
+    /**
+     * Applies application configuration to the activity.
+     */
+    private boolean applyApplicationSpecificConfig(final boolean allowRecreation) {
+        return applyApplicationSpecificConfig(allowRecreation,
+                /* isLocalesApplicationRequired */ true);
+    }
+
+    /**
+     * Applies application configuration to the activity.
+     *
+     * <p>By passing appropriate values to the input parameter {@param isLocalesApplicationRequired}
+     * application of locales config on the current activity can be triggered or suppressed.</p>
+     */
     @SuppressWarnings("deprecation")
-    private boolean applyDayNight(final boolean allowRecreation) {
+    private boolean applyApplicationSpecificConfig(final boolean allowRecreation,
+            final boolean isLocalesApplicationRequired) {
         if (mDestroyed) {
             if (DEBUG) {
-                Log.d(TAG, "applyDayNight. Skipping because host is destroyed");
+                Log.d(TAG, "applyApplicationSpecificConfig. Skipping because host is "
+                        + "destroyed");
             }
             // If we're destroyed, ignore the call
             return false;
@@ -2389,7 +2547,23 @@
 
         @NightMode final int nightMode = calculateNightMode();
         @ApplyableNightMode final int modeToApply = mapNightMode(mContext, nightMode);
-        final boolean applied = updateForNightMode(modeToApply, allowRecreation);
+
+        LocaleListCompat localesToBeApplied = null;
+        if (Build.VERSION.SDK_INT < 33) {
+            localesToBeApplied = calculateApplicationLocales(mContext);
+        }
+
+        if (!isLocalesApplicationRequired && localesToBeApplied != null) {
+            // Reaching here would mean that the requested locales has already been applied and
+            // no modification is required. Hence, localesToBeApplied is kept same as the current
+            // configuration locales.
+            localesToBeApplied =
+                    getConfigurationLocales(mContext.getResources()
+                            .getConfiguration());
+        }
+
+        final boolean applied = updateAppConfiguration(modeToApply, localesToBeApplied,
+                allowRecreation);
 
         if (nightMode == MODE_NIGHT_AUTO_TIME) {
             getAutoTimeNightModeManager(mContext).setup();
@@ -2407,6 +2581,50 @@
         return applied;
     }
 
+    /**
+     * Returns the required {@link LocaleListCompat}  for the current application. This method
+     * checks for requested app-specific locales and returns them after an overlay
+     * with the system locales. If requested app-specific do not exist, it returns a null.
+     */
+    @Nullable
+    LocaleListCompat calculateApplicationLocales(@NonNull Context context) {
+        if (Build.VERSION.SDK_INT >= 33) {
+            return null;
+        }
+        LocaleListCompat requestedLocales = getRequestedAppLocales();
+        if (requestedLocales == null) {
+            return null;
+        }
+        LocaleListCompat systemLocales = getConfigurationLocales(
+                context.getApplicationContext()
+                        .getResources().getConfiguration());
+
+        LocaleListCompat localesToBeApplied;
+        if (Build.VERSION.SDK_INT >= 24) {
+            // For API>=24 the application locales are applied as a localeList. The localeList
+            // to be applied is an overlay of app-specific locales and the system locales.
+            localesToBeApplied = combineLocalesIfOverlayExists(requestedLocales,
+                    systemLocales);
+        } else {
+            // For API<24 the application does not have a localeList instead it has a single
+            // locale, which we have set as the locale with the highest preference i.e. the first
+            // one from the requested locales.
+            if (requestedLocales.isEmpty()) {
+                localesToBeApplied = LocaleListCompat.getEmptyLocaleList();
+            } else {
+                localesToBeApplied =
+                        LocaleListCompat.forLanguageTags(requestedLocales.get(0).toString());
+            }
+        }
+
+        if (localesToBeApplied.isEmpty()) {
+            // If the localesToBeApplied is empty, it implies that there are no app-specific locales
+            // set for this application and systemLocales should be followed.
+            localesToBeApplied = systemLocales;
+        }
+        return localesToBeApplied;
+    }
+
     @Override
     @RequiresApi(17)
     public void setLocalNightMode(@NightMode int mode) {
@@ -2465,9 +2683,38 @@
         return mLocalNightMode != MODE_NIGHT_UNSPECIFIED ? mLocalNightMode : getDefaultNightMode();
     }
 
+    void setConfigurationLocales(Configuration conf, @NonNull LocaleListCompat locales) {
+        if (Build.VERSION.SDK_INT >= 24) {
+            Api24Impl.setLocales(conf, locales);
+        } else if (Build.VERSION.SDK_INT >= 17) {
+            Api17Impl.setLocale(conf, locales.get(0));
+            Api17Impl.setLayoutDirection(conf, locales.get(0));
+        } else {
+            conf.locale = locales.get(0);
+        }
+    }
+
+    LocaleListCompat getConfigurationLocales(Configuration conf) {
+        if (Build.VERSION.SDK_INT >= 24) {
+            return Api24Impl.getLocales(conf);
+        } else if (Build.VERSION.SDK_INT >= 21) {
+            return LocaleListCompat.forLanguageTags(Api21Impl.toLanguageTag(conf.locale));
+        } else {
+            return LocaleListCompat.create(conf.locale);
+        }
+    }
+
+    void setDefaultLocalesForLocaleList(LocaleListCompat locales) {
+        if (Build.VERSION.SDK_INT >= 24) {
+            Api24Impl.setDefaultLocales(locales);
+        } else {
+            Locale.setDefault(locales.get(0));
+        }
+    }
+
     @NonNull
-    private Configuration createOverrideConfigurationForDayNight(
-            @NonNull Context context, @ApplyableNightMode final int mode,
+    private Configuration createOverrideAppConfiguration(@NonNull Context context,
+            @ApplyableNightMode int mode, @Nullable LocaleListCompat locales,
             @Nullable Configuration configOverlay, boolean ignoreFollowSystem) {
         int newNightMode;
         switch (mode) {
@@ -2502,43 +2749,76 @@
         overrideConf.uiMode = newNightMode
                 | (overrideConf.uiMode & ~Configuration.UI_MODE_NIGHT_MASK);
 
+        if (locales != null) {
+            setConfigurationLocales(overrideConf, locales);
+        }
         return overrideConf;
     }
 
     /**
-     * Updates the {@link Resources} configuration {@code uiMode} with the
-     * chosen {@code UI_MODE_NIGHT} value.
+     * Updates the {@link Resources} configuration {@code uiMode}  and {@Link LocaleList} with the
+     * chosen configuration values.
      *
-     * @param mode The new night mode to apply
+     * @param nightMode The new night mode to apply
+     * @param locales The new Locales to be applied
      * @param allowRecreation whether to attempt activity recreate
      * @return true if an action has been taken (recreation, resources updating, etc)
      */
-    private boolean updateForNightMode(@ApplyableNightMode final int mode,
-            final boolean allowRecreation) {
+    private boolean updateAppConfiguration(int nightMode, @Nullable LocaleListCompat
+            locales, final boolean allowRecreation) {
         boolean handled = false;
 
         final Configuration overrideConfig =
-                createOverrideConfigurationForDayNight(mContext, mode, null, false);
+                createOverrideAppConfiguration(mContext, nightMode, locales, null, false);
 
-        final boolean activityHandlingUiMode = isActivityManifestHandlingUiMode(mContext);
+        final int activityHandlingConfigChange = getActivityHandlesConfigChangesFlags(mContext);
         final Configuration currentConfiguration = mEffectiveConfiguration == null
                 ? mContext.getResources().getConfiguration() : mEffectiveConfiguration;
         final int currentNightMode = currentConfiguration.uiMode
                 & Configuration.UI_MODE_NIGHT_MASK;
         final int newNightMode = overrideConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
 
-        if (DEBUG) {
-            Log.d(TAG, String.format(
-                    "updateForNightMode [allowRecreation:%s, currentNightMode:%d, "
-                            + "newNightMode:%d, activityHandlingUiMode:%s, baseContextAttached:%s, "
-                            + "created:%s, canReturnDifferentContext:%s, host:%s]",
-                    allowRecreation, currentNightMode, newNightMode, activityHandlingUiMode,
-                    mBaseContextAttached, mCreated, sCanReturnDifferentContext, mHost));
+        final LocaleListCompat currentLocales = getConfigurationLocales(currentConfiguration);
+        final LocaleListCompat newLocales;
+        if (locales == null) {
+            newLocales = null;
+        } else {
+            newLocales = getConfigurationLocales(overrideConfig);
         }
 
-        if (currentNightMode != newNightMode
+        // Bitmask representing if there is a change in nightMode or Locales, mapped by bits
+        // ActivityInfo.CONFIG_UI_MODE and ActivityInfo.CONFIG_LOCALE respectively.
+        int configChanges = 0;
+        if (currentNightMode != newNightMode) {
+            configChanges |= ActivityInfo.CONFIG_UI_MODE;
+        }
+        if (newLocales != null && !currentLocales.equals(newLocales)) {
+            configChanges |= ActivityInfo.CONFIG_LOCALE;
+            if (Build.VERSION.SDK_INT >= 17) {
+                configChanges |= ActivityInfo.CONFIG_LAYOUT_DIRECTION;
+            }
+        }
+
+        if (DEBUG) {
+            Log.d(TAG, String.format(
+                    "updateAppConfiguration [allowRecreation:%s, "
+                            + "currentNightMode:%s, newNightMode:%s, currentLocales:%s, "
+                            + "newLocales:%s, activityHandlingNightModeChanges:%s, "
+                            + "activityHandlingLocalesChanges:%s, "
+                            + "activityHandlingLayoutDirectionChanges:%s, "
+                            + "baseContextAttached:%s, "
+                            + "created:%s, canReturnDifferentContext:%s, host:%s]",
+                    allowRecreation, currentNightMode, newNightMode,
+                    currentLocales,
+                    newLocales,
+                    ((activityHandlingConfigChange & ActivityInfo.CONFIG_UI_MODE) != 0),
+                    ((activityHandlingConfigChange & ActivityInfo.CONFIG_LOCALE) != 0),
+                    ((activityHandlingConfigChange & ActivityInfo.CONFIG_LAYOUT_DIRECTION) != 0),
+                    mBaseContextAttached, mCreated,
+                    sCanReturnDifferentContext, mHost));
+        }
+        if ((~activityHandlingConfigChange & configChanges) != 0
                 && allowRecreation
-                && !activityHandlingUiMode
                 && mBaseContextAttached
                 && (sCanReturnDifferentContext || mCreated)
                 && mHost instanceof Activity
@@ -2547,41 +2827,61 @@
             // attachBaseContext() + createConfigurationContext() code path.
             // Else, we need to use updateConfiguration() before we're 'created' (below)
             if (DEBUG) {
-                Log.d(TAG, "updateForNightMode attempting to recreate Activity: " + mHost);
+                Log.d(TAG, "updateAppConfiguration attempting to recreate Activity: "
+                        + mHost);
             }
             ActivityCompat.recreate((Activity) mHost);
             handled = true;
         } else if (DEBUG) {
-            Log.d(TAG, "updateForNightMode not recreating Activity: " + mHost);
+            Log.d(TAG, "updateAppConfiguration not recreating Activity: " + mHost);
         }
 
-        if (!handled && currentNightMode != newNightMode) {
+        if (!handled && (configChanges != 0)) {
             // Else we need to use the updateConfiguration path
             if (DEBUG) {
-                Log.d(TAG, "updateForNightMode. Updating resources config on host: " + mHost);
+                Log.d(TAG, "updateAppConfiguration. Updating resources config on host: "
+                        + mHost);
             }
-            updateResourcesConfigurationForNightMode(newNightMode, activityHandlingUiMode, null);
+            // If all the configurations that need to be altered are handled by the activity,
+            // only then callOnConfigChange is set to true.
+            updateResourcesConfiguration(newNightMode, newLocales,
+                    /* callOnConfigChange = */(configChanges & activityHandlingConfigChange)
+                            == configChanges, null);
+
             handled = true;
         }
 
         if (DEBUG && !handled) {
-            Log.d(TAG, "updateForNightMode. Skipping. Night mode: " + mode + " for host:" + mHost);
+            Log.d(TAG,
+                    "updateAppConfiguration. Skipping. nightMode: " + nightMode + " and "
+                            + "locales: " +  locales + " for host:" + mHost);
         }
 
-        // Notify the activity of the night mode. We only notify if we handled the change,
-        // or the Activity is set to handle uiMode changes
         if (handled && mHost instanceof AppCompatActivity) {
-            ((AppCompatActivity) mHost).onNightModeChanged(mode);
+            if ((configChanges & ActivityInfo.CONFIG_UI_MODE) != 0) {
+                ((AppCompatActivity) mHost).onNightModeChanged(nightMode);
+            }
+            if ((configChanges & ActivityInfo.CONFIG_LOCALE) != 0) {
+                ((AppCompatActivity) mHost).onLocalesChanged(locales);
+            }
         }
 
+        if (handled && newLocales != null) {
+            // LocaleListCompat's default locales are updated here using the configuration
+            // locales to keep default locales in sync with application locales and also to cover
+            // the case where framework re-adjusts input locales by bringing forward the most
+            // suitable locale.
+            setDefaultLocalesForLocaleList(getConfigurationLocales(
+                    mContext.getResources().getConfiguration()));
+        }
         return handled;
     }
 
-    private void updateResourcesConfigurationForNightMode(
-            final int uiModeNightModeValue, final boolean callOnConfigChange,
+    private void updateResourcesConfiguration(int uiModeNightModeValue,
+            @Nullable final LocaleListCompat locales, final boolean callOnConfigChange,
             @Nullable Configuration configOverlay) {
-        // If the Activity is not set to handle uiMode config changes we will
-        // update the Resources with a new Configuration with an updated UI Mode
+        // If the Activity is not set to handle config changes we will
+        // update the Resources with a new Configuration with  updated nightMode and locales.
         final Resources res = mContext.getResources();
         final Configuration conf = new Configuration(res.getConfiguration());
         if (configOverlay != null) {
@@ -2589,6 +2889,9 @@
         }
         conf.uiMode = uiModeNightModeValue
                 | (res.getConfiguration().uiMode & ~Configuration.UI_MODE_NIGHT_MASK);
+        if (locales != null) {
+            setConfigurationLocales(conf, locales);
+        }
         res.updateConfiguration(conf, null);
 
         // We may need to flush the Resources' drawable cache due to framework bugs.
@@ -2612,19 +2915,23 @@
         }
 
         if (callOnConfigChange && mHost instanceof Activity) {
-            final Activity activity = (Activity) mHost;
-            if (activity instanceof LifecycleOwner) {
-                // If the Activity is a LifecyleOwner, check that it is after onCreate() and
-                // before onDestroy(), which includes STOPPED.
-                Lifecycle lifecycle = ((LifecycleOwner) activity).getLifecycle();
-                if (lifecycle.getCurrentState().isAtLeast(Lifecycle.State.CREATED)) {
-                    activity.onConfigurationChanged(conf);
-                }
-            } else {
-                // Otherwise, we'll fallback to our internal created and destroyed flags.
-                if (mCreated && !mDestroyed) {
-                    activity.onConfigurationChanged(conf);
-                }
+            updateActivityConfiguration(conf);
+        }
+    }
+
+    private void updateActivityConfiguration(Configuration conf) {
+        final Activity activity = (Activity) mHost;
+        if (activity instanceof LifecycleOwner) {
+            // If the Activity is a LifecyleOwner, check that it is after onCreate() and
+            // before onDestroy(), which includes STOPPED.
+            Lifecycle lifecycle = ((LifecycleOwner) activity).getLifecycle();
+            if (lifecycle.getCurrentState().isAtLeast(Lifecycle.State.CREATED)) {
+                activity.onConfigurationChanged(conf);
+            }
+        } else {
+            // Otherwise, we'll fallback to our internal created and destroyed flags.
+            if (mCreated && !mDestroyed) {
+                activity.onConfigurationChanged(conf);
             }
         }
     }
@@ -2654,13 +2961,14 @@
         return mAutoBatteryNightModeManager;
     }
 
-    private boolean isActivityManifestHandlingUiMode(Context baseContext) {
-        if (!mActivityHandlesUiModeChecked && mHost instanceof Activity) {
+    private int getActivityHandlesConfigChangesFlags(Context baseContext) {
+        if (!mActivityHandlesConfigFlagsChecked
+                && mHost instanceof Activity) {
             final PackageManager pm = baseContext.getPackageManager();
             if (pm == null) {
-                // If we don't have a PackageManager, return false. Don't set
+                // If we don't have a PackageManager, return 0. Don't set
                 // the checked flag though so we still check again later
-                return false;
+                return 0;
             }
             try {
                 int flags = 0;
@@ -2677,19 +2985,19 @@
                 }
                 final ActivityInfo info = pm.getActivityInfo(
                         new ComponentName(baseContext, mHost.getClass()), flags);
-                mActivityHandlesUiMode = info != null
-                        && (info.configChanges & ActivityInfo.CONFIG_UI_MODE) != 0;
+                if (info != null) {
+                    mActivityHandlesConfigFlags = info.configChanges;
+                }
             } catch (PackageManager.NameNotFoundException e) {
                 // This shouldn't happen but let's not crash because of it, we'll just log and
                 // return false (since most apps won't be handling it)
                 Log.d(TAG, "Exception while getting ActivityInfo", e);
-                mActivityHandlesUiMode = false;
+                mActivityHandlesConfigFlags = 0;
             }
         }
         // Flip the checked flag so we don't check again
-        mActivityHandlesUiModeChecked = true;
-
-        return mActivityHandlesUiMode;
+        mActivityHandlesConfigFlagsChecked = true;
+        return mActivityHandlesConfigFlags;
     }
 
     /**
@@ -2749,6 +3057,9 @@
             }
             mActionMode = null;
             ViewCompat.requestApplyInsets(mSubDecor);
+
+            // mActionMode changed.
+            updateBackInvokedCallbackState();
         }
     }
 
@@ -3613,6 +3924,16 @@
                 @NonNull Configuration overrideConfiguration) {
             return context.createConfigurationContext(overrideConfiguration);
         }
+
+        @DoNotInline
+        static void setLayoutDirection(Configuration configuration, Locale loc) {
+            configuration.setLayoutDirection(loc);
+        }
+
+        @DoNotInline
+        static void setLocale(Configuration configuration, Locale loc) {
+            configuration.setLocale(loc);
+        }
     }
 
     @RequiresApi(21)
@@ -3622,12 +3943,20 @@
         static boolean isPowerSaveMode(PowerManager powerManager) {
             return powerManager.isPowerSaveMode();
         }
+
+        @DoNotInline
+        static String toLanguageTag(Locale locale) {
+            return locale.toLanguageTag();
+        }
     }
 
     @RequiresApi(24)
     static class Api24Impl {
         private Api24Impl() { }
 
+        // Most methods of LocaleListCompat requires a minimum API of 24 to be used and these are
+        // the helper implementations of those methods, used to indirectly invoke them in our code.
+        @DoNotInline
         static void generateConfigDelta_locale(@NonNull Configuration base,
                 @NonNull Configuration change, @NonNull Configuration delta) {
             final LocaleList baseLocales = base.getLocales();
@@ -3637,6 +3966,21 @@
                 delta.locale = change.locale;
             }
         }
+
+        @DoNotInline
+        static LocaleListCompat getLocales(Configuration configuration) {
+            return LocaleListCompat.forLanguageTags(configuration.getLocales().toLanguageTags());
+        }
+
+        @DoNotInline
+        static void setLocales(Configuration configuration, LocaleListCompat locales) {
+            configuration.setLocales(LocaleList.forLanguageTags(locales.toLanguageTags()));
+        }
+
+        @DoNotInline
+        public static void setDefaultLocales(LocaleListCompat locales) {
+            LocaleList.setDefault(LocaleList.forLanguageTags(locales.toLanguageTags()));
+        }
     }
 
     @RequiresApi(26)
@@ -3657,4 +4001,33 @@
             }
         }
     }
+
+    @RequiresApi(33)
+    static class Api33Impl {
+        private Api33Impl() {
+            // This class is not instantiable.
+        }
+
+        @DoNotInline
+        static OnBackInvokedCallback registerOnBackPressedCallback(
+                Object dispatcher, AppCompatDelegateImpl delegate) {
+            OnBackInvokedCallback onBackInvokedCallback = delegate::onBackPressed;
+            OnBackInvokedDispatcher typedDispatcher = (OnBackInvokedDispatcher) dispatcher;
+            typedDispatcher.registerOnBackInvokedCallback(
+                    OnBackInvokedDispatcher.PRIORITY_OVERLAY, onBackInvokedCallback);
+            return onBackInvokedCallback;
+        }
+
+        @DoNotInline
+        static void unregisterOnBackInvokedCallback(Object dispatcher, Object callback) {
+            OnBackInvokedCallback onBackInvokedCallback = (OnBackInvokedCallback) callback;
+            OnBackInvokedDispatcher typedDispatcher = (OnBackInvokedDispatcher) dispatcher;
+            typedDispatcher.unregisterOnBackInvokedCallback(onBackInvokedCallback);
+        }
+
+        @DoNotInline
+        static OnBackInvokedDispatcher getOnBackInvokedDispatcher(Activity activity) {
+            return activity.getOnBackInvokedDispatcher();
+        }
+    }
 }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java
new file mode 100644
index 0000000..5f2668f
--- /dev/null
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2022 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 android.app.Service;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
+import android.os.Build;
+import android.os.IBinder;
+
+import androidx.annotation.DoNotInline;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.core.os.LocaleListCompat;
+
+/**
+ * A placeholder service to avoid adding application-level metadata. The service
+ * is only used to expose metadata defined in the library's manifest. It is
+ * never invoked.
+ *
+ * <p>This metadata boolean collected from the key "autoStoreLocales" is used as an opt-in from
+ * the developers to automatically store locales provided by them through the API
+ * {@link AppCompatDelegate#setApplicationLocales(LocaleListCompat)}.</p>
+ */
+public final class AppLocalesMetadataHolderService extends Service {
+    public AppLocalesMetadataHolderService() {}
+
+    @NonNull
+    @Override
+    public IBinder onBind(@SuppressWarnings("InvalidNullabilityOverride") @NonNull Intent intent) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns the {@link ServiceInfo} for the declared {@link AppLocalesMetadataHolderService}.
+     *
+     * <p>This serviceInfo contains the attribute "autoStoreLocales", its value being a boolean
+     * that informs us if the developer wants us to handle the storage of locales or not.</p>
+     */
+    @NonNull
+    @SuppressWarnings("deprecation") // GET_DISABLED_COMPONENTS, getServiceInfo
+    public static ServiceInfo getServiceInfo(@NonNull Context context) throws
+            PackageManager.NameNotFoundException {
+        int flags = PackageManager.GET_META_DATA;
+        // The service is marked as disabled so we need to include the following flags.
+        if (Build.VERSION.SDK_INT >= 24) {
+            flags |= Api24Impl.getDisabledComponentFlag();
+        } else {
+            flags |= PackageManager.GET_DISABLED_COMPONENTS;
+        }
+
+        return context.getPackageManager().getServiceInfo(
+                new ComponentName(context, AppLocalesMetadataHolderService.class), flags);
+    }
+
+    @RequiresApi(24)
+    private static class Api24Impl {
+        @DoNotInline
+        static int getDisabledComponentFlag() {
+            return PackageManager.MATCH_DISABLED_COMPONENTS;
+        }
+    }
+}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesStorageHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesStorageHelper.java
new file mode 100644
index 0000000..d30f599
--- /dev/null
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesStorageHelper.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright 2022 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 static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+import static android.content.pm.PackageManager.DONT_KILL_APP;
+
+import static androidx.appcompat.app.AppCompatDelegate.getApplicationLocales;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.util.Log;
+import android.util.Xml;
+
+import androidx.annotation.NonNull;
+import androidx.core.os.LocaleListCompat;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayDeque;
+import java.util.Queue;
+import java.util.concurrent.Executor;
+
+/**
+ * Helper class to manage storage of locales in app's persistent files.
+ */
+class AppLocalesStorageHelper {
+    static final String APPLICATION_LOCALES_RECORD_FILE =
+            "androidx.appcompat.app.AppCompatDelegate.application_locales_record_file";
+    static final String LOCALE_RECORD_ATTRIBUTE_TAG = "application_locales";
+    static final String LOCALE_RECORD_FILE_TAG = "locales";
+    static final String APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME = "androidx.appcompat.app"
+            + ".AppLocalesMetadataHolderService";
+    static final String TAG = "AppLocalesStorageHelper";
+
+    private AppLocalesStorageHelper() {}
+
+    /**
+     * Returns app locales after reading from storage, fetched using the application context.
+     */
+    @NonNull
+    static String readLocales(@NonNull Context context) {
+        String appLocales = "";
+
+        FileInputStream fis;
+        try {
+            fis = context.openFileInput(APPLICATION_LOCALES_RECORD_FILE);
+        } catch (FileNotFoundException fnfe) {
+            Log.w(TAG, "Reading app Locales : Locales record file not found: "
+                    + APPLICATION_LOCALES_RECORD_FILE);
+            return appLocales;
+        }
+        try {
+            XmlPullParser parser = Xml.newPullParser();
+            parser.setInput(fis, "UTF-8");
+            int type;
+            int outerDepth = parser.getDepth();
+            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                    && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+                if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                    continue;
+                }
+
+                String tagName = parser.getName();
+                if (tagName.equals(LOCALE_RECORD_FILE_TAG)) {
+                    appLocales =  parser.getAttributeValue(/*namespace= */ null,
+                            LOCALE_RECORD_ATTRIBUTE_TAG);
+                    break;
+                }
+            }
+        } catch (XmlPullParserException | IOException e) {
+            Log.w(TAG,
+                    "Reading app Locales : Unable to parse through file :"
+                            + APPLICATION_LOCALES_RECORD_FILE);
+        } finally {
+            if (fis != null) {
+                try {
+                    fis.close();
+                } catch (IOException e) {
+                    /* ignore */
+                }
+            }
+        }
+
+        if (!appLocales.isEmpty()) {
+            Log.d(TAG,
+                    "Reading app Locales : Locales read from file: "
+                            + APPLICATION_LOCALES_RECORD_FILE + " ," + " appLocales: "
+                            + appLocales);
+        } else {
+            context.deleteFile(APPLICATION_LOCALES_RECORD_FILE);
+        }
+        return appLocales;
+    }
+
+    /**
+     * Stores the provided locales in internal app file, using the application context.
+     */
+    static void persistLocales(@NonNull Context context, @NonNull String locales) {
+        if (locales.equals("")) {
+            context.deleteFile(APPLICATION_LOCALES_RECORD_FILE);
+            return;
+        }
+
+        FileOutputStream fos;
+        try {
+            fos = context.openFileOutput(APPLICATION_LOCALES_RECORD_FILE, Context.MODE_PRIVATE);
+        } catch (FileNotFoundException fnfe) {
+            Log.w(TAG, String.format("Storing App Locales : FileNotFoundException: Cannot open "
+                    + "file %s for writing ", APPLICATION_LOCALES_RECORD_FILE));
+            return;
+        }
+        XmlSerializer serializer = Xml.newSerializer();
+        try {
+            serializer.setOutput(fos, /* encoding= */ null);
+            serializer.startDocument("UTF-8", true);
+            serializer.startTag(/* namespace= */ null, LOCALE_RECORD_FILE_TAG);
+            serializer.attribute(/* namespace= */ null, LOCALE_RECORD_ATTRIBUTE_TAG, locales);
+            serializer.endTag(/* namespace= */ null, LOCALE_RECORD_FILE_TAG);
+            serializer.endDocument();
+            Log.d(TAG, "Storing App Locales : app-locales: "
+                    + locales + " persisted successfully.");
+        } catch (Exception e) {
+            Log.w(TAG, "Storing App Locales : Failed to persist app-locales: "
+                    + locales, e);
+        } finally {
+            if (fos != null) {
+                try {
+                    fos.close();
+                } catch (IOException e) {
+                    /* ignore */
+                }
+            }
+        }
+    }
+
+    /**
+     * Syncs app-specific locales from androidX to framework. This is used to maintain a smooth
+     * transition for a device that updates from pre-T API versions to T.
+     *
+     * <p><b>NOTE:</b> This should only be called when auto-storage is opted-in. This method
+     * uses the meta-data service provided during the opt-in and hence if the service is not found
+     * this method will throw an error.</p>
+     */
+    static void syncLocalesToFramework(Context context) {
+        ComponentName app_locales_component = new ComponentName(
+                context, APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME);
+
+        if (context.getPackageManager().getComponentEnabledSetting(app_locales_component)
+                != COMPONENT_ENABLED_STATE_ENABLED) {
+            AppCompatDelegate.setAppContext(context);
+            // ComponentEnabledSetting for the app component app_locales_component is used as a
+            // marker to represent that the locales has been synced from AndroidX to framework
+            // If this marker is found in ENABLED state then we do not need to sync again.
+            if (getApplicationLocales().isEmpty()) {
+                // We check if some locales are applied by the framework or not (this is done to
+                // ensure that we don't overwrite newer locales set by the framework). If no
+                // app-locales are found then we need to sync the app-specific locales from androidX
+                // to framework.
+
+                String appLocales = readLocales(context);
+                // if locales are present in storage, call the setApplicationLocales() API. As the
+                // API version is >= 33, this call will be directed to the framework API and the
+                // locales will be persisted there.
+                AppCompatDelegate.setApplicationLocales(
+                        LocaleListCompat.forLanguageTags(appLocales));
+            }
+            // setting ComponentEnabledSetting for app component using
+            // AppLocalesMetadataHolderService (used only for locales, thus minimizing
+            // the chances of conflicts). Setting it as ENABLED marks the success of app-locales
+            // sync from AndroidX to framework.
+            // Flag DONT_KILL_APP indicates that you don't want to kill the app containing the
+            // component.
+            context.getPackageManager().setComponentEnabledSetting(app_locales_component,
+                    COMPONENT_ENABLED_STATE_ENABLED, /* flags= */ DONT_KILL_APP);
+        }
+    }
+
+    /**
+     * Implementation of {@link java.util.concurrent.Executor} that executes each runnable on a
+     * new thread.
+     */
+    static class ThreadPerTaskExecutor implements Executor {
+        @Override
+        public void execute(Runnable r) {
+            new Thread(r).start();
+        }
+    }
+
+    /**
+     * Implementation of {@link java.util.concurrent.Executor} that executes runnables serially
+     * by synchronizing the {@link Executor#execute(Runnable)} method and maintaining a tasks
+     * queue.
+     */
+    static class SerialExecutor implements Executor {
+        private final Object mLock = new Object();
+        final Queue<Runnable> mTasks = new ArrayDeque<>();
+        final Executor mExecutor;
+        Runnable mActive;
+
+        SerialExecutor(Executor executor) {
+            this.mExecutor = executor;
+        }
+
+        @Override
+        public void execute(final Runnable r) {
+            synchronized (mLock) {
+                mTasks.add(() -> {
+                    try {
+                        r.run();
+                    } finally {
+                        scheduleNext();
+                    }
+                });
+                if (mActive == null) {
+                    scheduleNext();
+                }
+            }
+        }
+
+        protected void scheduleNext() {
+            synchronized (mLock) {
+                if ((mActive = mTasks.poll()) != null) {
+                    mExecutor.execute(mActive);
+                }
+            }
+        }
+    }
+}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/LocaleOverlayHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/LocaleOverlayHelper.java
new file mode 100644
index 0000000..9684b92
--- /dev/null
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/LocaleOverlayHelper.java
@@ -0,0 +1,84 @@
+/*
+ * 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.appcompat.app;
+
+import android.os.LocaleList;
+
+import androidx.annotation.RequiresApi;
+import androidx.core.os.LocaleListCompat;
+
+import java.util.LinkedHashSet;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * Static utilities to overlay locales on top of another LocaleListCompat.
+ *
+ * <p>This is used to overlay application-specific locales on top of
+ * system locales.</p>
+ */
+@RequiresApi(24)
+final class LocaleOverlayHelper {
+
+    private LocaleOverlayHelper() {}
+
+    /**
+     * Combines the overlay locales and base locales.
+     *
+     * @return the combined {@link LocaleListCompat} if the overlay locales is not empty/null else
+     * returns an empty LocaleListCompat.
+     */
+    static LocaleListCompat combineLocalesIfOverlayExists(LocaleListCompat overlayLocales,
+            LocaleListCompat baseLocales) {
+        if (overlayLocales == null || overlayLocales.isEmpty()) {
+            return LocaleListCompat.getEmptyLocaleList();
+        }
+        return combineLocales(overlayLocales, baseLocales);
+    }
+
+    static LocaleListCompat combineLocalesIfOverlayExists(LocaleList overlayLocales,
+            LocaleList baseLocales) {
+        if (overlayLocales == null || overlayLocales.isEmpty()) {
+            return LocaleListCompat.getEmptyLocaleList();
+        }
+        return combineLocales(LocaleListCompat.wrap(overlayLocales),
+                LocaleListCompat.wrap(baseLocales));
+    }
+
+    /**
+     * Creates a combined {@link LocaleListCompat} by placing overlay locales before base
+     * locales and dropping duplicates from the base locales.
+     */
+    private static LocaleListCompat combineLocales(LocaleListCompat overlayLocales,
+            LocaleListCompat baseLocales) {
+        // using LinkedHashSet to drop duplicates.
+        Set<Locale> combinedLocales = new LinkedHashSet<>();
+        for (int i = 0; i < overlayLocales.size() + baseLocales.size(); i++) {
+            Locale currLocale;
+            if (i < overlayLocales.size()) {
+                currLocale = overlayLocales.get(i);
+            } else {
+                currLocale = baseLocales.get(i - overlayLocales.size());
+            }
+            if (currLocale != null) {
+                combinedLocales.add(currLocale);
+            }
+        }
+        return LocaleListCompat.create(combinedLocales.toArray(
+                new Locale[combinedLocales.size()]));
+    }
+}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserModel.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserModel.java
index 89e3bb9..34a8e20 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserModel.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserModel.java
@@ -683,6 +683,7 @@
      *
      * @return Whether loading was performed.
      */
+    @SuppressWarnings("deprecation")
     private boolean loadActivitiesIfNeeded() {
         if (mReloadActivities && mIntent != null) {
             mReloadActivities = false;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
index 6e9c5ba..6cc5e8b 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
@@ -59,6 +59,7 @@
 import androidx.appcompat.content.res.AppCompatResources;
 import androidx.appcompat.view.ContextThemeWrapper;
 import androidx.appcompat.view.menu.ShowableListMenu;
+import androidx.core.util.ObjectsCompat;
 import androidx.core.view.TintableBackgroundView;
 import androidx.core.view.ViewCompat;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
@@ -1129,7 +1130,7 @@
                 @NonNull android.widget.ThemedSpinnerAdapter themedSpinnerAdapter,
                 @Nullable Resources.Theme theme
         ) {
-            if (themedSpinnerAdapter.getDropDownViewTheme() != theme) {
+            if (!ObjectsCompat.equals(themedSpinnerAdapter.getDropDownViewTheme(), theme)) {
                 themedSpinnerAdapter.setDropDownViewTheme(theme);
             }
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
index ff70a9c..561672f 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
@@ -23,6 +23,7 @@
 import android.graphics.Canvas;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
+import android.os.Build;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
@@ -33,10 +34,12 @@
 
 import androidx.annotation.DoNotInline;
 import androidx.annotation.NonNull;
+import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
 import androidx.appcompat.R;
 import androidx.appcompat.graphics.drawable.DrawableWrapper;
 import androidx.core.graphics.drawable.DrawableCompat;
+import androidx.core.os.BuildCompat;
 import androidx.core.view.ViewPropertyAnimatorCompat;
 import androidx.core.widget.ListViewAutoScrollHelper;
 
@@ -62,8 +65,6 @@
 
     private int mMotionPosition;
 
-    private Field mIsChildViewEnabled;
-
     private GateKeeperDrawable mSelector;
 
     /*
@@ -126,15 +127,25 @@
         super(context, null, R.attr.dropDownListViewStyle);
         mHijackFocus = hijackFocus;
         setCacheColorHint(0); // Transparent, since the background drawable could be anything.
+    }
 
-        try {
-            mIsChildViewEnabled = AbsListView.class.getDeclaredField("mIsChildViewEnabled");
-            mIsChildViewEnabled.setAccessible(true);
-        } catch (NoSuchFieldException e) {
-            e.printStackTrace();
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    private boolean superIsSelectedChildViewEnabled() {
+        if (BuildCompat.isAtLeastT()) {
+            return Api33Impl.isSelectedChildViewEnabled(this);
+        } else {
+            return PreApi33Impl.isSelectedChildViewEnabled(this);
         }
     }
 
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    private void superSetSelectedChildViewEnabled(boolean enabled) {
+        if (BuildCompat.isAtLeastT()) {
+            Api33Impl.setSelectedChildViewEnabled(this, enabled);
+        } else {
+            PreApi33Impl.setSelectedChildViewEnabled(this, enabled);
+        }
+    }
 
     @Override
     public boolean isInTouchMode() {
@@ -624,18 +635,14 @@
         selectorRect.right += mSelectionRightPadding;
         selectorRect.bottom += mSelectionBottomPadding;
 
-        try {
-            // AbsListView.mIsChildViewEnabled controls the selector's state so we need to
-            // modify its value
-            final boolean isChildViewEnabled = mIsChildViewEnabled.getBoolean(this);
-            if (sel.isEnabled() != isChildViewEnabled) {
-                mIsChildViewEnabled.set(this, !isChildViewEnabled);
-                if (position != INVALID_POSITION) {
-                    refreshDrawableState();
-                }
+        // AbsListView.mIsChildViewEnabled controls the selector's state so we need to
+        // modify its value
+        final boolean isChildViewEnabled = superIsSelectedChildViewEnabled();
+        if (sel.isEnabled() != isChildViewEnabled) {
+            superSetSelectedChildViewEnabled(!isChildViewEnabled);
+            if (position != INVALID_POSITION) {
+                refreshDrawableState();
             }
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
         }
     }
 
@@ -803,4 +810,66 @@
             view.drawableHotspotChanged(x, y);
         }
     }
+
+    // TODO(b/221852137): Use @DeprecatedSinceApi(33).
+    @SuppressWarnings({"JavaReflectionMemberAccess", "CatchAndPrintStackTrace"})
+    static class PreApi33Impl {
+        private static final Field sIsChildViewEnabled;
+
+        static {
+            Field isChildViewEnabled = null;
+
+            try {
+                isChildViewEnabled = AbsListView.class.getDeclaredField("mIsChildViewEnabled");
+                isChildViewEnabled.setAccessible(true);
+            } catch (NoSuchFieldException e) {
+                e.printStackTrace();
+            }
+
+            sIsChildViewEnabled = isChildViewEnabled;
+        }
+
+        private PreApi33Impl() {
+            // This class is not instantiable.
+        }
+
+        static boolean isSelectedChildViewEnabled(AbsListView view) {
+            if (sIsChildViewEnabled != null) {
+                try {
+                    return sIsChildViewEnabled.getBoolean(view);
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                }
+            }
+
+            return false;
+        }
+
+        static void setSelectedChildViewEnabled(AbsListView view, boolean enabled) {
+            if (sIsChildViewEnabled != null) {
+                try {
+                    sIsChildViewEnabled.set(view, enabled);
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+    static class Api33Impl {
+        private Api33Impl() {
+            // This class is not instantiable.
+        }
+
+        @DoNotInline
+        static boolean isSelectedChildViewEnabled(AbsListView view) {
+            return view.isSelectedChildViewEnabled();
+        }
+
+        @DoNotInline
+        static void setSelectedChildViewEnabled(AbsListView view, boolean enabled) {
+            view.setSelectedChildViewEnabled(enabled);
+        }
+    }
 }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
index 072c94a..3bd4492 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
@@ -900,6 +900,7 @@
         updateSubmitArea();
     }
 
+    @SuppressWarnings("deprecation")
     private boolean hasVoiceSearch() {
         if (mSearchable != null && mSearchable.getVoiceSearchEnabled()) {
             Intent testIntent = null;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
index 173e289..77e9dae 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
@@ -123,7 +123,7 @@
         public void setDropDownViewTheme(@Nullable Resources.Theme theme) {
             if (theme == null) {
                 mDropDownInflater = null;
-            } else if (theme == mContext.getTheme()) {
+            } else if (theme.equals(mContext.getTheme())) {
                 mDropDownInflater = mInflater;
             } else {
                 final Context context = new ContextThemeWrapper(mContext, theme);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
index 764ef0f..205bfd6 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
@@ -42,13 +42,17 @@
 import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.TextView;
+import android.window.OnBackInvokedCallback;
+import android.window.OnBackInvokedDispatcher;
 
 import androidx.annotation.ColorInt;
+import androidx.annotation.DoNotInline;
 import androidx.annotation.DrawableRes;
 import androidx.annotation.MainThread;
 import androidx.annotation.MenuRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StringRes;
 import androidx.annotation.StyleRes;
@@ -232,6 +236,18 @@
 
     private boolean mCollapsible;
 
+    // The callback handling back events. If this is non-null, the
+    // callback has been registered at least once.
+    private OnBackInvokedCallback mBackInvokedCallback;
+
+    // The dispatcher on which the callback was registered. If this
+    // value is null, the callback is not registered anywhere.
+    private OnBackInvokedDispatcher mBackInvokedDispatcher;
+
+    // Whether this Toolbar should register a back invocation handler
+    // when its action view is expanded.
+    private boolean mBackInvokedCallbackEnabled;
+
     private final Runnable mShowOverflowMenuRunnable = new Runnable() {
         @Override public void run() {
             showOverflowMenu();
@@ -367,6 +383,39 @@
     }
 
     /**
+     * Sets whether the toolbar will attempt to register its own {@link OnBackInvokedCallback} in
+     * supported configurations to handle collapsing expanded action items when a back invocation
+     * occurs.
+     * <p>
+     * This feature is only supported on SDK 33 and above for applications that have enabled back
+     * invocation callback handling.
+     *
+     * @param enabled {@code true} to attempt to register a back invocation callback in supported
+     *                configurations or {@code false} to not automatically handle back invocations
+     *
+     * @see #isBackInvokedCallbackEnabled()
+     */
+    public void setBackInvokedCallbackEnabled(boolean enabled) {
+        if (mBackInvokedCallbackEnabled != enabled) {
+            mBackInvokedCallbackEnabled = enabled;
+
+            // mShouldHandleBackInvoked changed
+            updateBackInvokedCallbackState();
+        }
+    }
+
+    /**
+     * Returns whether the toolbar will attempt to register its own {@link OnBackInvokedCallback}
+     * in supported configurations to handle collapsing expanded action items when a back
+     * invocation occurs.
+     *
+     * @see #setBackInvokedCallbackEnabled(boolean)
+     */
+    public boolean isBackInvokedCallbackEnabled() {
+        return mBackInvokedCallbackEnabled;
+    }
+
+    /**
      * Specifies the theme to use when inflating popup menus. By default, uses
      * the same theme as the toolbar itself.
      *
@@ -606,6 +655,9 @@
         mMenuView.setPopupTheme(mPopupTheme);
         mMenuView.setPresenter(outerPresenter);
         mOuterActionMenuPresenter = outerPresenter;
+
+        // mExpandedMenuPresenter has changed.
+        updateBackInvokedCallbackState();
     }
 
     /**
@@ -1190,6 +1242,9 @@
             }
             mMenuView.setExpandedActionViewsExclusive(true);
             menu.addMenuPresenter(mExpandedMenuPresenter, mPopupContext);
+
+            // mExpandedMenuPresenter has changed.
+            updateBackInvokedCallbackState();
         }
     }
 
@@ -1619,6 +1674,13 @@
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
         removeCallbacks(mShowOverflowMenuRunnable);
+        updateBackInvokedCallbackState();
+    }
+
+    @Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        updateBackInvokedCallbackState();
     }
 
     @Override
@@ -2430,6 +2492,36 @@
     }
 
     /**
+     * Call this method whenever a property changes that affects whether the view will handle a
+     * back press, which is the combination of {@link #hasExpandedActionView()} and properties that
+     * affect whether this view would normally receive key press events.
+     */
+    void updateBackInvokedCallbackState() {
+        if (Build.VERSION.SDK_INT >= 33) {
+            OnBackInvokedDispatcher currentDispatcher =
+                    Api33Impl.findOnBackInvokedDispatcher(this);
+            boolean shouldBeRegistered = hasExpandedActionView()
+                    && currentDispatcher != null
+                    && ViewCompat.isAttachedToWindow(this)
+                    && mBackInvokedCallbackEnabled;
+
+            if (shouldBeRegistered && mBackInvokedDispatcher == null) {
+                if (mBackInvokedCallback == null) {
+                    mBackInvokedCallback = Api33Impl.newOnBackInvokedCallback(
+                            this::collapseActionView);
+                }
+                Api33Impl.tryRegisterOnBackInvokedCallback(
+                        currentDispatcher, mBackInvokedCallback);
+                mBackInvokedDispatcher = currentDispatcher;
+            } else if (!shouldBeRegistered && mBackInvokedDispatcher != null) {
+                Api33Impl.tryUnregisterOnBackInvokedCallback(
+                        mBackInvokedDispatcher, mBackInvokedCallback);
+                mBackInvokedDispatcher = null;
+            }
+        }
+    }
+
+    /**
      * Interface responsible for receiving menu item click events if the items themselves
      * do not have individual item click listeners.
      */
@@ -2645,6 +2737,9 @@
                 ((CollapsibleActionView) mExpandedActionView).onActionViewExpanded();
             }
 
+            // mCurrentExpandedItem has changed.
+            updateBackInvokedCallbackState();
+
             return true;
         }
 
@@ -2665,6 +2760,9 @@
             requestLayout();
             item.setActionViewExpanded(false);
 
+            // mCurrentExpandedItem has changed.
+            updateBackInvokedCallbackState();
+
             return true;
         }
 
@@ -2683,4 +2781,37 @@
         }
     }
 
+    @RequiresApi(33)
+    static class Api33Impl {
+        private Api33Impl() {
+            // This class is not instantiable.
+        }
+
+        @DoNotInline
+        static void tryRegisterOnBackInvokedCallback(@NonNull Object dispatcherObj,
+                @NonNull Object callback) {
+            OnBackInvokedDispatcher dispatcher = (OnBackInvokedDispatcher) dispatcherObj;
+            dispatcher.registerOnBackInvokedCallback(OnBackInvokedDispatcher.PRIORITY_OVERLAY,
+                    (OnBackInvokedCallback) callback);
+        }
+
+        @DoNotInline
+        static void tryUnregisterOnBackInvokedCallback(@NonNull Object dispatcherObj,
+                @NonNull Object callbackObj) {
+            OnBackInvokedDispatcher dispatcher = (OnBackInvokedDispatcher) dispatcherObj;
+            dispatcher.unregisterOnBackInvokedCallback((OnBackInvokedCallback) callbackObj);
+        }
+
+        @Nullable
+        @DoNotInline
+        static OnBackInvokedDispatcher findOnBackInvokedDispatcher(@NonNull View view) {
+            return view.findOnBackInvokedDispatcher();
+        }
+
+        @NonNull
+        @DoNotInline
+        static OnBackInvokedCallback newOnBackInvokedCallback(@NonNull Runnable action) {
+            return action::run;
+        }
+    }
 }
diff --git a/appsearch/appsearch-debug-view/samples/src/main/java/androidx/appsearch/debugview/samples/NotesAppSearchManager.java b/appsearch/appsearch-debug-view/samples/src/main/java/androidx/appsearch/debugview/samples/NotesAppSearchManager.java
index 7aba8a7..2628b2e 100644
--- a/appsearch/appsearch-debug-view/samples/src/main/java/androidx/appsearch/debugview/samples/NotesAppSearchManager.java
+++ b/appsearch/appsearch-debug-view/samples/src/main/java/androidx/appsearch/debugview/samples/NotesAppSearchManager.java
@@ -93,7 +93,7 @@
             PutDocumentsRequest request = new PutDocumentsRequest.Builder().addDocuments(notes)
                     .build();
             return Futures.transformAsync(mAppSearchSessionFuture,
-                    session -> session.put(request), mExecutor);
+                    session -> session.putAsync(request), mExecutor);
         } catch (Exception e) {
             return Futures.immediateFailedFuture(e);
         }
@@ -112,7 +112,7 @@
     }
 
     private ListenableFuture<AppSearchSession> createLocalSession() {
-        return LocalStorage.createSearchSession(
+        return LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(mContext, DB_NAME)
                         .build()
         );
@@ -122,7 +122,7 @@
         SetSchemaRequest request =
                 new SetSchemaRequest.Builder().setForceOverride(FORCE_OVERRIDE).build();
         return Futures.transformAsync(mAppSearchSessionFuture,
-                session -> session.setSchema(request),
+                session -> session.setSchemaAsync(request),
                 mExecutor);
     }
 
@@ -131,7 +131,7 @@
             SetSchemaRequest request = new SetSchemaRequest.Builder().addDocumentClasses(Note.class)
                     .build();
             return Futures.transformAsync(mAppSearchSessionFuture,
-                    session -> session.setSchema(request), mExecutor);
+                    session -> session.setSchemaAsync(request), mExecutor);
         } catch (AppSearchException e) {
             return Futures.immediateFailedFuture(e);
         }
diff --git a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java
index 720d679..fce8a0d 100644
--- a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java
+++ b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java
@@ -81,7 +81,7 @@
      *                            storage as the storage type for debugging.
      */
     @NonNull
-    public static ListenableFuture<DebugAppSearchManager> create(
+    public static ListenableFuture<DebugAppSearchManager> createAsync(
             @NonNull Context context,
             @NonNull ExecutorService executor, @NonNull String databaseName,
             @AppSearchDebugActivity.StorageType int storageType) throws AppSearchException {
@@ -98,14 +98,13 @@
             case AppSearchDebugActivity.STORAGE_TYPE_LOCAL:
                 debugAppSearchManagerListenableFuture =
                         Futures.transform(
-                                debugAppSearchManager.initializeLocalStorage(databaseName),
+                                debugAppSearchManager.initializeLocalStorageAsync(databaseName),
                                 unused -> debugAppSearchManager, executor);
                 break;
             case AppSearchDebugActivity.STORAGE_TYPE_PLATFORM:
                 if (Build.VERSION.SDK_INT >= 31) {
-                    debugAppSearchManagerListenableFuture =
-                            Futures.transform(
-                                    debugAppSearchManager.initializePlatformStorage(databaseName),
+                    debugAppSearchManagerListenableFuture = Futures.transform(
+                            debugAppSearchManager.initializePlatformStorageAsync(databaseName),
                                     unused -> debugAppSearchManager, executor);
                 } else {
                     throw new AppSearchException(AppSearchResult.RESULT_INVALID_ARGUMENT,
@@ -130,7 +129,7 @@
      * {@link #getNextPage} to retrieve the {@link GenericDocument} objects for each page.
      */
     @NonNull
-    public ListenableFuture<SearchResults> getAllDocumentsSearchResults() {
+    public ListenableFuture<SearchResults> getAllDocumentsSearchResultsAsync() {
         SearchSpec searchSpec = new SearchSpec.Builder()
                 .setResultCountPerPage(PAGE_SIZE)
                 .setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
@@ -151,10 +150,11 @@
      *                {@link GenericDocument} objects.
      */
     @NonNull
-    public ListenableFuture<List<GenericDocument>> getNextPage(@NonNull SearchResults results) {
+    public ListenableFuture<List<GenericDocument>> getNextPageAsync(
+            @NonNull SearchResults results) {
         Preconditions.checkNotNull(results);
 
-        return Futures.transform(results.getNextPage(),
+        return Futures.transform(results.getNextPageAsync(),
                 DebugAppSearchManager::convertResultsToGenericDocuments, mExecutor);
     }
 
@@ -162,7 +162,7 @@
      * Gets a document from the AppSearch database by namespace and ID.
      */
     @NonNull
-    public ListenableFuture<GenericDocument> getDocument(@NonNull String namespace,
+    public ListenableFuture<GenericDocument> getDocumentAsync(@NonNull String namespace,
             @NonNull String id) {
         Preconditions.checkNotNull(id);
         Preconditions.checkNotNull(namespace);
@@ -170,7 +170,7 @@
                 new GetByDocumentIdRequest.Builder(namespace).addIds(id).build();
 
         return Futures.transformAsync(mAppSearchSessionFuture,
-                session -> Futures.transform(session.getByDocumentId(request),
+                session -> Futures.transform(session.getByDocumentIdAsync(request),
                         response -> response.getSuccesses().get(id), mExecutor), mExecutor);
     }
 
@@ -178,9 +178,9 @@
      * Gets the schema of the AppSearch database.
      */
     @NonNull
-    public ListenableFuture<GetSchemaResponse> getSchema() {
+    public ListenableFuture<GetSchemaResponse> getSchemaAsync() {
         return Futures.transformAsync(mAppSearchSessionFuture,
-                session -> session.getSchema(), mExecutor);
+                session -> session.getSchemaAsync(), mExecutor);
     }
 
     /**
@@ -195,9 +195,9 @@
     }
 
     @NonNull
-    private ListenableFuture<AppSearchSession> initializeLocalStorage(
+    private ListenableFuture<AppSearchSession> initializeLocalStorageAsync(
             @NonNull String databaseName) {
-        mAppSearchSessionFuture.setFuture(LocalStorage.createSearchSession(
+        mAppSearchSessionFuture.setFuture(LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(mContext, databaseName)
                         .build())
         );
@@ -206,9 +206,9 @@
 
     @NonNull
     @RequiresApi(Build.VERSION_CODES.S)
-    private ListenableFuture<AppSearchSession> initializePlatformStorage(
+    private ListenableFuture<AppSearchSession> initializePlatformStorageAsync(
             @NonNull String databaseName) {
-        mAppSearchSessionFuture.setFuture(PlatformStorage.createSearchSession(
+        mAppSearchSessionFuture.setFuture(PlatformStorage.createSearchSessionAsync(
                 new PlatformStorage.SearchContext.Builder(mContext, databaseName)
                         .build())
         );
diff --git a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentListModel.java b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentListModel.java
index 5a23cb0..6425c63 100644
--- a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentListModel.java
+++ b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentListModel.java
@@ -76,7 +76,7 @@
      */
     @NonNull
     public LiveData<SearchResults> getAllDocumentsSearchResults() {
-        Futures.addCallback(mDebugAppSearchManager.getAllDocumentsSearchResults(),
+        Futures.addCallback(mDebugAppSearchManager.getAllDocumentsSearchResultsAsync(),
                 new FutureCallback<SearchResults>() {
                     @Override
                     public void onSuccess(SearchResults result) {
@@ -107,7 +107,7 @@
     @NonNull
     public LiveData<List<GenericDocument>> addAdditionalResultsPage(
             @NonNull SearchResults results) {
-        Futures.addCallback(mDebugAppSearchManager.getNextPage(results),
+        Futures.addCallback(mDebugAppSearchManager.getNextPageAsync(results),
                 new FutureCallback<List<GenericDocument>>() {
                     @Override
                     public void onSuccess(List<GenericDocument> result) {
diff --git a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentModel.java b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentModel.java
index a8c03dc..41d2ed1 100644
--- a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentModel.java
+++ b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentModel.java
@@ -61,7 +61,7 @@
      */
     @NonNull
     public LiveData<GenericDocument> getDocument(@NonNull String namespace, @NonNull String id) {
-        Futures.addCallback(mDebugAppSearchManager.getDocument(namespace, id),
+        Futures.addCallback(mDebugAppSearchManager.getDocumentAsync(namespace, id),
                 new FutureCallback<GenericDocument>() {
                     @Override
                     public void onSuccess(GenericDocument result) {
diff --git a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/SchemaTypeListModel.java b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/SchemaTypeListModel.java
index 16e0b66..70cc1ee 100644
--- a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/SchemaTypeListModel.java
+++ b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/SchemaTypeListModel.java
@@ -90,7 +90,7 @@
      */
     @NonNull
     private LiveData<GetSchemaResponse> getSchema() {
-        Futures.addCallback(mDebugAppSearchManager.getSchema(),
+        Futures.addCallback(mDebugAppSearchManager.getSchemaAsync(),
                 new FutureCallback<GetSchemaResponse>() {
                     @Override
                     public void onSuccess(GetSchemaResponse result) {
diff --git a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/view/AppSearchDebugActivity.java b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/view/AppSearchDebugActivity.java
index 20ea01f..3174e2d 100644
--- a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/view/AppSearchDebugActivity.java
+++ b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/view/AppSearchDebugActivity.java
@@ -97,7 +97,7 @@
         @StorageType int storageType =
                 getIntent().getExtras().getInt(STORAGE_TYPE_INTENT_KEY);
         try {
-            mDebugAppSearchManager = DebugAppSearchManager.create(
+            mDebugAppSearchManager = DebugAppSearchManager.createAsync(
                     getApplicationContext(), mBackgroundExecutor, mDbName, storageType);
         } catch (AppSearchException e) {
             Toast.makeText(getApplicationContext(),
diff --git a/appsearch/appsearch-ktx/src/androidTest/java/AnnotationProcessorKtTest.kt b/appsearch/appsearch-ktx/src/androidTest/java/AnnotationProcessorKtTest.kt
index 7636104..85eb735 100644
--- a/appsearch/appsearch-ktx/src/androidTest/java/AnnotationProcessorKtTest.kt
+++ b/appsearch/appsearch-ktx/src/androidTest/java/AnnotationProcessorKtTest.kt
@@ -43,7 +43,7 @@
     @Before
     public fun setUp() {
         val context = ApplicationProvider.getApplicationContext<Context>()
-        session = LocalStorage.createSearchSession(
+        session = LocalStorage.createSearchSessionAsync(
             LocalStorage.SearchContext.Builder(context, DB_NAME).build()
         ).get()
 
@@ -59,7 +59,7 @@
     }
 
     private fun cleanup() {
-        session.setSchema(SetSchemaRequest.Builder().setForceOverride(true).build()).get()
+        session.setSchemaAsync(SetSchemaRequest.Builder().setForceOverride(true).build()).get()
     }
 
     @Document
@@ -250,7 +250,7 @@
 
     @Test
     fun testAnnotationProcessor() {
-        session.setSchema(
+        session.setSchemaAsync(
             SetSchemaRequest.Builder()
                 .addDocumentClasses(Card::class.java, Gift::class.java).build()
         ).get()
@@ -260,7 +260,7 @@
 
         // Index the Gift document and query it.
         checkIsBatchResultSuccess(
-            session.put(
+            session.putAsync(
                 PutDocumentsRequest.Builder().addDocuments(inputDocument).build()
             )
         )
diff --git a/appsearch/appsearch-local-storage/api/current.txt b/appsearch/appsearch-local-storage/api/current.txt
index 5eb0af5..94465dd 100644
--- a/appsearch/appsearch-local-storage/api/current.txt
+++ b/appsearch/appsearch-local-storage/api/current.txt
@@ -2,7 +2,8 @@
 package androidx.appsearch.localstorage {
 
   public class LocalStorage {
-    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+    method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.SearchContext);
   }
 
   public static final class LocalStorage.SearchContext {
diff --git a/appsearch/appsearch-local-storage/api/public_plus_experimental_current.txt b/appsearch/appsearch-local-storage/api/public_plus_experimental_current.txt
index 5eb0af5..94465dd 100644
--- a/appsearch/appsearch-local-storage/api/public_plus_experimental_current.txt
+++ b/appsearch/appsearch-local-storage/api/public_plus_experimental_current.txt
@@ -2,7 +2,8 @@
 package androidx.appsearch.localstorage {
 
   public class LocalStorage {
-    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+    method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.SearchContext);
   }
 
   public static final class LocalStorage.SearchContext {
diff --git a/appsearch/appsearch-local-storage/api/restricted_current.txt b/appsearch/appsearch-local-storage/api/restricted_current.txt
index 5eb0af5..94465dd 100644
--- a/appsearch/appsearch-local-storage/api/restricted_current.txt
+++ b/appsearch/appsearch-local-storage/api/restricted_current.txt
@@ -2,7 +2,8 @@
 package androidx.appsearch.localstorage {
 
   public class LocalStorage {
-    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+    method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.SearchContext);
   }
 
   public static final class LocalStorage.SearchContext {
diff --git a/appsearch/appsearch-local-storage/build.gradle b/appsearch/appsearch-local-storage/build.gradle
index 268af48..d723e00 100644
--- a/appsearch/appsearch-local-storage/build.gradle
+++ b/appsearch/appsearch-local-storage/build.gradle
@@ -44,12 +44,11 @@
     defaultConfig {
         externalNativeBuild {
             cmake {
-                cppFlags "-std=c++17"
                 arguments "-DCMAKE_VERBOSE_MAKEFILE=ON"
                 targets "icing"
             }
         }
-	multiDexEnabled true
+        multiDexEnabled true
     }
     externalNativeBuild {
         cmake {
@@ -72,9 +71,9 @@
     api("androidx.annotation:annotation:1.1.0")
 
     implementation(project(":appsearch:appsearch"))
+    implementation('androidx.collection:collection:1.2.0')
     implementation("androidx.concurrent:concurrent-futures:1.0.0")
     implementation("androidx.core:core:1.2.0")
-    implementation('androidx.collection:collection:1.0.0')
 
     androidTestImplementation project(':appsearch:appsearch-test-util')
     androidTestImplementation(libs.multidex)
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
index 961543b..d972613 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
@@ -16,6 +16,7 @@
 
 package androidx.appsearch.localstorage;
 
+import static androidx.appsearch.app.AppSearchResult.RESULT_INVALID_ARGUMENT;
 import static androidx.appsearch.localstorage.util.PrefixUtil.addPrefixToDocument;
 import static androidx.appsearch.localstorage.util.PrefixUtil.createPrefix;
 import static androidx.appsearch.localstorage.util.PrefixUtil.removePrefixesFromDocument;
@@ -25,25 +26,39 @@
 import static org.junit.Assert.assertThrows;
 
 import android.content.Context;
-import android.os.Process;
 
 import androidx.appsearch.app.AppSearchResult;
 import androidx.appsearch.app.AppSearchSchema;
 import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.InternalSetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
 import androidx.appsearch.app.SearchResult;
 import androidx.appsearch.app.SearchResultPage;
 import androidx.appsearch.app.SearchSpec;
+import androidx.appsearch.app.SearchSuggestionResult;
+import androidx.appsearch.app.SearchSuggestionSpec;
 import androidx.appsearch.app.SetSchemaResponse;
 import androidx.appsearch.app.StorageInfo;
+import androidx.appsearch.app.VisibilityDocument;
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.localstorage.stats.InitializeStats;
 import androidx.appsearch.localstorage.stats.OptimizeStats;
 import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityChecker;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityStore;
+import androidx.appsearch.observer.DocumentChangeInfo;
+import androidx.appsearch.observer.ObserverSpec;
+import androidx.appsearch.observer.SchemaChangeInfo;
+import androidx.appsearch.testutil.TestObserverCallback;
 import androidx.collection.ArrayMap;
 import androidx.collection.ArraySet;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.filters.FlakyTest;
 
+import com.google.android.icing.proto.DebugInfoProto;
+import com.google.android.icing.proto.DebugInfoVerbosity;
 import com.google.android.icing.proto.DocumentProto;
 import com.google.android.icing.proto.GetOptimizeInfoResultProto;
 import com.google.android.icing.proto.PersistType;
@@ -58,6 +73,7 @@
 import com.google.android.icing.proto.TermMatchType;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import org.junit.After;
 import org.junit.Before;
@@ -72,6 +88,7 @@
 import java.util.Map;
 import java.util.Set;
 
+@SuppressWarnings("GuardedBy")
 public class AppSearchImplTest {
     /**
      * Always trigger optimize in this class. OptimizeStrategy will be tested in its own test class.
@@ -80,6 +97,12 @@
     @Rule
     public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
     private File mAppSearchDir;
+
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+
+    // The caller access for this package
+    private final CallerAccess mSelfCallerAccess = new CallerAccess(mContext.getPackageName());
+
     private AppSearchImpl mAppSearchImpl;
 
     @Before
@@ -88,7 +111,9 @@
         mAppSearchImpl = AppSearchImpl.create(
                 mAppSearchDir,
                 new UnlimitedLimitConfig(),
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null,
+                ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
     }
 
     @After
@@ -362,20 +387,24 @@
         // Insert schema
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert a document and then remove it to generate garbage.
         GenericDocument document = new GenericDocument.Builder<>("namespace", "id", "type").build();
-        mAppSearchImpl.putDocument("package", "database", document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
         mAppSearchImpl.remove("package", "database", "namespace", "id",
                 /*removeStatsBuilder=*/ null);
 
@@ -409,28 +438,27 @@
     @Test
     public void testReset() throws Exception {
         // Insert schema
-        Context context = ApplicationProvider.getApplicationContext();
         List<AppSearchSchema> schemas = ImmutableList.of(
                 new AppSearchSchema.Builder("Type1").build(),
                 new AppSearchSchema.Builder("Type2").build());
-        mAppSearchImpl.setSchema(
-                context.getPackageName(),
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
                 "database1",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert a valid doc
         GenericDocument validDoc =
                 new GenericDocument.Builder<>("namespace1", "id1", "Type1").build();
         mAppSearchImpl.putDocument(
-                context.getPackageName(),
+                mContext.getPackageName(),
                 "database1",
                 validDoc,
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/null);
 
         // Query it via global query. We use the same code again later so this is to make sure we
@@ -438,10 +466,7 @@
         SearchResultPage results = mAppSearchImpl.globalQuery(
                 /*queryExpression=*/ "",
                 new SearchSpec.Builder().addFilterSchemas("Type1").build(),
-                context.getPackageName(),
-                /*visibilityStore=*/ null,
-                Process.INVALID_UID,
-                /*callerHasSystemAccess=*/ false,
+                mSelfCallerAccess,
                 /*logger=*/ null);
         assertThat(results.getResults()).hasSize(1);
         assertThat(results.getResults().get(0).getGenericDocument()).isEqualTo(validDoc);
@@ -450,7 +475,7 @@
         DocumentProto invalidDoc = DocumentProto.newBuilder()
                 .setNamespace("invalidNamespace")
                 .setUri("id2")
-                .setSchema(context.getPackageName() + "$database1/Type1")
+                .setSchema(mContext.getPackageName() + "$database1/Type1")
                 .build();
         AppSearchException e = assertThrows(
                 AppSearchException.class,
@@ -466,7 +491,8 @@
         InitializeStats.Builder initStatsBuilder = new InitializeStats.Builder();
         mAppSearchImpl.close();
         mAppSearchImpl = AppSearchImpl.create(
-                mAppSearchDir, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE);
+                mAppSearchDir, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         // Check recovery state
         InitializeStats initStats = initStatsBuilder.build();
@@ -485,45 +511,43 @@
         assertThat(initStats.getResetStatusCode()).isEqualTo(AppSearchResult.RESULT_OK);
 
         // Make sure all our data is gone
-        assertThat(mAppSearchImpl.getSchema(context.getPackageName(), "database1").getSchemas())
+        assertThat(mAppSearchImpl.getSchema(
+                /*packageName=*/mContext.getPackageName(),
+                /*databaseName=*/"database1",
+                /*callerAccess=*/mSelfCallerAccess)
+                .getSchemas())
                 .isEmpty();
         results = mAppSearchImpl.globalQuery(
                 /*queryExpression=*/ "",
                 new SearchSpec.Builder().addFilterSchemas("Type1").build(),
-                context.getPackageName(),
-                /*visibilityStore=*/ null,
-                Process.INVALID_UID,
-                /*callerHasSystemAccess=*/ false,
+                mSelfCallerAccess,
                 /*logger=*/ null);
         assertThat(results.getResults()).isEmpty();
 
         // Make sure the index can now be used successfully
-        mAppSearchImpl.setSchema(
-                context.getPackageName(),
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
                 "database1",
                 Collections.singletonList(new AppSearchSchema.Builder("Type1").build()),
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert a valid doc
         mAppSearchImpl.putDocument(
-                context.getPackageName(),
+                mContext.getPackageName(),
                 "database1",
                 validDoc,
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/null);
 
         // Query it via global query.
         results = mAppSearchImpl.globalQuery(
                 /*queryExpression=*/ "",
                 new SearchSpec.Builder().addFilterSchemas("Type1").build(),
-                context.getPackageName(),
-                /*visibilityStore=*/ null,
-                Process.INVALID_UID,
-                /*callerHasSystemAccess=*/ false,
+                mSelfCallerAccess,
                 /*logger=*/ null);
         assertThat(results.getResults()).hasSize(1);
         assertThat(results.getResults().get(0).getGenericDocument()).isEqualTo(validDoc);
@@ -547,35 +571,38 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert package2 schema
         List<AppSearchSchema> schema2 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema2").build());
-        mAppSearchImpl.setSchema(
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package2",
                 "database2",
                 schema2,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert package1 document
         GenericDocument document = new GenericDocument.Builder<>("namespace", "id", "schema1")
                 .build();
-        mAppSearchImpl.putDocument("package1", "database1", document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // No query filters specified, package2 shouldn't be able to query for package1's documents.
         SearchSpec searchSpec =
@@ -586,7 +613,12 @@
 
         // Insert package2 document
         document = new GenericDocument.Builder<>("namespace", "id", "schema2").build();
-        mAppSearchImpl.putDocument("package2", "database2", document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package2",
+                "database2",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // No query filters specified. package2 should only get its own documents back.
         searchResultPage = mAppSearchImpl.query("package2", "database2", "", searchSpec, /*logger=
@@ -604,35 +636,38 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert package2 schema
         List<AppSearchSchema> schema2 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema2").build());
-        mAppSearchImpl.setSchema(
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package2",
                 "database2",
                 schema2,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert package1 document
         GenericDocument document = new GenericDocument.Builder<>("namespace", "id",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // "package1" filter specified, but package2 shouldn't be able to query for package1's
         // documents.
@@ -646,7 +681,12 @@
 
         // Insert package2 document
         document = new GenericDocument.Builder<>("namespace", "id", "schema2").build();
-        mAppSearchImpl.putDocument("package2", "database2", document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package2",
+                "database2",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // "package2" filter specified, package2 should only get its own documents back.
         searchSpec = new SearchSpec.Builder()
@@ -660,43 +700,371 @@
     }
 
     @Test
-    public void testGlobalQueryEmptyDatabase() throws Exception {
+    public void testGlobalQuery_emptyPackage() throws Exception {
         SearchSpec searchSpec =
                 new SearchSpec.Builder().setTermMatch(TermMatchType.Code.PREFIX_VALUE).build();
         SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(
-                "",
+                /*queryExpression=*/"",
                 searchSpec,
-                /*callerPackageName=*/ "",
-                /*visibilityStore=*/ null,
-                Process.INVALID_UID,
-                /*callerHasSystemAccess=*/ false,
+                new CallerAccess(/*callingPackageName=*/""),
                 /*logger=*/ null);
         assertThat(searchResultPage.getResults()).isEmpty();
     }
 
     @Test
+    public void testSearchSuggestion() throws Exception {
+        // Insert schema
+        List<AppSearchSchema> schemas = Collections.singletonList(
+                new AppSearchSchema.Builder("type")
+                        .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+                                .setIndexingType(
+                                        AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .setTokenizerType(
+                                        AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .build())
+                        .build());
+        mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+
+        // Insert three documents.
+        GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "type")
+                .setPropertyString("body", "termOne")
+                .build();
+        GenericDocument doc2 = new GenericDocument.Builder<>("namespace", "id2", "type")
+                .setPropertyString("body", "termOne termTwo")
+                .build();
+        GenericDocument doc3 = new GenericDocument.Builder<>("namespace", "id3", "type")
+                .setPropertyString("body", "termOne termTwo termThree")
+                .build();
+        mAppSearchImpl.putDocument("package", "database", doc1,
+                /*sendChangeNotifications=*/ false, /*logger=*/ null);
+        mAppSearchImpl.putDocument("package", "database", doc2,
+                /*sendChangeNotifications=*/ false, /*logger=*/ null);
+        mAppSearchImpl.putDocument("package", "database", doc3,
+                /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+        List<SearchSuggestionResult> suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+        assertThat(suggestions).hasSize(3);
+        assertThat(suggestions.get(0).getSuggestedResult()).isEqualTo("termone");
+        assertThat(suggestions.get(1).getSuggestedResult()).isEqualTo("termtwo");
+        assertThat(suggestions.get(2).getSuggestedResult()).isEqualTo("termthree");
+
+        // Set total result count to be 2.
+        suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/2).build());
+        assertThat(suggestions).hasSize(2);
+        assertThat(suggestions.get(0).getSuggestedResult()).isEqualTo("termone");
+        assertThat(suggestions.get(1).getSuggestedResult()).isEqualTo("termtwo");
+    }
+
+    @Test
+    public void testSearchSuggestion_removeDocument() throws Exception {
+        // Insert schema
+        List<AppSearchSchema> schemas = Collections.singletonList(
+                new AppSearchSchema.Builder("type")
+                        .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+                                .setIndexingType(
+                                        AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .setTokenizerType(
+                                        AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .build())
+                        .build());
+        mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+
+        // Insert a document.
+        GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "type")
+                .setPropertyString("body", "termOne")
+                .build();
+        mAppSearchImpl.putDocument("package", "database", doc1,
+                /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+        List<SearchSuggestionResult> suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+        assertThat(suggestions).hasSize(1);
+        assertThat(suggestions.get(0).getSuggestedResult()).isEqualTo("termone");
+
+        // Remove the document.
+        mAppSearchImpl.remove("package", "database", "namespace", "id1",
+                /*removeStatsBuilder=*/null);
+
+        // Now we cannot find any suggestion
+        suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+        assertThat(suggestions).isEmpty();
+    }
+
+    @Test
+    public void testSearchSuggestion_replaceDocument() throws Exception {
+        // Insert schema
+        List<AppSearchSchema> schemas = Collections.singletonList(
+                new AppSearchSchema.Builder("type")
+                        .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+                                .setIndexingType(
+                                        AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .setTokenizerType(
+                                        AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .build())
+                        .build());
+        mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+
+        // Insert a document.
+        GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "type")
+                .setPropertyString("body", "tart two three")
+                .build();
+        mAppSearchImpl.putDocument("package", "database", doc1,
+                /*sendChangeNotifications=*/ false, /*logger=*/ null);
+        SearchSuggestionResult tartResult =
+                new SearchSuggestionResult.Builder().setSuggestedResult("tart").build();
+        SearchSuggestionResult twoResult =
+                new SearchSuggestionResult.Builder().setSuggestedResult("two").build();
+        SearchSuggestionResult threeResult =
+                new SearchSuggestionResult.Builder().setSuggestedResult("three").build();
+        SearchSuggestionResult twistResult =
+                new SearchSuggestionResult.Builder().setSuggestedResult("twist").build();
+        List<SearchSuggestionResult> suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+        assertThat(suggestions).containsExactly(tartResult, twoResult, threeResult);
+
+        // replace the document with two terms.
+        GenericDocument replaceDocument = new GenericDocument.Builder<>("namespace", "id1", "type")
+                .setPropertyString("body", "twist three")
+                .build();
+        mAppSearchImpl.putDocument("package", "database", replaceDocument,
+                /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+        // Now we cannot find any suggestion
+        suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+        assertThat(suggestions).containsExactly(twistResult, threeResult);
+    }
+
+    @Test
+    public void testSearchSuggestion_namespaceFilter() throws Exception {
+        // Insert schema
+        List<AppSearchSchema> schemas = Collections.singletonList(
+                new AppSearchSchema.Builder("type")
+                        .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+                                .setIndexingType(
+                                        AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .setTokenizerType(
+                                        AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .build())
+                        .build());
+        mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+
+        // Insert three documents.
+        GenericDocument doc1 = new GenericDocument.Builder<>("namespace1", "id1", "type")
+                .setPropertyString("body", "term1")
+                .build();
+        GenericDocument doc2 = new GenericDocument.Builder<>("namespace2", "id2", "type")
+                .setPropertyString("body", "term1 term2")
+                .build();
+        GenericDocument doc3 = new GenericDocument.Builder<>("namespace3", "id3", "type")
+                .setPropertyString("body", "term1 term2 term3")
+                .build();
+
+        mAppSearchImpl.putDocument("package", "database", doc1,
+                /*sendChangeNotifications=*/ false, /*logger=*/ null);
+        mAppSearchImpl.putDocument("package", "database", doc2,
+                /*sendChangeNotifications=*/ false, /*logger=*/ null);
+        mAppSearchImpl.putDocument("package", "database", doc3,
+                /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+        List<SearchSuggestionResult> suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+                        .addFilterNamespaces("namespace1").build());
+        assertThat(suggestions).hasSize(1);
+        assertThat(suggestions.get(0).getSuggestedResult()).isEqualTo("term1");
+
+        suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+                        .addFilterNamespaces("namespace1", "namespace2")
+                        .build());
+        assertThat(suggestions).hasSize(2);
+        assertThat(suggestions.get(0).getSuggestedResult()).isEqualTo("term1");
+        assertThat(suggestions.get(1).getSuggestedResult()).isEqualTo("term2");
+    }
+
+    @Test
+    public void testSearchSuggestion_invalidPrefix() throws Exception {
+        // Insert schema just put something in the AppSearch to make it searchable.
+        List<AppSearchSchema> schemas = Collections.singletonList(
+                new AppSearchSchema.Builder("type")
+                        .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+                                .setIndexingType(
+                                        AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .setTokenizerType(
+                                        AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .build())
+                        .build());
+        mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        GenericDocument doc = new GenericDocument.Builder<>("namespace1", "id1", "type")
+                .setPropertyString("body", "term1")
+                .build();
+        mAppSearchImpl.putDocument("package", "database", doc,
+                /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+        List<SearchSuggestionResult> suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"t:",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+        assertThat(suggestions).isEmpty();
+        suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"t-",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+        assertThat(suggestions).isEmpty();
+        suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"t  ",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+        assertThat(suggestions).isEmpty();
+        suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"{t}",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+        assertThat(suggestions).isEmpty();
+        suggestions = mAppSearchImpl.searchSuggestion(
+                "package",
+                "database",
+                /*suggestionQueryExpression=*/"(t)",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+        assertThat(suggestions).isEmpty();
+    }
+
+    @Test
+    public void testSearchSuggestion_emptyPrefix() throws Exception {
+        // Insert schema just put something in the AppSearch to make it searchable.
+        List<AppSearchSchema> schemas = Collections.singletonList(
+                new AppSearchSchema.Builder("type")
+                        .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+                                .setIndexingType(
+                                        AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .setTokenizerType(
+                                        AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .build())
+                        .build());
+        mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        GenericDocument doc = new GenericDocument.Builder<>("namespace1", "id1", "type")
+                .setPropertyString("body", "term1")
+                .build();
+        mAppSearchImpl.putDocument("package", "database", doc,
+                /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+        AppSearchException e = assertThrows(AppSearchException.class,
+                () -> mAppSearchImpl.searchSuggestion(
+                        "package",
+                        "database",
+                        /*suggestionQueryExpression=*/"",
+                        new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+                                .addFilterNamespaces("namespace1")
+                                .build()));
+        assertThat(e.getResultCode()).isEqualTo(RESULT_INVALID_ARGUMENT);
+        assertThat(e).hasMessageThat().contains("suggestionQueryExpression cannot be empty.");
+    }
+
+    @Test
     public void testGetNextPageToken_query() throws Exception {
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert two package1 documents
         GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
                 "schema1").build();
         GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
-        mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Query for only 1 result per page
         SearchSpec searchSpec = new SearchSpec.Builder()
@@ -723,24 +1091,33 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert two package1 documents
         GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
                 "schema1").build();
         GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
-        mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Query for only 1 result per page
         SearchSpec searchSpec = new SearchSpec.Builder()
@@ -777,33 +1154,44 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert two package1 documents
         GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
                 "schema1").build();
         GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
-        mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Query for only 1 result per page
         SearchSpec searchSpec = new SearchSpec.Builder()
                 .setTermMatch(TermMatchType.Code.PREFIX_VALUE)
                 .setResultCountPerPage(1)
                 .build();
-        SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(/*queryExpression=*/ "",
-                searchSpec, "package1", /*visibilityStore=*/ null, Process.myUid(),
-                /*callerHasSystemAccess=*/ false, /*logger=*/ null);
+        SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(
+                /*queryExpression=*/ "",
+                searchSpec,
+                new CallerAccess(/*callingPackageName=*/"package1"),
+                /*logger=*/ null);
 
         // Document2 will come first because it was inserted last and default return order is
         // most recent.
@@ -822,33 +1210,44 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert two package1 documents
         GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
                 "schema1").build();
         GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
-        mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Query for only 1 result per page
         SearchSpec searchSpec = new SearchSpec.Builder()
                 .setTermMatch(TermMatchType.Code.PREFIX_VALUE)
                 .setResultCountPerPage(1)
                 .build();
-        SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(/*queryExpression=*/ "",
-                searchSpec, "package1", /*visibilityStore=*/ null, Process.myUid(),
-                /*callerHasSystemAccess=*/ false, /*logger=*/ null);
+        SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(
+                /*queryExpression=*/ "",
+                searchSpec,
+                new CallerAccess(/*callingPackageName=*/"package1"),
+                /*logger=*/ null);
 
         // Document2 will come first because it was inserted last and default return order is
         // most recent.
@@ -877,24 +1276,33 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert two package1 documents
         GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
                 "schema1").build();
         GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
-        mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Query for only 1 result per page
         SearchSpec searchSpec = new SearchSpec.Builder()
@@ -928,21 +1336,25 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert one package1 documents
         GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Query for 2 results per page, so all the results can fit in one page.
         SearchSpec searchSpec = new SearchSpec.Builder()
@@ -968,24 +1380,33 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert two package1 documents
         GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
                 "schema1").build();
         GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
-        mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Query for only 1 result per page
         SearchSpec searchSpec = new SearchSpec.Builder()
@@ -1022,33 +1443,44 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert two package1 documents
         GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
                 "schema1").build();
         GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
-        mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Query for only 1 result per page
         SearchSpec searchSpec = new SearchSpec.Builder()
                 .setTermMatch(TermMatchType.Code.PREFIX_VALUE)
                 .setResultCountPerPage(1)
                 .build();
-        SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(/*queryExpression=*/ "",
-                searchSpec, "package1", /*visibilityStore=*/ null, Process.myUid(),
-                /*callerHasSystemAccess=*/ false, /*logger=*/ null);
+        SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(
+                /*queryExpression=*/ "",
+                searchSpec,
+                new CallerAccess(/*callingPackageName=*/"package1"),
+                /*logger=*/ null);
 
         // Document2 will come first because it was inserted last and default return order is
         // most recent.
@@ -1074,33 +1506,44 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert two package1 documents
         GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
                 "schema1").build();
         GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
-        mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Query for only 1 result per page
         SearchSpec searchSpec = new SearchSpec.Builder()
                 .setTermMatch(TermMatchType.Code.PREFIX_VALUE)
                 .setResultCountPerPage(1)
                 .build();
-        SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(/*queryExpression=*/ "",
-                searchSpec, "package1", /*visibilityStore=*/ null, Process.myUid(),
-                /*callerHasSystemAccess=*/ false, /*logger=*/ null);
+        SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(
+                /*queryExpression=*/ "",
+                searchSpec,
+                new CallerAccess(/*callingPackageName=*/"package1"),
+                /*logger=*/ null);
 
         // Document2 will come first because it was inserted last and default return order is
         // most recent.
@@ -1151,16 +1594,15 @@
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("Email").build());
         // Set schema Email to AppSearch database1
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database1",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Create expected schemaType proto.
         SchemaProto expectedProto = SchemaProto.newBuilder()
@@ -1189,32 +1631,32 @@
                 .build());
         oldSchemas.add(new AppSearchSchema.Builder("Text").build());
         // Set schema Email to AppSearch database1
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database1",
                 oldSchemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Create incompatible schema
         List<AppSearchSchema> newSchemas =
                 Collections.singletonList(new AppSearchSchema.Builder("Email").build());
 
         // set email incompatible and delete text
-        SetSchemaResponse setSchemaResponse = mAppSearchImpl.setSchema(
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database1",
                 newSchemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ true,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        SetSchemaResponse setSchemaResponse = internalSetSchemaResponse.getSetSchemaResponse();
+
         assertThat(setSchemaResponse.getDeletedTypes()).containsExactly("Text");
         assertThat(setSchemaResponse.getIncompatibleTypes()).containsExactly("Email");
     }
@@ -1228,16 +1670,15 @@
                 new AppSearchSchema.Builder("Email").build(),
                 new AppSearchSchema.Builder("Document").build());
         // Set schema Email and Document to AppSearch database1
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database1",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Create expected schemaType proto.
         SchemaProto expectedProto = SchemaProto.newBuilder()
@@ -1257,31 +1698,30 @@
 
         final List<AppSearchSchema> finalSchemas = Collections.singletonList(
                 new AppSearchSchema.Builder("Email").build());
-        SetSchemaResponse setSchemaResponse =
-                mAppSearchImpl.setSchema(
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                         "package",
                         "database1",
                         finalSchemas,
-                        /*visibilityStore=*/ null,
-                        /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                        /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                        /*visibilityDocuments=*/ Collections.emptyList(),
                         /*forceOverride=*/ false,
                         /*version=*/ 0,
                         /* setSchemaStatsBuilder= */ null);
-        // Check the Document type has been deleted.
+        // We are fail to set this call since forceOverride is false.
+        assertThat(internalSetSchemaResponse.isSuccess()).isFalse();
+        SetSchemaResponse setSchemaResponse = internalSetSchemaResponse.getSetSchemaResponse();
+        // Check the incompatible reason is we are trying to delete Document type.
         assertThat(setSchemaResponse.getDeletedTypes()).containsExactly("Document");
 
         // ForceOverride to delete.
-        mAppSearchImpl.setSchema(
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database1",
                 finalSchemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ true,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Check Document schema is removed.
         expectedProto = SchemaProto.newBuilder()
@@ -1308,26 +1748,24 @@
                 new AppSearchSchema.Builder("Document").build());
 
         // Set schema Email and Document to AppSearch database1 and 2
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database1",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
-        mAppSearchImpl.setSchema(
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database2",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Create expected schemaType proto.
         SchemaProto expectedProto = SchemaProto.newBuilder()
@@ -1352,16 +1790,15 @@
 
         // Save only Email to database1 this time.
         schemas = Collections.singletonList(new AppSearchSchema.Builder("Email").build());
-        mAppSearchImpl.setSchema(
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database1",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ true,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Create expected schemaType list, database 1 should only contain Email but database 2
         // remains in same.
@@ -1393,21 +1830,24 @@
         // Insert package schema
         List<AppSearchSchema> schema =
                 ImmutableList.of(new AppSearchSchema.Builder("schema").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schema,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert package document
         GenericDocument document = new GenericDocument.Builder<>("namespace", "id",
                 "schema").build();
-        mAppSearchImpl.putDocument("package", "database", document,
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document,
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // Verify the document is indexed.
@@ -1444,31 +1884,36 @@
             existingPackages.add(PrefixUtil.getPackageName(existingSchemas.get(i).getSchemaType()));
         }
 
+        // Create VisibilityDocument
+        VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("schema")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .setCreationTimestampMillis(12345L)
+                .build();
+
         // Insert schema for package A and B.
         List<AppSearchSchema> schema =
                 ImmutableList.of(new AppSearchSchema.Builder("schema").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "packageA",
                 "database",
                 schema,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
-        mAppSearchImpl.setSchema(
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "packageB",
                 "database",
                 schema,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
-        // Verify these two packages is stored in AppSearch
+        // Verify these two packages are stored in AppSearch.
         SchemaProto expectedProto = SchemaProto.newBuilder()
                 .addTypes(
                         SchemaTypeConfigProto.newBuilder()
@@ -1483,6 +1928,26 @@
         assertThat(mAppSearchImpl.getSchemaProtoLocked().getTypesList())
                 .containsExactlyElementsIn(expectedTypes);
 
+        // Verify these two visibility documents are stored in AppSearch.
+        VisibilityDocument expectedVisibilityDocumentA =
+                new VisibilityDocument.Builder("packageA$database/schema")
+                        .setNotDisplayedBySystem(true)
+                        .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                        .setCreationTimestampMillis(12345L)
+                        .build();
+        VisibilityDocument expectedVisibilityDocumentB =
+                new VisibilityDocument.Builder("packageB$database/schema")
+                        .setNotDisplayedBySystem(true)
+                        .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                        .setCreationTimestampMillis(12345L)
+                        .build();
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked
+                .getVisibility("packageA$database/schema"))
+                .isEqualTo(expectedVisibilityDocumentA);
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked
+                .getVisibility("packageB$database/schema"))
+                .isEqualTo(expectedVisibilityDocumentB);
+
         // Prune packages
         mAppSearchImpl.prunePackageData(existingPackages);
 
@@ -1491,6 +1956,12 @@
                 .containsExactlyElementsIn(existingSchemas);
         assertThat(mAppSearchImpl.getPackageToDatabases())
                 .containsExactlyEntriesIn(existingDatabases);
+
+        // Verify the VisibilitySetting is removed.
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked
+                .getVisibility("packageA$database/schema")).isNull();
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked
+                .getVisibility("packageB$database/schema")).isNull();
     }
 
     @Test
@@ -1501,71 +1972,121 @@
 
         // Has database1
         expectedMapping.put("package1", ImmutableSet.of("database1"));
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1", "database1",
                 Collections.singletonList(new AppSearchSchema.Builder("schema").build()),
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
         assertThat(mAppSearchImpl.getPackageToDatabases()).containsExactlyEntriesIn(
                 expectedMapping);
 
         // Has both databases
         expectedMapping.put("package1", ImmutableSet.of("database1", "database2"));
-        mAppSearchImpl.setSchema(
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1", "database2",
                 Collections.singletonList(new AppSearchSchema.Builder("schema").build()),
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
         assertThat(mAppSearchImpl.getPackageToDatabases()).containsExactlyEntriesIn(
                 expectedMapping);
 
         // Has both packages
         expectedMapping.put("package2", ImmutableSet.of("database1"));
-        mAppSearchImpl.setSchema(
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package2", "database1",
                 Collections.singletonList(new AppSearchSchema.Builder("schema").build()),
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
         assertThat(mAppSearchImpl.getPackageToDatabases()).containsExactlyEntriesIn(
                 expectedMapping);
     }
 
+    @Test
+    public void testGetAllPrefixedSchemaTypes() throws Exception {
+        // Insert schema
+        List<AppSearchSchema> schemas1 =
+                Collections.singletonList(new AppSearchSchema.Builder("type1").build());
+        List<AppSearchSchema> schemas2 =
+                Collections.singletonList(new AppSearchSchema.Builder("type2").build());
+        List<AppSearchSchema> schemas3 =
+                Collections.singletonList(new AppSearchSchema.Builder("type3").build());
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package1",
+                "database1",
+                schemas1,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package1",
+                "database2",
+                schemas2,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package2",
+                "database1",
+                schemas3,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        assertThat(mAppSearchImpl.getAllPrefixedSchemaTypes()).containsExactly(
+                "package1$database1/type1",
+                "package1$database2/type2",
+                "package2$database1/type3",
+                "VS#Pkg$VS#Db/VisibilityType",  // plus the stored Visibility schema
+                "VS#Pkg$VS#Db/VisibilityPermissionType");
+    }
+
     @FlakyTest(bugId = 204186664)
     @Test
     public void testReportUsage() throws Exception {
         // Insert schema
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert two docs
         GenericDocument document1 =
                 new GenericDocument.Builder<>("namespace", "id1", "type").build();
         GenericDocument document2 =
                 new GenericDocument.Builder<>("namespace", "id2", "type").build();
-        mAppSearchImpl.putDocument("package", "database", document1, /*logger=*/ null);
-        mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Report some usages. id1 has 2 app and 1 system usage, id2 has 1 app and 2 system usage.
         mAppSearchImpl.reportUsage("package", "database", "namespace",
@@ -1638,16 +2159,15 @@
         // Insert schema for "package1"
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Since "package1" doesn't have a document, it get any space attributed to it.
         StorageInfo storageInfo = mAppSearchImpl.getStorageInfoForPackage("package1");
@@ -1662,39 +2182,52 @@
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
 
         // Insert schema for "package1"
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert document for "package1"
         GenericDocument document =
                 new GenericDocument.Builder<>("namespace", "id1", "type").build();
-        mAppSearchImpl.putDocument("package1", "database", document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Insert schema for "package2"
-        mAppSearchImpl.setSchema(
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package2",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert two documents for "package2"
         document = new GenericDocument.Builder<>("namespace", "id1", "type").build();
-        mAppSearchImpl.putDocument("package2", "database", document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package2",
+                "database",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
         document = new GenericDocument.Builder<>("namespace", "id2", "type").build();
-        mAppSearchImpl.putDocument("package2", "database", document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package2",
+                "database",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         StorageInfo storageInfo = mAppSearchImpl.getStorageInfoForPackage("package1");
         long size1 = storageInfo.getSizeBytes();
@@ -1728,16 +2261,15 @@
         // Insert schema for "package1"
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // "package2" doesn't exist yet, so it shouldn't have any storage size
         StorageInfo storageInfo = mAppSearchImpl.getStorageInfoForDatabase("package1",
@@ -1752,16 +2284,15 @@
         // Insert schema for "package1"
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Since "package1", "database1" doesn't have a document, it get any space attributed to it.
         StorageInfo storageInfo = mAppSearchImpl.getStorageInfoForDatabase("package1", "database1");
@@ -1775,38 +2306,50 @@
         // Insert schema for "package1", "database1" and "database2"
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
-        mAppSearchImpl.setSchema(
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database2",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Add a document for "package1", "database1"
         GenericDocument document =
                 new GenericDocument.Builder<>("namespace1", "id1", "type").build();
-        mAppSearchImpl.putDocument("package1", "database1", document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Add two documents for "package1", "database2"
         document = new GenericDocument.Builder<>("namespace1", "id1", "type").build();
-        mAppSearchImpl.putDocument("package1", "database2", document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database2",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
         document = new GenericDocument.Builder<>("namespace1", "id2", "type").build();
-        mAppSearchImpl.putDocument("package1", "database2", document, /*logger=*/ null);
-
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database2",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         StorageInfo storageInfo = mAppSearchImpl.getStorageInfoForDatabase("package1", "database1");
         long size1 = storageInfo.getSizeBytes();
@@ -1830,16 +2373,15 @@
         // Initial check that we could do something at first.
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         mAppSearchImpl.close();
 
@@ -1848,20 +2390,21 @@
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null));
 
         assertThrows(IllegalStateException.class, () -> mAppSearchImpl.getSchema(
-                "package", "database"));
+                /*packageName=*/"package",
+                /*databaseName=*/"database",
+                /*callerAccess=*/mSelfCallerAccess));
 
         assertThrows(IllegalStateException.class, () -> mAppSearchImpl.putDocument(
                 "package",
                 "database",
                 new GenericDocument.Builder<>("namespace", "id", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null));
 
         assertThrows(IllegalStateException.class, () -> mAppSearchImpl.getDocument(
@@ -1877,10 +2420,7 @@
         assertThrows(IllegalStateException.class, () -> mAppSearchImpl.globalQuery(
                 "query",
                 new SearchSpec.Builder().build(),
-                "package",
-                /*visibilityStore=*/ null,
-                Process.INVALID_UID,
-                /*callerHasSystemAccess=*/ false,
+                mSelfCallerAccess,
                 /*logger=*/ null));
 
         assertThrows(IllegalStateException.class, () -> mAppSearchImpl.getNextPage("package",
@@ -1918,21 +2458,25 @@
     public void testPutPersistsWithLiteFlush() throws Exception {
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Add a document and persist it.
         GenericDocument document =
                 new GenericDocument.Builder<>("namespace1", "id1", "type").build();
-        mAppSearchImpl.putDocument("package", "database", document, /*logger=*/null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
         mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
 
         GenericDocument getResult = mAppSearchImpl.getDocument("package", "database", "namespace1",
@@ -1945,7 +2489,8 @@
                 mAppSearchDir,
                 new UnlimitedLimitConfig(),
                 /*initStatsBuilder=*/ null,
-                ALWAYS_OPTIMIZE);
+                ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
         getResult = appSearchImpl2.getDocument("package", "database", "namespace1",
                 "id1",
                 Collections.emptyMap());
@@ -1957,24 +2502,33 @@
     public void testDeletePersistsWithLiteFlush() throws Exception {
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Add two documents and persist them.
         GenericDocument document1 =
                 new GenericDocument.Builder<>("namespace1", "id1", "type").build();
-        mAppSearchImpl.putDocument("package", "database", document1, /*logger=*/null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
         GenericDocument document2 =
                 new GenericDocument.Builder<>("namespace1", "id2", "type").build();
-        mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
         mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
 
         GenericDocument getResult = mAppSearchImpl.getDocument("package", "database", "namespace1",
@@ -2004,7 +2558,8 @@
                 mAppSearchDir,
                 new UnlimitedLimitConfig(),
                 /*initStatsBuilder=*/ null,
-                ALWAYS_OPTIMIZE);
+                ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
         assertThrows(AppSearchException.class, () -> appSearchImpl2.getDocument("package",
                 "database",
                 "namespace1",
@@ -2021,24 +2576,33 @@
     public void testDeleteByQueryPersistsWithLiteFlush() throws Exception {
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Add two documents and persist them.
         GenericDocument document1 =
                 new GenericDocument.Builder<>("namespace1", "id1", "type").build();
-        mAppSearchImpl.putDocument("package", "database", document1, /*logger=*/null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
         GenericDocument document2 =
                 new GenericDocument.Builder<>("namespace2", "id2", "type").build();
-        mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
         mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
 
         GenericDocument getResult = mAppSearchImpl.getDocument("package", "database", "namespace1",
@@ -2070,7 +2634,8 @@
                 mAppSearchDir,
                 new UnlimitedLimitConfig(),
                 /*initStatsBuilder=*/ null,
-                ALWAYS_OPTIMIZE);
+                ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
         assertThrows(AppSearchException.class, () -> appSearchImpl2.getDocument("package",
                 "database",
                 "namespace1",
@@ -2087,24 +2652,33 @@
     public void testGetIcingSearchEngineStorageInfo() throws Exception {
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Add two documents
         GenericDocument document1 =
                 new GenericDocument.Builder<>("namespace1", "id1", "type").build();
-        mAppSearchImpl.putDocument("package", "database", document1, /*logger=*/null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
         GenericDocument document2 =
                 new GenericDocument.Builder<>("namespace1", "id2", "type").build();
-        mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         StorageInfoProto storageInfo = mAppSearchImpl.getRawStorageInfoProto();
 
@@ -2116,7 +2690,52 @@
                 .isEqualTo(2);
         assertThat(
                 storageInfo.getSchemaStoreStorageInfo().getNumSchemaTypes())
-                .isEqualTo(1);
+                .isEqualTo(3); // +2 for VisibilitySchema
+    }
+
+    @Test
+    public void testGetIcingSearchEngineDebugInfo() throws Exception {
+        List<AppSearchSchema> schemas =
+                Collections.singletonList(new AppSearchSchema.Builder("type").build());
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Add two documents
+        GenericDocument document1 =
+                new GenericDocument.Builder<>("namespace1", "id1", "type").build();
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        GenericDocument document2 =
+                new GenericDocument.Builder<>("namespace1", "id2", "type").build();
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+
+        DebugInfoProto debugInfo =
+                mAppSearchImpl.getRawDebugInfoProto(DebugInfoVerbosity.Code.DETAILED);
+
+        // Simple checks to verify if we can get correct DebugInfoProto from IcingSearchEngine
+        // No need to cover all the fields
+        assertThat(debugInfo.getDocumentInfo().getCorpusInfoList()).hasSize(1);
+        assertThat(
+                debugInfo.getDocumentInfo().getDocumentStorageInfo().getNumAliveDocuments())
+                .isEqualTo(2);
+        assertThat(debugInfo.getSchemaInfo().getSchema().getTypesList())
+                .hasSize(3); // +2 for VisibilitySchema
     }
 
     @Test
@@ -2135,28 +2754,38 @@
                     public int getMaxDocumentCount() {
                         return 1;
                     }
+
+                    @Override
+                    public int getMaxSuggestionCount() {
+                        return Integer.MAX_VALUE;
+                    }
                 },
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         // Insert schema
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert a document which is too large
         GenericDocument document = new GenericDocument.Builder<>(
                 "this_namespace_is_long_to_make_the_doc_big", "id", "type").build();
         AppSearchException e = assertThrows(AppSearchException.class, () ->
-                mAppSearchImpl.putDocument("package", "database", document, /*logger=*/ null));
+                mAppSearchImpl.putDocument(
+                        "package",
+                        "database",
+                        document,
+                        /*sendChangeNotifications=*/ false,
+                        /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
                 "Document \"id\" for package \"package\" serialized to 99 bytes, which exceeds"
@@ -2166,13 +2795,23 @@
         // index 1 document.
         GenericDocument document2 =
                 new GenericDocument.Builder<>("namespace", "id2", "type").build();
-        mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Now we should get a failure
         GenericDocument document3 =
                 new GenericDocument.Builder<>("namespace", "id3", "type").build();
         e = assertThrows(AppSearchException.class, () ->
-                mAppSearchImpl.putDocument("package", "database", document3, /*logger=*/ null));
+                mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document3,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
                 "Package \"package\" exceeded limit of 1 documents");
@@ -2195,35 +2834,46 @@
                     public int getMaxDocumentCount() {
                         return 1;
                     }
+
+                    @Override
+                    public int getMaxSuggestionCount() {
+                        return Integer.MAX_VALUE;
+                    }
                 },
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         // Insert schema
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Index a document
         mAppSearchImpl.putDocument(
                 "package",
                 "database",
                 new GenericDocument.Builder<>("namespace", "id1", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // Now we should get a failure
         GenericDocument document2 =
                 new GenericDocument.Builder<>("namespace", "id2", "type").build();
         AppSearchException e = assertThrows(AppSearchException.class, () ->
-                mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/ null));
+                mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
                 "Package \"package\" exceeded limit of 1 documents");
@@ -2242,12 +2892,23 @@
                     public int getMaxDocumentCount() {
                         return 1;
                     }
+
+                    @Override
+                    public int getMaxSuggestionCount() {
+                        return Integer.MAX_VALUE;
+                    }
                 },
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         // Make sure the limit is maintained
         e = assertThrows(AppSearchException.class, () ->
-                mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/ null));
+                mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
                 "Package \"package\" exceeded limit of 1 documents");
@@ -2269,45 +2930,58 @@
                     public int getMaxDocumentCount() {
                         return 3;
                     }
+
+                    @Override
+                    public int getMaxSuggestionCount() {
+                        return Integer.MAX_VALUE;
+                    }
                 },
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         // Insert schema
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Index 3 documents
         mAppSearchImpl.putDocument(
                 "package",
                 "database",
                 new GenericDocument.Builder<>("namespace", "id1", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
         mAppSearchImpl.putDocument(
                 "package",
                 "database",
                 new GenericDocument.Builder<>("namespace", "id2", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
         mAppSearchImpl.putDocument(
                 "package",
                 "database",
                 new GenericDocument.Builder<>("namespace", "id3", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // Now we should get a failure
         GenericDocument document4 =
                 new GenericDocument.Builder<>("namespace", "id4", "type").build();
         AppSearchException e = assertThrows(AppSearchException.class, () ->
-                mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null));
+                mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document4,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
                 "Package \"package\" exceeded limit of 3 documents");
@@ -2319,7 +2993,12 @@
 
         // Should still fail
         e = assertThrows(AppSearchException.class, () ->
-                mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null));
+                mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document4,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
                 "Package \"package\" exceeded limit of 3 documents");
@@ -2329,13 +3008,19 @@
                 "package", "database", "namespace", "id2", /*removeStatsBuilder=*/null);
 
         // Now doc4 should work
-        mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document4,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // The next one should fail again
         e = assertThrows(AppSearchException.class, () -> mAppSearchImpl.putDocument(
                 "package",
                 "database",
                 new GenericDocument.Builder<>("namespace", "id5", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
@@ -2359,63 +3044,67 @@
                     public int getMaxDocumentCount() {
                         return 2;
                     }
+
+                    @Override
+                    public int getMaxSuggestionCount() {
+                        return Integer.MAX_VALUE;
+                    }
                 },
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         // Insert schema
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
-        mAppSearchImpl.setSchema(
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database2",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
-        mAppSearchImpl.setSchema(
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package2",
                 "database1",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
-        mAppSearchImpl.setSchema(
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package2",
                 "database2",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Index documents in package1/database1
         mAppSearchImpl.putDocument(
                 "package1",
                 "database1",
                 new GenericDocument.Builder<>("namespace", "id1", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
         mAppSearchImpl.putDocument(
                 "package1",
                 "database2",
                 new GenericDocument.Builder<>("namespace", "id2", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // Indexing a third doc into package1 should fail (here we use database3)
@@ -2424,6 +3113,7 @@
                         "package1",
                         "database3",
                         new GenericDocument.Builder<>("namespace", "id3", "type").build(),
+                        /*sendChangeNotifications=*/ false,
                         /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
@@ -2434,6 +3124,7 @@
                 "package2",
                 "database1",
                 new GenericDocument.Builder<>("namespace", "id1", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // Reinitialize to make sure packages are parsed correctly on init
@@ -2450,8 +3141,14 @@
                     public int getMaxDocumentCount() {
                         return 2;
                     }
+
+                    @Override
+                    public int getMaxSuggestionCount() {
+                        return Integer.MAX_VALUE;
+                    }
                 },
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         // package1 should still be out of space
         e = assertThrows(AppSearchException.class, () ->
@@ -2459,6 +3156,7 @@
                         "package1",
                         "database4",
                         new GenericDocument.Builder<>("namespace", "id4", "type").build(),
+                        /*sendChangeNotifications=*/ false,
                         /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
@@ -2469,6 +3167,7 @@
                 "package2",
                 "database2",
                 new GenericDocument.Builder<>("namespace", "id2", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // now package2 really is out of space
@@ -2477,6 +3176,7 @@
                         "package2",
                         "database3",
                         new GenericDocument.Builder<>("namespace", "id3", "type").build(),
+                        /*sendChangeNotifications=*/ false,
                         /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
@@ -2499,8 +3199,14 @@
                     public int getMaxDocumentCount() {
                         return 3;
                     }
+
+                    @Override
+                    public int getMaxSuggestionCount() {
+                        return Integer.MAX_VALUE;
+                    }
                 },
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         // Insert schema
         List<AppSearchSchema> schemas = Collections.singletonList(
@@ -2512,16 +3218,15 @@
                                         AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                                 .build())
                         .build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Index 3 documents
         mAppSearchImpl.putDocument(
@@ -2530,6 +3235,7 @@
                 new GenericDocument.Builder<>("namespace", "id1", "type")
                         .setPropertyString("body", "tablet")
                         .build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
         mAppSearchImpl.putDocument(
                 "package",
@@ -2537,6 +3243,7 @@
                 new GenericDocument.Builder<>("namespace", "id2", "type")
                         .setPropertyString("body", "tabby")
                         .build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
         mAppSearchImpl.putDocument(
                 "package",
@@ -2544,13 +3251,19 @@
                 new GenericDocument.Builder<>("namespace", "id3", "type")
                         .setPropertyString("body", "grabby")
                         .build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // Now we should get a failure
         GenericDocument document4 =
                 new GenericDocument.Builder<>("namespace", "id4", "type").build();
         AppSearchException e = assertThrows(AppSearchException.class, () ->
-                mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null));
+                mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document4,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
                 "Package \"package\" exceeded limit of 3 documents");
@@ -2565,7 +3278,12 @@
 
         // Should still fail
         e = assertThrows(AppSearchException.class, () ->
-                mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null));
+                mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document4,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
                 "Package \"package\" exceeded limit of 3 documents");
@@ -2579,11 +3297,17 @@
                 /*removeStatsBuilder=*/null);
 
         // Now doc4 and doc5 should work
-        mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document4,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
         mAppSearchImpl.putDocument(
                 "package",
                 "database",
                 new GenericDocument.Builder<>("namespace", "id5", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // We only deleted 2 docs so the next one should fail again
@@ -2591,6 +3315,7 @@
                 "package",
                 "database",
                 new GenericDocument.Builder<>("namespace", "id6", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
@@ -2613,8 +3338,14 @@
                     public int getMaxDocumentCount() {
                         return 2;
                     }
+
+                    @Override
+                    public int getMaxSuggestionCount() {
+                        return Integer.MAX_VALUE;
+                    }
                 },
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         // Insert schema
         List<AppSearchSchema> schemas = Collections.singletonList(
@@ -2622,16 +3353,15 @@
                         .addProperty(
                                 new AppSearchSchema.StringPropertyConfig.Builder("body").build())
                         .build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Index a document
         mAppSearchImpl.putDocument(
@@ -2640,6 +3370,7 @@
                 new GenericDocument.Builder<>("namespace", "id1", "type")
                         .setPropertyString("body", "id1.orig")
                         .build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
         // Replace it with another doc
         mAppSearchImpl.putDocument(
@@ -2648,6 +3379,7 @@
                 new GenericDocument.Builder<>("namespace", "id1", "type")
                         .setPropertyString("body", "id1.new")
                         .build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // Index id2. This should pass but only because we check for replacements.
@@ -2655,13 +3387,19 @@
                 "package",
                 "database",
                 new GenericDocument.Builder<>("namespace", "id2", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // Now we should get a failure on id3
         GenericDocument document3 =
                 new GenericDocument.Builder<>("namespace", "id3", "type").build();
         AppSearchException e = assertThrows(AppSearchException.class, () ->
-                mAppSearchImpl.putDocument("package", "database", document3, /*logger=*/ null));
+                mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document3,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
                 "Package \"package\" exceeded limit of 2 documents");
@@ -2684,8 +3422,14 @@
                     public int getMaxDocumentCount() {
                         return 2;
                     }
+
+                    @Override
+                    public int getMaxSuggestionCount() {
+                        return Integer.MAX_VALUE;
+                    }
                 },
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         // Insert schema
         List<AppSearchSchema> schemas = Collections.singletonList(
@@ -2693,16 +3437,15 @@
                         .addProperty(
                                 new AppSearchSchema.StringPropertyConfig.Builder("body").build())
                         .build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package",
                 "database",
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Index a document
         mAppSearchImpl.putDocument(
@@ -2711,6 +3454,7 @@
                 new GenericDocument.Builder<>("namespace", "id1", "type")
                         .setPropertyString("body", "id1.orig")
                         .build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
         // Replace it with another doc
         mAppSearchImpl.putDocument(
@@ -2719,6 +3463,7 @@
                 new GenericDocument.Builder<>("namespace", "id1", "type")
                         .setPropertyString("body", "id1.new")
                         .build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // Reinitialize to make sure replacements are correctly accounted for by init
@@ -2735,23 +3480,1890 @@
                     public int getMaxDocumentCount() {
                         return 2;
                     }
+
+                    @Override
+                    public int getMaxSuggestionCount() {
+                        return Integer.MAX_VALUE;
+                    }
                 },
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         // Index id2. This should pass but only because we check for replacements.
         mAppSearchImpl.putDocument(
                 "package",
                 "database",
                 new GenericDocument.Builder<>("namespace", "id2", "type").build(),
+                /*sendChangeNotifications=*/ false,
                 /*logger=*/ null);
 
         // Now we should get a failure on id3
         GenericDocument document3 =
                 new GenericDocument.Builder<>("namespace", "id3", "type").build();
         AppSearchException e = assertThrows(AppSearchException.class, () ->
-                mAppSearchImpl.putDocument("package", "database", document3, /*logger=*/ null));
+                mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document3,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null));
         assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
         assertThat(e).hasMessageThat().contains(
                 "Package \"package\" exceeded limit of 2 documents");
     }
+    @Test
+    public void testLimitConfig_suggestion() throws Exception {
+        mAppSearchImpl.close();
+        File tempFolder = mTemporaryFolder.newFolder();
+        mAppSearchImpl = AppSearchImpl.create(
+                tempFolder,
+                new LimitConfig() {
+                    @Override
+                    public int getMaxDocumentSizeBytes() {
+                        return Integer.MAX_VALUE;
+                    }
+
+                    @Override
+                    public int getMaxDocumentCount() {
+                        return Integer.MAX_VALUE;
+                    }
+
+                    @Override
+                    public int getMaxSuggestionCount() {
+                        return 2;
+                    }
+                },
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
+
+        AppSearchException e = assertThrows(AppSearchException.class, () ->
+                mAppSearchImpl.searchSuggestion(
+                        "package",
+                        "database",
+                        /*suggestionQueryExpression=*/"t",
+                        new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()));
+        assertThat(e.getResultCode()).isEqualTo(RESULT_INVALID_ARGUMENT);
+        assertThat(e).hasMessageThat().contains(
+                "Trying to get 10 suggestion results, which exceeds limit of 2");
+    }
+
+    /**
+     * Ensure that it is okay to register the same observer for multiple packages and that removing
+     * the observer for one package doesn't remove it for the other.
+     */
+    @Test
+    public void testRemoveObserver_onlyAffectsOnePackage() throws Exception {
+        final String fakePackage = "com.android.appsearch.fake.package";
+
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                /*schemas=*/ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/false,
+                /*version=*/0,
+                /*setSchemaStatsBuilder=*/null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer twice, on different packages.
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                /*listeningPackageAccess=*/mSelfCallerAccess,
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+        mAppSearchImpl.registerObserverCallback(
+                /*listeningPackageAccess=*/mSelfCallerAccess,
+                /*targetPackageName=*/fakePackage,
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Insert a valid doc
+        GenericDocument validDoc =
+                new GenericDocument.Builder<>("namespace1", "id1", "Type1").build();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.putDocument(
+                mContext.getPackageName(),
+                "database1",
+                validDoc,
+                /*sendChangeNotifications=*/ true,
+                /*logger=*/null);
+
+        // Dispatch notifications and empty the observers
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        observer.clear();
+
+        // Remove the observer from the fake package
+        mAppSearchImpl.unregisterObserverCallback(fakePackage, observer);
+
+        // Index a second document
+        GenericDocument doc2 = new GenericDocument.Builder<>("namespace1", "id2", "Type1").build();
+        mAppSearchImpl.putDocument(
+                mContext.getPackageName(),
+                "database1",
+                doc2,
+                /*sendChangeNotifications=*/ true,
+                /*logger=*/null);
+
+        // Observer should still have received this data from its registration on
+        // context.getPackageName(), as we only removed the copy from fakePackage.
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).containsExactly(
+                new DocumentChangeInfo(
+                        mContext.getPackageName(),
+                        "database1",
+                        "namespace1",
+                        "Type1",
+                        /*changedDocumentIds=*/ImmutableSet.of("id2")));
+    }
+
+    @Test
+    public void testGetGlobalDocumentThrowsExceptionWhenNotVisible() throws Exception {
+        List<AppSearchSchema> schemas =
+                Collections.singletonList(new AppSearchSchema.Builder("type").build());
+
+        // Create a new mAppSearchImpl with a mock Visibility Checker
+        mAppSearchImpl.close();
+        File tempFolder = mTemporaryFolder.newFolder();
+        VisibilityChecker mockVisibilityChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore) -> false;
+        mAppSearchImpl = AppSearchImpl.create(
+                tempFolder,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null,
+                ALWAYS_OPTIMIZE,
+                mockVisibilityChecker);
+
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Add a document and persist it.
+        GenericDocument document =
+                new GenericDocument.Builder<>("namespace1", "id1", "type").build();
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document,
+                /*sendChangeNotifications=*/false,
+                /*logger=*/null);
+        mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
+
+        AppSearchException e = assertThrows(AppSearchException.class, () ->
+                mAppSearchImpl.globalGetDocument(
+                        "package",
+                        "database",
+                        "namespace1",
+                        "id1",
+                        /*typePropertyPaths=*/Collections.emptyMap(),
+                        /*callerAccess=*/mSelfCallerAccess));
+        assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
+        assertThat(e.getMessage()).isEqualTo("Document (namespace1, id1) not found.");
+    }
+
+    @Test
+    public void testGetGlobalDocument() throws Exception {
+        List<AppSearchSchema> schemas =
+                Collections.singletonList(new AppSearchSchema.Builder("type").build());
+
+        // Create a new mAppSearchImpl with a mock Visibility Checker
+        mAppSearchImpl.close();
+        File tempFolder = mTemporaryFolder.newFolder();
+        VisibilityChecker mockVisibilityChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore) -> true;
+        mAppSearchImpl = AppSearchImpl.create(
+                tempFolder,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null,
+                ALWAYS_OPTIMIZE,
+                mockVisibilityChecker);
+
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Add a document and persist it.
+        GenericDocument document =
+                new GenericDocument.Builder<>("namespace1", "id1", "type").build();
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
+
+        GenericDocument getResult = mAppSearchImpl.globalGetDocument(
+                "package",
+                "database",
+                "namespace1",
+                "id1",
+                /*typePropertyPaths=*/Collections.emptyMap(),
+                /*callerAccess=*/mSelfCallerAccess);
+        assertThat(getResult).isEqualTo(document);
+    }
+
+    @Test
+    public void getGlobalDocumentTest_notFound() throws Exception {
+        List<AppSearchSchema> schemas =
+                Collections.singletonList(new AppSearchSchema.Builder("type").build());
+
+        // Create a new mAppSearchImpl with a mock Visibility Checker
+        mAppSearchImpl.close();
+        File tempFolder = mTemporaryFolder.newFolder();
+        VisibilityChecker mockVisibilityChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore) -> true;
+        mAppSearchImpl = AppSearchImpl.create(
+                tempFolder,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null,
+                ALWAYS_OPTIMIZE,
+                mockVisibilityChecker);
+
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Add a document and persist it.
+        GenericDocument document =
+                new GenericDocument.Builder<>("namespace1", "id1", "type").build();
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
+
+        AppSearchException e = assertThrows(AppSearchException.class, () ->
+                mAppSearchImpl.globalGetDocument(
+                        "package",
+                        "database",
+                        "namespace1",
+                        "id2",
+                        /*typePropertyPaths=*/Collections.emptyMap(),
+                        /*callerAccess=*/mSelfCallerAccess));
+        assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
+        assertThat(e.getMessage()).isEqualTo("Document (namespace1, id2) not found.");
+    }
+
+    @Test
+    public void getGlobalDocumentNoAccessNoFileHasSameException() throws Exception {
+        List<AppSearchSchema> schemas =
+                Collections.singletonList(new AppSearchSchema.Builder("type").build());
+        // Create a new mAppSearchImpl with a mock Visibility Checker
+        mAppSearchImpl.close();
+        File tempFolder = mTemporaryFolder.newFolder();
+        VisibilityChecker mockVisibilityChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore) ->
+                        callerAccess.getCallingPackageName().equals("visiblePackage");
+        mAppSearchImpl = AppSearchImpl.create(
+                tempFolder,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null,
+                ALWAYS_OPTIMIZE,
+                mockVisibilityChecker);
+
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Add a document and persist it.
+        GenericDocument document =
+                new GenericDocument.Builder<>("namespace1", "id1", "type").build();
+        mAppSearchImpl.putDocument(
+                "package",
+                "database",
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
+
+        AppSearchException unauthorizedException = assertThrows(AppSearchException.class, () ->
+                mAppSearchImpl.globalGetDocument(
+                        "package",
+                        "database",
+                        "namespace1",
+                        "id1",
+                        /*typePropertyPaths=*/Collections.emptyMap(),
+                        new CallerAccess(/*callingPackageName=*/"invisiblePackage")));
+
+        mAppSearchImpl.remove("package", "database", "namespace1", "id1",
+                /*removeStatsBuilder=*/null);
+
+        AppSearchException noDocException = assertThrows(AppSearchException.class, () ->
+                mAppSearchImpl.globalGetDocument(
+                        "package",
+                        "database",
+                        "namespace1",
+                        "id1",
+                        /*typePropertyPaths=*/Collections.emptyMap(),
+                        new CallerAccess(/*callingPackageName=*/"visiblePackage")));
+
+        assertThat(noDocException.getResultCode()).isEqualTo(unauthorizedException.getResultCode());
+        assertThat(noDocException.getMessage()).isEqualTo(unauthorizedException.getMessage());
+    }
+
+    @Test
+    public void testSetVisibility() throws Exception {
+        VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .setCreationTimestampMillis(12345L)
+                .build();
+        List<AppSearchSchema> schemas =
+                Collections.singletonList(new AppSearchSchema.Builder("Email").build());
+
+        // Set schema Email to AppSearch database1 with a visibility document
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database1",
+                schemas,
+                /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        String prefix = PrefixUtil.createPrefix("package", "database1");
+
+        // assert the visibility document is saved.
+        VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .setCreationTimestampMillis(12345L)
+                .build();
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+                .isEqualTo(expectedDocument);
+        // Verify the VisibilityDocument is saved to AppSearchImpl.
+        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                VisibilityDocument.NAMESPACE,
+                /*id=*/ prefix + "Email",
+                /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(actualDocument).isEqualTo(expectedDocument);
+    }
+
+    @Test
+    public void testSetVisibility_existingVisibilitySettingRetains() throws Exception {
+        // Create Visibility Document for Email1
+        VisibilityDocument visibilityDocument1 = new VisibilityDocument.Builder("Email1")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .setCreationTimestampMillis(12345L)
+                .build();
+        List<AppSearchSchema> schemas1 =
+                Collections.singletonList(new AppSearchSchema.Builder("Email1").build());
+
+        // Set schema Email1 to package1 with a visibility document
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package1",
+                "database",
+                schemas1,
+                /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument1),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        String prefix1 = PrefixUtil.createPrefix("package1", "database");
+
+        // assert the visibility document is saved.
+        VisibilityDocument expectedDocument1 = new VisibilityDocument.Builder(prefix1 + "Email1")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .setCreationTimestampMillis(12345L)
+                .build();
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix1 + "Email1"))
+                .isEqualTo(expectedDocument1);
+        // Verify the VisibilityDocument is saved to AppSearchImpl.
+        VisibilityDocument actualDocument1 =  new VisibilityDocument(mAppSearchImpl.getDocument(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                VisibilityDocument.NAMESPACE,
+                /*id=*/ prefix1 + "Email1",
+                /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(actualDocument1).isEqualTo(expectedDocument1);
+
+        // Create Visibility Document for Email2
+        VisibilityDocument visibilityDocument2 = new VisibilityDocument.Builder("Email2")
+                .setNotDisplayedBySystem(false)
+                .addVisibleToPackage(new PackageIdentifier("pkgFoo", new byte[32]))
+                .setCreationTimestampMillis(54321L)
+                .build();
+        List<AppSearchSchema> schemas2 =
+                Collections.singletonList(new AppSearchSchema.Builder("Email2").build());
+
+        // Set schema Email2 to package1 with a visibility document
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package2",
+                "database",
+                schemas2,
+                /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument2),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        String prefix2 = PrefixUtil.createPrefix("package2", "database");
+
+        // assert the visibility document is saved.
+        VisibilityDocument expectedDocument2 = new VisibilityDocument.Builder(prefix2 + "Email2")
+                .setNotDisplayedBySystem(false)
+                .addVisibleToPackage(new PackageIdentifier("pkgFoo", new byte[32]))
+                .setCreationTimestampMillis(54321)
+                .build();
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix2 + "Email2"))
+                .isEqualTo(expectedDocument2);
+        // Verify the VisibilityDocument is saved to AppSearchImpl.
+        VisibilityDocument actualDocument2 =  new VisibilityDocument(mAppSearchImpl.getDocument(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                VisibilityDocument.NAMESPACE,
+                /*id=*/ prefix2 + "Email2",
+                /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(actualDocument2).isEqualTo(expectedDocument2);
+
+        // Check the existing visibility document retains.
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix1 + "Email1"))
+                .isEqualTo(expectedDocument1);
+        // Verify the VisibilityDocument is saved to AppSearchImpl.
+        actualDocument1 =  new VisibilityDocument(mAppSearchImpl.getDocument(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                VisibilityDocument.NAMESPACE,
+                /*id=*/ prefix1 + "Email1",
+                /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(actualDocument1).isEqualTo(expectedDocument1);
+    }
+
+    @Test
+    public void testSetVisibility_removeVisibilitySettings() throws Exception {
+        // Create a non-all-default visibility document
+        VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .setCreationTimestampMillis(12345L)
+                .build();
+
+        List<AppSearchSchema> schemas =
+                Collections.singletonList(new AppSearchSchema.Builder("Email").build());
+
+        // Set schema Email and its visibility document to AppSearch database1
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database1",
+                schemas,
+                /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        String prefix = PrefixUtil.createPrefix("package", "database1");
+        VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .setCreationTimestampMillis(12345L)
+                .build();
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+                .isEqualTo(expectedDocument);
+        // Verify the VisibilityDocument is saved to AppSearchImpl.
+        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                VisibilityDocument.NAMESPACE,
+                /*id=*/ prefix + "Email",
+                /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(actualDocument).isEqualTo(expectedDocument);
+
+        // Set schema Email and its all-default visibility document to AppSearch database1
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database1",
+                schemas,
+                /*visibilityDocuments=*/ ImmutableList.of(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        // All-default visibility document won't be saved in AppSearch.
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+                .isNull();
+        // Verify the VisibilityDocument is removed from AppSearchImpl.
+        AppSearchException e = assertThrows(AppSearchException.class,
+                () -> mAppSearchImpl.getDocument(
+                        VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                        VisibilityStore.VISIBILITY_DATABASE_NAME,
+                        VisibilityDocument.NAMESPACE,
+                        /*id=*/ prefix + "Email",
+                        /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(e).hasMessageThat().contains(
+                "Document (VS#Pkg$VS#Db/, package$database1/Email) not found.");
+    }
+
+    @Test
+    public void testRemoveVisibility_noRemainingSettings() throws Exception {
+        // Create a non-all-default visibility document
+        VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .setCreationTimestampMillis(12345L)
+                .build();
+
+        List<AppSearchSchema> schemas =
+                Collections.singletonList(new AppSearchSchema.Builder("Email").build());
+
+        // Set schema Email and its visibility document to AppSearch database1
+        mAppSearchImpl.setSchema(
+                "package",
+                "database1",
+                schemas,
+                /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        String prefix = PrefixUtil.createPrefix("package", "database1");
+        VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .setCreationTimestampMillis(12345L)
+                .build();
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+                .isEqualTo(expectedDocument);
+        // Verify the VisibilityDocument is saved to AppSearchImpl.
+        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                VisibilityDocument.NAMESPACE,
+                /*id=*/ prefix + "Email",
+                /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(actualDocument).isEqualTo(expectedDocument);
+
+        // remove the schema and visibility setting from AppSearch
+        mAppSearchImpl.setSchema(
+                "package",
+                "database1",
+                /*schemas=*/ new ArrayList<>(),
+                /*visibilityDocuments=*/ ImmutableList.of(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+
+        // add the schema back with an all default visibility setting.
+        mAppSearchImpl.setSchema(
+                "package",
+                "database1",
+                schemas,
+                /*visibilityDocuments=*/ ImmutableList.of(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /* setSchemaStatsBuilder= */ null);
+        // All-default visibility document won't be saved in AppSearch.
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+                .isNull();
+        // Verify there is no visibility setting for the schema.
+        AppSearchException e = assertThrows(AppSearchException.class,
+                () -> mAppSearchImpl.getDocument(
+                        VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                        VisibilityStore.VISIBILITY_DATABASE_NAME,
+                        VisibilityDocument.NAMESPACE,
+                        /*id=*/ prefix + "Email",
+                        /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(e).hasMessageThat().contains(
+                "Document (VS#Pkg$VS#Db/, package$database1/Email) not found.");
+    }
+
+    @Test
+    public void testCloseAndReopen_visibilityInfoRetains() throws Exception {
+        // set Schema and visibility to AppSearch
+        VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .setCreationTimestampMillis(12345L)
+                .build();
+        List<AppSearchSchema> schemas =
+                Collections.singletonList(new AppSearchSchema.Builder("Email").build());
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "packageName",
+                "databaseName",
+                schemas,
+                ImmutableList.of(visibilityDocument),
+                /*forceOverride=*/ true,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // close and re-open AppSearchImpl, the visibility document retains
+        mAppSearchImpl.close();
+        mAppSearchImpl = AppSearchImpl.create(
+                mAppSearchDir,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null,
+                ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
+
+        String prefix = PrefixUtil.createPrefix("packageName", "databaseName");
+        VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .setCreationTimestampMillis(12345L)
+                .build();
+
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+                .isEqualTo(expectedDocument);
+        // Verify the VisibilityDocument is saved to AppSearchImpl.
+        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                VisibilityDocument.NAMESPACE,
+                /*id=*/ prefix + "Email",
+                /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(actualDocument).isEqualTo(expectedDocument);
+
+        // remove schema and visibility document
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "packageName",
+                "databaseName",
+                ImmutableList.of(),
+                ImmutableList.of(),
+                /*forceOverride=*/ true,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // close and re-open AppSearchImpl, the visibility document removed
+        mAppSearchImpl.close();
+        mAppSearchImpl = AppSearchImpl.create(
+                mAppSearchDir,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null,
+                ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
+
+        assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email")).isNull();
+        // Verify the VisibilityDocument is removed from AppSearchImpl.
+        AppSearchException e = assertThrows(AppSearchException.class,
+                () -> mAppSearchImpl.getDocument(
+                        VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                        VisibilityStore.VISIBILITY_DATABASE_NAME,
+                        VisibilityDocument.NAMESPACE,
+                        /*id=*/ prefix + "Email",
+                        /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(e).hasMessageThat().contains(
+                "Document (VS#Pkg$VS#Db/, packageName$databaseName/Email) not found.");
+    }
+
+    @Test
+    public void testGetSchema_global() throws Exception {
+        List<AppSearchSchema> schemas =
+                Collections.singletonList(new AppSearchSchema.Builder("Type").build());
+
+        // Create a new mAppSearchImpl with a mock Visibility Checker
+        mAppSearchImpl.close();
+        File tempFolder = mTemporaryFolder.newFolder();
+        VisibilityChecker mockVisibilityChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore) -> true;
+        mAppSearchImpl = AppSearchImpl.create(
+                tempFolder,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null,
+                ALWAYS_OPTIMIZE,
+                mockVisibilityChecker);
+
+        // Add a schema type that is not displayed by the system
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ImmutableList.of(
+                        new VisibilityDocument.Builder("Type")
+                                .setNotDisplayedBySystem(true).build()),
+                /*forceOverride=*/false,
+                /*version=*/0,
+                /*setSchemaStatsBuilder=*/null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Get this schema as another package
+        GetSchemaResponse getResponse = mAppSearchImpl.getSchema(
+                "package",
+                "database",
+                new CallerAccess(/*callingPackageName=*/"com.android.appsearch.fake.package"));
+        assertThat(getResponse.getSchemas()).containsExactlyElementsIn(schemas);
+        assertThat(getResponse.getSchemaTypesNotDisplayedBySystem()).containsExactly("Type");
+    }
+
+    @Test
+    public void testGetSchema_nonExistentApp() throws Exception {
+        // Add a schema. The test loses meaning if the schema is completely empty.
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                Collections.singletonList(new AppSearchSchema.Builder("Type").build()),
+                /*visibilityDocuments=*/ImmutableList.of(),
+                /*forceOverride=*/false,
+                /*version=*/0,
+                /*setSchemaStatsBuilder=*/null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Try to get the schema of a nonexistent package.
+        GetSchemaResponse getResponse = mAppSearchImpl.getSchema(
+                "com.android.appsearch.fake.package",
+                "database",
+                new CallerAccess(/*callingPackageName=*/"package"));
+        assertThat(getResponse.getSchemas()).isEmpty();
+        assertThat(getResponse.getSchemaTypesNotDisplayedBySystem()).isEmpty();
+    }
+
+    @Test
+    public void testGetSchema_noAccess() throws Exception {
+        List<AppSearchSchema> schemas =
+                Collections.singletonList(new AppSearchSchema.Builder("Type").build());
+        // Add a schema type
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ImmutableList.of(),
+                /*forceOverride=*/false,
+                /*version=*/1,
+                /*setSchemaStatsBuilder=*/null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        GetSchemaResponse getResponse = mAppSearchImpl.getSchema(
+                "package",
+                "database",
+                new CallerAccess(/*callingPackageName=*/
+                        "com.android.appsearch.fake.package"));
+        assertThat(getResponse.getSchemas()).isEmpty();
+        assertThat(getResponse.getSchemaTypesNotDisplayedBySystem()).isEmpty();
+        assertThat(getResponse.getVersion()).isEqualTo(0);
+
+        // Make sure the test is hooked up right by calling getSchema with the same parameters but
+        // from the same package
+        getResponse = mAppSearchImpl.getSchema(
+                "package",
+                "database",
+                new CallerAccess(/*callingPackageName=*/"package"));
+        assertThat(getResponse.getSchemas()).containsExactlyElementsIn(schemas);
+    }
+
+    @Test
+    public void testGetSchema_global_partialAccess() throws Exception {
+        List<AppSearchSchema> schemas = ImmutableList.of(
+                new AppSearchSchema.Builder("VisibleType").build(),
+                new AppSearchSchema.Builder("PrivateType").build());
+
+        // Create a new mAppSearchImpl with a mock Visibility Checker
+        mAppSearchImpl.close();
+        File tempFolder = mTemporaryFolder.newFolder();
+        VisibilityChecker mockVisibilityChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore)
+                        -> prefixedSchema.endsWith("VisibleType");
+        mAppSearchImpl = AppSearchImpl.create(
+                tempFolder,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null,
+                ALWAYS_OPTIMIZE,
+                mockVisibilityChecker);
+
+        // Add two schema types that are not displayed by the system.
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                "package",
+                "database",
+                schemas,
+                /*visibilityDocuments=*/ImmutableList.of(
+                        new VisibilityDocument.Builder("VisibleType")
+                                .setNotDisplayedBySystem(true)
+                                .build(),
+                        new VisibilityDocument.Builder("PrivateType")
+                                .setNotDisplayedBySystem(true)
+                                .build()),
+                /*forceOverride=*/false,
+                /*version=*/1,
+                /*setSchemaStatsBuilder=*/null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        GetSchemaResponse getResponse = mAppSearchImpl.getSchema(
+                "package",
+                "database",
+                new CallerAccess(/*callingPackageName=*/
+                        "com.android.appsearch.fake.package"));
+        assertThat(getResponse.getSchemas()).containsExactly(schemas.get(0));
+        assertThat(getResponse.getSchemaTypesNotDisplayedBySystem()).containsExactly("VisibleType");
+        assertThat(getResponse.getVersion()).isEqualTo(1);
+    }
+
+    @Test
+    public void testDispatchObserver_samePackage_noVisStore_accept() throws Exception {
+        // Add a schema type
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                /*listeningPackageAccess=*/mSelfCallerAccess,
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Insert a valid doc
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.putDocument(
+                mContext.getPackageName(),
+                "database1",
+                new GenericDocument.Builder<>("namespace1", "id1", "Type1").build(),
+                /*sendChangeNotifications=*/ true,
+                /*logger=*/null);
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Dispatch notifications
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).containsExactly(
+                new DocumentChangeInfo(
+                        mContext.getPackageName(),
+                        "database1",
+                        "namespace1",
+                        "Type1",
+                        ImmutableSet.of("id1")));
+    }
+
+    @Test
+    public void testDispatchObserver_samePackage_withVisStore_accept() throws Exception {
+        // Make a visibility checker that rejects everything
+        final VisibilityChecker rejectChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore) -> false;
+        mAppSearchImpl.close();
+        mAppSearchImpl = AppSearchImpl.create(
+                mAppSearchDir,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/null,
+                ALWAYS_OPTIMIZE,
+                rejectChecker);
+
+        // Add a schema type
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                /*listeningPackageAccess=*/mSelfCallerAccess,
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Insert a valid doc
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.putDocument(
+                mContext.getPackageName(),
+                "database1",
+                new GenericDocument.Builder<>("namespace1", "id1", "Type1").build(),
+                /*sendChangeNotifications=*/ true,
+                /*logger=*/null);
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Dispatch notifications
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).containsExactly(
+                new DocumentChangeInfo(
+                        mContext.getPackageName(),
+                        "database1",
+                        "namespace1",
+                        "Type1",
+                        ImmutableSet.of("id1")));
+    }
+
+    @Test
+    public void testDispatchObserver_differentPackage_noVisStore_reject() throws Exception {
+        // Add a schema type
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer from a simulated different package
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                new CallerAccess(/*callingPackageName=*/
+                    "com.fake.Listening.package"),
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Insert a valid doc
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.putDocument(
+                mContext.getPackageName(),
+                "database1",
+                new GenericDocument.Builder<>("namespace1", "id1", "Type1").build(),
+                /*sendChangeNotifications=*/ true,
+                /*logger=*/null);
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Dispatch notifications
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testDispatchObserver_differentPackage_withVisStore_accept() throws Exception {
+        final String fakeListeningPackage = "com.fake.listening.package";
+
+        // Make a visibility checker that allows only fakeListeningPackage.
+        final VisibilityChecker visibilityChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore)
+                        -> callerAccess.getCallingPackageName().equals(fakeListeningPackage);
+        mAppSearchImpl.close();
+        mAppSearchImpl = AppSearchImpl.create(
+                mAppSearchDir,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/null,
+                ALWAYS_OPTIMIZE,
+                visibilityChecker);
+
+        // Add a schema type
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                new CallerAccess(/*callingPackageName=*/fakeListeningPackage),
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Insert a valid doc
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.putDocument(
+                mContext.getPackageName(),
+                "database1",
+                new GenericDocument.Builder<>("namespace1", "id1", "Type1").build(),
+                /*sendChangeNotifications=*/ true,
+                /*logger=*/null);
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Dispatch notifications
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).containsExactly(
+                new DocumentChangeInfo(
+                        mContext.getPackageName(),
+                        "database1",
+                        "namespace1",
+                        "Type1",
+                        ImmutableSet.of("id1")));
+    }
+
+    @Test
+    public void testDispatchObserver_differentPackage_withVisStore_reject() throws Exception {
+        final String fakeListeningPackage = "com.fake.Listening.package";
+
+        // Make a visibility checker that rejects everything.
+        final VisibilityChecker rejectChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore) -> false;
+        mAppSearchImpl.close();
+        mAppSearchImpl = AppSearchImpl.create(
+                mAppSearchDir,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/null,
+                ALWAYS_OPTIMIZE,
+                rejectChecker);
+
+        // Add a schema type
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                new CallerAccess(/*callingPackageName=*/fakeListeningPackage),
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Insert a doc
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.putDocument(
+                mContext.getPackageName(),
+                "database1",
+                new GenericDocument.Builder<>("namespace1", "id1", "Type1").build(),
+                /*sendChangeNotifications=*/ true,
+                /*logger=*/null);
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Dispatch notifications
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_added() throws Exception {
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                /*listeningPackageAccess=*/mSelfCallerAccess,
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Add a schema type
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Dispatch notifications
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(),
+                        "database1",
+                        ImmutableSet.of("Type1")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Add two more schema types without touching the existing one
+        observer.clear();
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1").build(),
+                        new AppSearchSchema.Builder("Type2").build(),
+                        new AppSearchSchema.Builder("Type3").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Dispatch notifications
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type2", "Type3")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_removed() throws Exception {
+        // Add a schema type
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1").build(),
+                        new AppSearchSchema.Builder("Type2").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                /*listeningPackageAccess=*/mSelfCallerAccess,
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Remove Type2
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ true,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Dispatch notifications
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(),
+                        "database1",
+                        ImmutableSet.of("Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_contents() throws Exception {
+        // Add a schema
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1").build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                                .build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                /*listeningPackageAccess=*/mSelfCallerAccess,
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Update the schema, but don't make any actual changes
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1").build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                                .build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 1,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Dispatch notifications
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Now update the schema again, but this time actually make a change (cardinality of the
+        // property)
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1").build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .build())
+                                .build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 2,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Dispatch notifications
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_contents_skipBySpec() throws Exception {
+        // Add a schema
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                                .build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                                .build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer that only listens for Type2
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                /*listeningPackageAccess=*/mSelfCallerAccess,
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().addFilterSchemas("Type2").build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Update both types of the schema (changed cardinalities)
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .build())
+                                .build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .build())
+                                .build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Dispatch notifications
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_visibilityOnly() throws Exception {
+        final String fakeListeningPackage = "com.fake.listening.package";
+
+        // Make a fake visibility checker that actually looks at visibility store
+        final VisibilityChecker visibilityChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore)
+                        -> {
+                    if (!callerAccess.getCallingPackageName().equals(fakeListeningPackage)) {
+                        return false;
+                    }
+                    Set<String> allowedPackages = new ArraySet<>(
+                            visibilityStore.getVisibility(prefixedSchema).getPackageNames());
+                    return allowedPackages.contains(fakeListeningPackage);
+                };
+        mAppSearchImpl.close();
+        mAppSearchImpl = AppSearchImpl.create(
+                mAppSearchDir,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/null,
+                ALWAYS_OPTIMIZE,
+                visibilityChecker);
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                new CallerAccess(/*callingPackageName=*/fakeListeningPackage),
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Add a schema where both types are visible to the fake package.
+        List<AppSearchSchema> schemas = ImmutableList.of(
+                new AppSearchSchema.Builder("Type1").build(),
+                new AppSearchSchema.Builder("Type2").build());
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                schemas,
+                /*visibilityDocuments=*/ ImmutableList.of(
+                        new VisibilityDocument.Builder("Type1")
+                                .addVisibleToPackage(
+                                        new PackageIdentifier(fakeListeningPackage, new byte[0]))
+                                .build(),
+                        new VisibilityDocument.Builder("Type2")
+                                .addVisibleToPackage(
+                                        new PackageIdentifier(fakeListeningPackage, new byte[0]))
+                                .build()
+                ),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Notifications of addition should now be dispatched
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type1", "Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        observer.clear();
+
+        // Update schema, keeping the types identical but denying visibility to type2
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                schemas,
+                /*visibilityDocuments=*/ ImmutableList.of(
+                        new VisibilityDocument.Builder("Type1")
+                                .addVisibleToPackage(
+                                        new PackageIdentifier(fakeListeningPackage, new byte[0]))
+                                .build(),
+                        new VisibilityDocument.Builder("Type2").build()
+                ),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Dispatch notifications. This should look like a deletion of Type2.
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        observer.clear();
+
+        // Now update Type2 and make sure no further notification is received.
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1").build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .build())
+                                .build()),
+                /*visibilityDocuments=*/ ImmutableList.of(
+                        new VisibilityDocument.Builder("Type1")
+                                .addVisibleToPackage(
+                                        new PackageIdentifier(fakeListeningPackage, new byte[0]))
+                                .build(),
+                        new VisibilityDocument.Builder("Type2").build()
+                ),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Grant visibility to Type2 again and make sure it appears
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1").build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .build())
+                                .build()),
+                /*visibilityDocuments=*/ImmutableList.of(
+                        new VisibilityDocument.Builder("Type1")
+                                .addVisibleToPackage(
+                                        new PackageIdentifier(fakeListeningPackage, new byte[0]))
+                                .build(),
+                        new VisibilityDocument.Builder("Type2")
+                                .addVisibleToPackage(
+                                        new PackageIdentifier(fakeListeningPackage, new byte[0]))
+                                .build()
+                ),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Dispatch notifications. This should look like a creation of Type2.
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_visibilityAndContents() throws Exception {
+        final String fakeListeningPackage = "com.fake.listening.package";
+
+        // Make a visibility checker that allows fakeListeningPackage access only to Type2.
+        final VisibilityChecker visibilityChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore)
+                        -> callerAccess.getCallingPackageName().equals(fakeListeningPackage)
+                        && prefixedSchema.endsWith("Type2");
+        mAppSearchImpl.close();
+        mAppSearchImpl = AppSearchImpl.create(
+                mAppSearchDir,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/null,
+                ALWAYS_OPTIMIZE,
+                visibilityChecker);
+
+        // Add a schema.
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                                .build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                                .build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                new CallerAccess(/*callingPackageName=*/fakeListeningPackage),
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Update both types of the schema (changed cardinalities)
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .build())
+                                .build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                        "booleanProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .build())
+                                .build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Dispatch notifications
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_partialVisibility_removed() throws Exception {
+        final String fakeListeningPackage = "com.fake.listening.package";
+
+        // Make a visibility checker that allows fakeListeningPackage access only to Type2.
+        final VisibilityChecker visibilityChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore)
+                        -> callerAccess.getCallingPackageName().equals(fakeListeningPackage)
+                        && prefixedSchema.endsWith("Type2");
+        mAppSearchImpl.close();
+        mAppSearchImpl = AppSearchImpl.create(
+                mAppSearchDir,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/null,
+                ALWAYS_OPTIMIZE,
+                visibilityChecker);
+
+        // Add a schema.
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1").build(),
+                        new AppSearchSchema.Builder("Type2").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                new CallerAccess(/*callingPackageName=*/fakeListeningPackage),
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Remove Type1
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(new AppSearchSchema.Builder("Type2").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ true,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Dispatch notifications. Nothing should appear since Type1 is not visible to us.
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Now remove Type2. This should cause a notification.
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ true,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_multipleObservers() throws Exception {
+        // Create two fake packages. One can access Type1, one can access Type2, they both can
+        // access Type3, and no one can access Type4.
+        final String fakePackage1 = "com.fake.listening.package1";
+
+        final String fakePackage2 = "com.fake.listening.package2";
+
+        final VisibilityChecker visibilityChecker =
+                (callerAccess, packageName, prefixedSchema, visibilityStore)
+                        -> {
+                    if (prefixedSchema.endsWith("Type1")) {
+                        return callerAccess.getCallingPackageName().equals(fakePackage1);
+                    } else if (prefixedSchema.endsWith("Type2")) {
+                        return callerAccess.getCallingPackageName().equals(fakePackage2);
+                    } else if (prefixedSchema.endsWith("Type3")) {
+                        return false;
+                    } else if (prefixedSchema.endsWith("Type4")) {
+                        return true;
+                    } else {
+                        throw new IllegalArgumentException(prefixedSchema);
+                    }
+                };
+        mAppSearchImpl.close();
+        mAppSearchImpl = AppSearchImpl.create(
+                mAppSearchDir,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/null,
+                ALWAYS_OPTIMIZE,
+                visibilityChecker);
+
+        // Add a schema.
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1").build(),
+                        new AppSearchSchema.Builder("Type2").build(),
+                        new AppSearchSchema.Builder("Type3").build(),
+                        new AppSearchSchema.Builder("Type4").build()
+                ),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register three observers: one in each package, and another in package1 with a filter.
+        TestObserverCallback observerPkg1NoFilter = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                new CallerAccess(/*callingPackageName=*/fakePackage1),
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observerPkg1NoFilter);
+
+        TestObserverCallback observerPkg2NoFilter = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                new CallerAccess(/*callingPackageName=*/fakePackage2),
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observerPkg2NoFilter);
+
+        TestObserverCallback observerPkg1FilterType4 = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                new CallerAccess(/*callingPackageName=*/fakePackage1),
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().addFilterSchemas("Type4").build(),
+                MoreExecutors.directExecutor(),
+                observerPkg1FilterType4);
+
+        // Remove everything
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ true,
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Dispatch notifications.
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+
+        // observerPkg1NoFilter should see Type1 and Type4 vanish.
+        // observerPkg2NoFilter should see Type2 and Type4 vanish.
+        // observerPkg2WithFilter should see Type4 vanish.
+        assertThat(observerPkg1NoFilter.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type1", "Type4"))
+        );
+        assertThat(observerPkg1NoFilter.getDocumentChanges()).isEmpty();
+
+        assertThat(observerPkg2NoFilter.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type2", "Type4"))
+        );
+        assertThat(observerPkg2NoFilter.getDocumentChanges()).isEmpty();
+
+        assertThat(observerPkg1FilterType4.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type4"))
+        );
+        assertThat(observerPkg1FilterType4.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_noChangeIfIncompatible() throws Exception {
+        // Add a schema with two types.
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Type1")
+                                .addProperty(
+                                        new AppSearchSchema.StringPropertyConfig.Builder("strProp")
+                                                .setCardinality(
+                                                        AppSearchSchema.PropertyConfig
+                                                                .CARDINALITY_OPTIONAL)
+                                                .build()
+                                ).build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(
+                                        new AppSearchSchema.StringPropertyConfig.Builder("strProp")
+                                                .setCardinality(
+                                                        AppSearchSchema.PropertyConfig
+                                                                .CARDINALITY_OPTIONAL)
+                                                .build()
+                                ).build()
+                ),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 1,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mAppSearchImpl.registerObserverCallback(
+                new CallerAccess(/*callingPackageName=*/mContext.getPackageName()),
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                MoreExecutors.directExecutor(),
+                observer);
+
+        // Update schema to try to make an incompatible change to Type1, and a compatible change to
+        // Type2.
+        List<AppSearchSchema> updatedSchemaTypes = ImmutableList.of(
+                new AppSearchSchema.Builder("Type1")
+                        .addProperty(
+                                new AppSearchSchema.StringPropertyConfig.Builder("strProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build()
+                        ).build(),
+                new AppSearchSchema.Builder("Type2")
+                        .addProperty(
+                                new AppSearchSchema.StringPropertyConfig.Builder("strProp")
+                                        .setCardinality(
+                                                AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                                        .build()
+                        ).build()
+        );
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                updatedSchemaTypes,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*version=*/ 2,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isFalse();
+        SetSchemaResponse setSchemaResponse = internalSetSchemaResponse.getSetSchemaResponse();
+        assertThat(setSchemaResponse.getDeletedTypes()).isEmpty();
+        assertThat(setSchemaResponse.getIncompatibleTypes()).containsExactly("Type1");
+
+        // Dispatch notifications. Nothing should appear since the schema was incompatible and has
+        // not changed.
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Now force apply the schemas Type2. This should cause a notification.
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                mContext.getPackageName(),
+                "database1",
+                updatedSchemaTypes,
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ true,
+                /*version=*/ 3,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mAppSearchImpl.dispatchAndClearChangeNotifications();
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), "database1", ImmutableSet.of("Type1", "Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
 }
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchLoggerTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchLoggerTest.java
index 75966bf..5b2c3da 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchLoggerTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchLoggerTest.java
@@ -21,6 +21,7 @@
 import androidx.appsearch.app.AppSearchResult;
 import androidx.appsearch.app.AppSearchSchema;
 import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.InternalSetSchemaResponse;
 import androidx.appsearch.app.SearchResultPage;
 import androidx.appsearch.app.SearchSpec;
 import androidx.appsearch.exceptions.AppSearchException;
@@ -74,7 +75,8 @@
                 mTemporaryFolder.newFolder(),
                 new UnlimitedLimitConfig(),
                 /*initStatsBuilder=*/ null,
-                ALWAYS_OPTIMIZE);
+                ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
         mLogger = new SimpleTestLogger();
     }
 
@@ -335,16 +337,18 @@
                 mTemporaryFolder.newFolder(),
                 new UnlimitedLimitConfig(),
                 initStatsBuilder,
-                ALWAYS_OPTIMIZE);
+                ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
         InitializeStats iStats = initStatsBuilder.build();
         appSearchImpl.close();
 
         assertThat(iStats).isNotNull();
+        // If the process goes really fast, the total latency could be 0. Since the default of total
+        // latency is also 0, we just remove the assert about NativeLatencyMillis.
         assertThat(iStats.getStatusCode()).isEqualTo(AppSearchResult.RESULT_OK);
         // Total latency captured in LocalStorage
         assertThat(iStats.getTotalLatencyMillis()).isEqualTo(0);
         assertThat(iStats.hasDeSync()).isFalse();
-        assertThat(iStats.getNativeLatencyMillis()).isGreaterThan(0);
         assertThat(iStats.getDocumentStoreDataStatus()).isEqualTo(
                 InitializeStatsProto.DocumentStoreDataStatus.NO_DATA_LOSS_VALUE);
         assertThat(iStats.getDocumentCount()).isEqualTo(0);
@@ -363,44 +367,56 @@
                 folder,
                 new UnlimitedLimitConfig(),
                 /*initStatsBuilder=*/ null,
-                ALWAYS_OPTIMIZE);
+                ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
         List<AppSearchSchema> schemas = ImmutableList.of(
                 new AppSearchSchema.Builder("Type1").build(),
                 new AppSearchSchema.Builder("Type2").build());
-        appSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = appSearchImpl.setSchema(
                 testPackageName,
                 testDatabase,
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
         GenericDocument doc1 =
                 new GenericDocument.Builder<>("namespace", "id1", "Type1").build();
         GenericDocument doc2 =
                 new GenericDocument.Builder<>("namespace", "id2", "Type1").build();
-        appSearchImpl.putDocument(testPackageName, testDatabase, doc1, mLogger);
-        appSearchImpl.putDocument(testPackageName, testDatabase, doc2, mLogger);
+        appSearchImpl.putDocument(
+                testPackageName,
+                testDatabase,
+                doc1,
+                /*sendChangeNotifications=*/ false,
+                mLogger);
+        appSearchImpl.putDocument(
+                testPackageName,
+                testDatabase,
+                doc2,
+                /*sendChangeNotifications=*/ false,
+                mLogger);
         appSearchImpl.close();
 
         // Create another appsearchImpl on the same folder
         InitializeStats.Builder initStatsBuilder = new InitializeStats.Builder();
         appSearchImpl = AppSearchImpl.create(
-                folder, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE);
+                folder, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
         InitializeStats iStats = initStatsBuilder.build();
 
         assertThat(iStats).isNotNull();
+        // If the process goes really fast, the total latency could be 0. Since the default of total
+        // latency is also 0, we just remove the assert about NativeLatencyMillis.
         assertThat(iStats.getStatusCode()).isEqualTo(AppSearchResult.RESULT_OK);
         // Total latency captured in LocalStorage
         assertThat(iStats.getTotalLatencyMillis()).isEqualTo(0);
         assertThat(iStats.hasDeSync()).isFalse();
-        assertThat(iStats.getNativeLatencyMillis()).isGreaterThan(0);
         assertThat(iStats.getDocumentStoreDataStatus()).isEqualTo(
                 InitializeStatsProto.DocumentStoreDataStatus.NO_DATA_LOSS_VALUE);
         assertThat(iStats.getDocumentCount()).isEqualTo(2);
-        assertThat(iStats.getSchemaTypeCount()).isEqualTo(2);
+        assertThat(iStats.getSchemaTypeCount()).isEqualTo(4); // +2 for VisibilitySchema
         assertThat(iStats.hasReset()).isEqualTo(false);
         assertThat(iStats.getResetStatusCode()).isEqualTo(AppSearchResult.RESULT_OK);
         appSearchImpl.close();
@@ -413,26 +429,31 @@
         final File folder = mTemporaryFolder.newFolder();
 
         AppSearchImpl appSearchImpl = AppSearchImpl.create(
-                folder, new UnlimitedLimitConfig(), /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                folder, new UnlimitedLimitConfig(), /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
 
         List<AppSearchSchema> schemas = ImmutableList.of(
                 new AppSearchSchema.Builder("Type1").build(),
                 new AppSearchSchema.Builder("Type2").build());
-        appSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = appSearchImpl.setSchema(
                 testPackageName,
                 testDatabase,
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert a valid doc
         GenericDocument doc1 =
                 new GenericDocument.Builder<>("namespace", "id1", "Type1").build();
-        appSearchImpl.putDocument(testPackageName, testDatabase, doc1, mLogger);
+        appSearchImpl.putDocument(
+                testPackageName,
+                testDatabase,
+                doc1,
+                /*sendChangeNotifications=*/ false,
+                mLogger);
 
         // Insert the invalid doc with an invalid namespace right into icing
         DocumentProto invalidDoc = DocumentProto.newBuilder()
@@ -447,7 +468,8 @@
         // Create another appsearchImpl on the same folder
         InitializeStats.Builder initStatsBuilder = new InitializeStats.Builder();
         appSearchImpl = AppSearchImpl.create(
-                folder, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE);
+                folder, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
         InitializeStats iStats = initStatsBuilder.build();
 
         // Some of other fields are already covered by AppSearchImplTest#testReset()
@@ -471,23 +493,27 @@
                         .build())
                 .build();
         List<AppSearchSchema> schemas = Collections.singletonList(testSchema);
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 testPackageName,
                 testDatabase,
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         GenericDocument document =
                 new GenericDocument.Builder<>("namespace", "id", "type")
                         .setPropertyString("subject", "testPut example1")
                         .build();
 
-        mAppSearchImpl.putDocument(testPackageName, testDatabase, document, mLogger);
+        mAppSearchImpl.putDocument(
+                testPackageName,
+                testDatabase,
+                document,
+                /*sendChangeNotifications=*/ false,
+                mLogger);
 
         PutDocumentStats pStats = mLogger.mPutDocumentStats;
         assertThat(pStats).isNotNull();
@@ -513,16 +539,15 @@
                         .build())
                 .build();
         List<AppSearchSchema> schemas = Collections.singletonList(testSchema);
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 testPackageName,
                 testDatabase,
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         GenericDocument document =
                 new GenericDocument.Builder<>("namespace", "id", "type")
@@ -530,7 +555,12 @@
                         .build();
 
         AppSearchException exception = Assert.assertThrows(AppSearchException.class,
-                () -> mAppSearchImpl.putDocument(testPackageName, testDatabase, document, mLogger));
+                () -> mAppSearchImpl.putDocument(
+                        testPackageName,
+                        testDatabase,
+                        document,
+                        /*sendChangeNotifications=*/ false,
+                        mLogger));
         assertThat(exception.getResultCode()).isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
 
         PutDocumentStats pStats = mLogger.mPutDocumentStats;
@@ -554,16 +584,15 @@
                         .build())
                 .build();
         List<AppSearchSchema> schemas = Collections.singletonList(testSchema);
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 testPackageName,
                 testDatabase,
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
         GenericDocument document1 =
                 new GenericDocument.Builder<>("namespace", "id1", "type")
                         .setPropertyString("subject", "testPut example1")
@@ -576,9 +605,24 @@
                 new GenericDocument.Builder<>("namespace", "id3", "type")
                         .setPropertyString("subject", "testPut 3")
                         .build();
-        mAppSearchImpl.putDocument(testPackageName, testDatabase, document1, mLogger);
-        mAppSearchImpl.putDocument(testPackageName, testDatabase, document2, mLogger);
-        mAppSearchImpl.putDocument(testPackageName, testDatabase, document3, mLogger);
+        mAppSearchImpl.putDocument(
+                testPackageName,
+                testDatabase,
+                document1,
+                /*sendChangeNotifications=*/ false,
+                mLogger);
+        mAppSearchImpl.putDocument(
+                testPackageName,
+                testDatabase,
+                document2,
+                /*sendChangeNotifications=*/ false,
+                mLogger);
+        mAppSearchImpl.putDocument(
+                testPackageName,
+                testDatabase,
+                document3,
+                /*sendChangeNotifications=*/ false,
+                mLogger);
 
 
         // No query filters specified. package2 should only get its own documents back.
@@ -598,10 +642,11 @@
         SearchStats sStats = mLogger.mSearchStats;
 
         assertThat(sStats).isNotNull();
+        // If the process goes really fast, the total latency could be 0. Since the default of total
+        // latency is also 0, we just remove the assert about TotalLatencyMillis.
         assertThat(sStats.getPackageName()).isEqualTo(testPackageName);
         assertThat(sStats.getDatabase()).isEqualTo(testDatabase);
         assertThat(sStats.getStatusCode()).isEqualTo(AppSearchResult.RESULT_OK);
-        assertThat(sStats.getTotalLatencyMillis()).isGreaterThan(0);
         assertThat(sStats.getVisibilityScope()).isEqualTo(SearchStats.VISIBILITY_SCOPE_LOCAL);
         assertThat(sStats.getTermCount()).isEqualTo(2);
         assertThat(sStats.getQueryLength()).isEqualTo(queryStr.length());
@@ -622,16 +667,15 @@
         List<AppSearchSchema> schemas = ImmutableList.of(
                 new AppSearchSchema.Builder("Type1").build(),
                 new AppSearchSchema.Builder("Type2").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 testPackageName,
                 testDatabase,
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         SearchSpec searchSpec =
                 new SearchSpec.Builder().setTermMatch(TermMatchType.Code.PREFIX_VALUE)
@@ -660,19 +704,23 @@
         final String testId = "id";
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 testPackageName,
                 testDatabase,
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
         GenericDocument document =
                 new GenericDocument.Builder<>(testNamespace, testId, "type").build();
-        mAppSearchImpl.putDocument(testPackageName, testDatabase, document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                testPackageName,
+                testDatabase,
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         RemoveStats.Builder rStatsBuilder = new RemoveStats.Builder(testPackageName, testDatabase);
         mAppSearchImpl.remove(testPackageName, testDatabase, testNamespace, testId, rStatsBuilder);
@@ -695,20 +743,24 @@
         final String testId = "id";
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 testPackageName,
                 testDatabase,
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         GenericDocument document =
                 new GenericDocument.Builder<>(testNamespace, testId, "type").build();
-        mAppSearchImpl.putDocument(testPackageName, testDatabase, document, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                testPackageName,
+                testDatabase,
+                document,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         RemoveStats.Builder rStatsBuilder = new RemoveStats.Builder(testPackageName, testDatabase);
 
@@ -735,22 +787,31 @@
         final String testNamespace = "testNameSpace";
         List<AppSearchSchema> schemas =
                 Collections.singletonList(new AppSearchSchema.Builder("type").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 testPackageName,
                 testDatabase,
                 schemas,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
         GenericDocument document1 =
                 new GenericDocument.Builder<>(testNamespace, "id1", "type").build();
         GenericDocument document2 =
                 new GenericDocument.Builder<>(testNamespace, "id2", "type").build();
-        mAppSearchImpl.putDocument(testPackageName, testDatabase, document1, mLogger);
-        mAppSearchImpl.putDocument(testPackageName, testDatabase, document2, mLogger);
+        mAppSearchImpl.putDocument(
+                testPackageName,
+                testDatabase,
+                document1,
+                /*sendChangeNotifications=*/ false,
+                mLogger);
+        mAppSearchImpl.putDocument(
+                testPackageName,
+                testDatabase,
+                document2,
+                /*sendChangeNotifications=*/ false,
+                mLogger);
         // No query filters specified. package2 should only get its own documents back.
         SearchSpec searchSpec =
                 new SearchSpec.Builder().setTermMatch(TermMatchType.Code.PREFIX_VALUE).build();
@@ -780,30 +841,28 @@
                         .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build())
                 .build();
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 PACKAGE_NAME,
                 DATABASE,
                 Collections.singletonList(schema1),
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // create a backwards incompatible schema
         SetSchemaStats.Builder sStatsBuilder = new SetSchemaStats.Builder(PACKAGE_NAME, DATABASE);
         AppSearchSchema schema2 = new AppSearchSchema.Builder("testSchema").build();
-        mAppSearchImpl.setSchema(
+        internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 PACKAGE_NAME,
                 DATABASE,
                 Collections.singletonList(schema2),
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ sStatsBuilder);
+        assertThat(internalSetSchemaResponse.isSuccess()).isFalse();
 
         SetSchemaStats sStats = sStatsBuilder.build();
         assertThat(sStats.getPackageName()).isEqualTo(PACKAGE_NAME);
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/SearchResultsImplTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/SearchResultsImplTest.java
index 9df244e..dff83a2 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/SearchResultsImplTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/SearchResultsImplTest.java
@@ -20,6 +20,7 @@
 
 import androidx.appsearch.app.AppSearchSchema;
 import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.InternalSetSchemaResponse;
 import androidx.appsearch.app.SearchResult;
 import androidx.appsearch.app.SearchSpec;
 
@@ -51,7 +52,8 @@
         mAppSearchImpl = AppSearchImpl.create(
                 mTemporaryFolder.newFolder(),
                 new UnlimitedLimitConfig(),
-                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
     }
 
     @After
@@ -64,21 +66,25 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert one package1 documents
         GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Query for only 1 result per page
         SearchSpec searchSpec = new SearchSpec.Builder()
@@ -95,12 +101,12 @@
                 searchSpec,
                 /*logger=*/ null);
 
-        List<SearchResult> results = searchResults.getNextPage().get();
+        List<SearchResult> results = searchResults.getNextPageAsync().get();
         assertThat(results).hasSize(1);
         assertThat(results.get(0).getGenericDocument()).isEqualTo(document1);
 
         // We get all documents, and it shouldn't fail if we keep calling getNextPage().
-        results = searchResults.getNextPage().get();
+        results = searchResults.getNextPageAsync().get();
         assertThat(results).isEmpty();
     }
 
@@ -109,16 +115,15 @@
         // Insert package1 schema
         List<AppSearchSchema> schema1 =
                 ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
-        mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 "package1",
                 "database1",
                 schema1,
-                /*visibilityStore=*/ null,
-                /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
-                /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+                /*visibilityDocuments=*/ Collections.emptyList(),
                 /*forceOverride=*/ false,
                 /*version=*/ 0,
                 /* setSchemaStatsBuilder= */ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
 
         // Insert 3 package1 documents
         GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
@@ -127,9 +132,24 @@
                 "schema1").build();
         GenericDocument document3 = new GenericDocument.Builder<>("namespace", "id3",
                 "schema1").build();
-        mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
-        mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
-        mAppSearchImpl.putDocument("package1", "database1", document3, /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document2,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
+        mAppSearchImpl.putDocument(
+                "package1",
+                "database1",
+                document3,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/ null);
 
         // Query for only 2 result per page
         SearchSpec searchSpec = new SearchSpec.Builder()
@@ -146,18 +166,18 @@
                 searchSpec,
                 /*logger=*/ null);
         List<GenericDocument> outDocs = new ArrayList<>();
-        List<SearchResult> results = searchResults.getNextPage().get();
+        List<SearchResult> results = searchResults.getNextPageAsync().get();
         assertThat(results).hasSize(2);
         outDocs.add(results.get(0).getGenericDocument());
         outDocs.add(results.get(1).getGenericDocument());
 
-        results = searchResults.getNextPage().get();
+        results = searchResults.getNextPageAsync().get();
         assertThat(results).hasSize(1);
         outDocs.add(results.get(0).getGenericDocument());
         assertThat(outDocs).containsExactly(document1, document2, document3);
 
         // We get all documents, and it shouldn't fail if we keep calling getNextPage().
-        results = searchResults.getNextPage().get();
+        results = searchResults.getNextPageAsync().get();
         assertThat(results).isEmpty();
     }
 }
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterTest.java
index 29aeb96..4a528ad 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterTest.java
@@ -23,12 +23,14 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import androidx.annotation.NonNull;
-import androidx.appsearch.app.PackageIdentifier;
 import androidx.appsearch.app.SearchSpec;
-import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.OptimizeStrategy;
+import androidx.appsearch.localstorage.UnlimitedLimitConfig;
 import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
 import androidx.appsearch.localstorage.visibilitystore.VisibilityStore;
+import androidx.appsearch.testutil.AppSearchTestUtils;
 
 import com.google.android.icing.proto.ResultSpecProto;
 import com.google.android.icing.proto.SchemaTypeConfigProto;
@@ -37,13 +39,19 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
 
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 public class SearchSpecToProtoConverterTest {
+    /** An optimize strategy that always triggers optimize. */
+    public static final OptimizeStrategy ALWAYS_OPTIMIZE = optimizeInfo -> true;
+
+    @Rule
+    public final TemporaryFolder mTemporaryFolder = new TemporaryFolder();
 
     @Test
     public void testToSearchSpecProto() throws Exception {
@@ -52,7 +60,9 @@
         String prefix2 = PrefixUtil.createPrefix("package", "database2");
 
         SchemaTypeConfigProto configProto = SchemaTypeConfigProto.getDefaultInstance();
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"query",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1, prefix2),
                 /*namespaceMap=*/ImmutableMap.of(
                         prefix1, ImmutableSet.of(
@@ -69,8 +79,7 @@
                                 prefix2 + "typeA", configProto,
                                 prefix2 + "typeB", configProto)));
         // Convert SearchSpec to proto.
-        SearchSpecProto searchSpecProto = converter.toSearchSpecProto(
-                /*queryExpression=*/"query");
+        SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
 
         assertThat(searchSpecProto.getQuery()).isEqualTo("query");
         assertThat(searchSpecProto.getSchemaTypeFiltersList()).containsExactly(
@@ -87,7 +96,9 @@
                 .setOrder(ORDER_ASCENDING)
                 .setRankingStrategy(RANKING_STRATEGY_CREATION_TIMESTAMP).build();
 
-        ScoringSpecProto scoringSpecProto = new SearchSpecToProtoConverter(searchSpec,
+        ScoringSpecProto scoringSpecProto = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"query",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(),
                 /*namespaceMap=*/ImmutableMap.of(),
                 /*schemaMap=*/ImmutableMap.of()).toScoringSpecProto();
@@ -107,7 +118,9 @@
                 .setMaxSnippetSize(456)
                 .build();
 
-        SearchSpecToProtoConverter convert = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter convert = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"query",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(),
                 /*namespaceMap=*/ImmutableMap.of(),
                 /*schemaMap=*/ImmutableMap.of());
@@ -117,7 +130,7 @@
         assertThat(resultSpecProto.getNumPerPage()).isEqualTo(123);
         assertThat(resultSpecProto.getSnippetSpec().getNumToSnippet()).isEqualTo(234);
         assertThat(resultSpecProto.getSnippetSpec().getNumMatchesPerProperty()).isEqualTo(345);
-        assertThat(resultSpecProto.getSnippetSpec().getMaxWindowBytes()).isEqualTo(456);
+        assertThat(resultSpecProto.getSnippetSpec().getMaxWindowUtf32Length()).isEqualTo(456);
     }
 
     @Test
@@ -129,7 +142,9 @@
         String prefix1 = PrefixUtil.createPrefix("package1", "database");
         String prefix2 = PrefixUtil.createPrefix("package2", "database");
 
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"query",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1, prefix2),
                 /*namespaceMap=*/ImmutableMap.of(),
                 /*schemaMap=*/ImmutableMap.of());
@@ -178,7 +193,9 @@
                 prefix2, ImmutableSet.of(
                         prefix2 + "namespaceA",
                         prefix2 + "namespaceB"));
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"query",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1, prefix2),
                 namespaceMap,
                 /*schemaMap=*/ImmutableMap.of());
@@ -219,7 +236,9 @@
                         prefix2 + "namespaceA",
                         prefix2 + "namespaceB"));
 
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"query",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1, prefix2),
                 namespaceMap, /*schemaMap=*/ImmutableMap.of());
         ResultSpecProto resultSpecProto = converter.toResultSpecProto(namespaceMap);
@@ -243,12 +262,13 @@
                         "package$database1/namespace2"),
                 prefix2, ImmutableSet.of("package$database2/namespace3",
                         "package$database2/namespace4"));
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1, prefix2),
                 namespaceMap, /*schemaMap=*/ImmutableMap.of());
 
-        SearchSpecProto searchSpecProto =
-                converter.toSearchSpecProto(/*queryExpression=*/"");
+        SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
 
         assertThat(searchSpecProto.getNamespaceFiltersList()).containsExactly(
                 "package$database1/namespace1", "package$database1/namespace2",
@@ -262,7 +282,9 @@
         String prefix2 = PrefixUtil.createPrefix("package", "database2");
 
         // Only search for prefix1
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1),
                 /*namespaceMap=*/ImmutableMap.of(
                         prefix1, ImmutableSet.of("package$database1/namespace1",
@@ -271,8 +293,7 @@
                             "package$database2/namespace4")),
                 /*schemaMap=*/ImmutableMap.of());
 
-        SearchSpecProto searchSpecProto =
-                converter.toSearchSpecProto(/*queryExpression=*/"");
+        SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
         // Only search prefix1 will return namespace 1 and 2.
         assertThat(searchSpecProto.getNamespaceFiltersList()).containsExactly(
                 "package$database1/namespace1", "package$database1/namespace2");
@@ -285,14 +306,15 @@
                 .addFilterNamespaces("namespace1", "nonExist").build();
         String prefix1 = PrefixUtil.createPrefix("package", "database1");
 
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1),
                 /*namespaceMap=*/ImmutableMap.of(
                         prefix1, ImmutableSet.of("package$database1/namespace1",
                                 "package$database1/namespace2")),
                 /*schemaMap=*/ImmutableMap.of());
-        SearchSpecProto searchSpecProto =
-                converter.toSearchSpecProto(/*queryExpression=*/"");
+        SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
         // If the searching namespace filter is not empty, the target namespace filter will be the
         // intersection of the searching namespace filters that users want to search over and
         // those candidates which are stored in AppSearch.
@@ -307,14 +329,15 @@
                 .addFilterNamespaces("nonExist").build();
         String prefix1 = PrefixUtil.createPrefix("package", "database1");
 
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1),
                 /*namespaceMap=*/ImmutableMap.of(
                         prefix1, ImmutableSet.of("package$database1/namespace1",
                                 "package$database1/namespace2")),
                 /*schemaMap=*/ImmutableMap.of());
-        SearchSpecProto searchSpecProto =
-                converter.toSearchSpecProto(/*queryExpression=*/"");
+        SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
         // If the searching namespace filter is not empty, the target namespace filter will be the
         // intersection of the searching namespace filters that users want to search over and
         // those candidates which are stored in AppSearch.
@@ -328,7 +351,9 @@
         String prefix2 = createPrefix("package", "database2");
         SchemaTypeConfigProto schemaTypeConfigProto =
                 SchemaTypeConfigProto.newBuilder().getDefaultInstanceForType();
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1, prefix2),
                 /*namespaceMap=*/ImmutableMap.of(
                         prefix1, ImmutableSet.of("package$database1/namespace1")),
@@ -339,8 +364,7 @@
                         prefix2, ImmutableMap.of(
                                 "package$database2/typeC", schemaTypeConfigProto,
                                 "package$database2/typeD", schemaTypeConfigProto)));
-        SearchSpecProto searchSpecProto =
-                converter.toSearchSpecProto(/*queryExpression=*/"");
+        SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
         // Empty searching filter will get all types for target filter
         assertThat(searchSpecProto.getSchemaTypeFiltersList()).containsExactly(
                 "package$database1/typeA", "package$database1/typeB",
@@ -355,7 +379,9 @@
         SchemaTypeConfigProto schemaTypeConfigProto =
                 SchemaTypeConfigProto.newBuilder().getDefaultInstanceForType();
         // only search in prefix1
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1),
                 /*namespaceMap=*/ImmutableMap.of(
                         prefix1, ImmutableSet.of("package$database1/namespace1")),
@@ -366,8 +392,7 @@
                         prefix2, ImmutableMap.of(
                                 "package$database2/typeC", schemaTypeConfigProto,
                                 "package$database2/typeD", schemaTypeConfigProto)));
-        SearchSpecProto searchSpecProto =
-                converter.toSearchSpecProto(/*queryExpression=*/"");
+        SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
         // Only search prefix1 will return typeA and B.
         assertThat(searchSpecProto.getSchemaTypeFiltersList()).containsExactly(
                 "package$database1/typeA", "package$database1/typeB");
@@ -381,7 +406,9 @@
         String prefix1 = createPrefix("package", "database1");
         SchemaTypeConfigProto schemaTypeConfigProto =
                 SchemaTypeConfigProto.newBuilder().getDefaultInstanceForType();
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1),
                 /*namespaceMap=*/ImmutableMap.of(
                         prefix1, ImmutableSet.of("package$database1/namespace1")),
@@ -389,8 +416,7 @@
                         prefix1, ImmutableMap.of(
                                 "package$database1/typeA", schemaTypeConfigProto,
                                 "package$database1/typeB", schemaTypeConfigProto)));
-        SearchSpecProto searchSpecProto =
-                converter.toSearchSpecProto(/*queryExpression=*/"");
+        SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
         // If the searching schema filter is not empty, the target schema filter will be the
         // intersection of the schema filters that users want to search over and those candidates
         // which are stored in AppSearch.
@@ -406,7 +432,9 @@
         String prefix1 = createPrefix("package", "database1");
         SchemaTypeConfigProto schemaTypeConfigProto =
                 SchemaTypeConfigProto.newBuilder().getDefaultInstanceForType();
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"",
+                searchSpec,
                 /*prefixes=*/ImmutableSet.of(prefix1),
                 /*namespaceMap=*/ImmutableMap.of(
                         prefix1, ImmutableSet.of("package$database1/namespace1")),
@@ -414,8 +442,7 @@
                         prefix1, ImmutableMap.of(
                                 "package$database1/typeA", schemaTypeConfigProto,
                                 "package$database1/typeB", schemaTypeConfigProto)));
-        SearchSpecProto searchSpecProto =
-                converter.toSearchSpecProto(/*queryExpression=*/"");
+        SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
 
         // If there is no intersection of the schema filters that user want to search over and
         // those filters which are stored in AppSearch, return empty.
@@ -423,14 +450,21 @@
     }
 
     @Test
-    public void testRemoveInaccessibleSchemaFilter() {
-        String prefix = PrefixUtil.createPrefix("package", "database");
+    public void testRemoveInaccessibleSchemaFilter() throws Exception {
+        AppSearchImpl appSearchImpl = AppSearchImpl.create(
+                mTemporaryFolder.newFolder(),
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/null,
+                ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
+        VisibilityStore visibilityStore = new VisibilityStore(appSearchImpl);
 
-        SearchSpec searchSpec = new SearchSpec.Builder().build();
-
+        final String prefix = PrefixUtil.createPrefix("package", "database");
         SchemaTypeConfigProto schemaTypeConfigProto =
                 SchemaTypeConfigProto.newBuilder().getDefaultInstanceForType();
-        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+        SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+                /*queryExpression=*/"",
+                new SearchSpec.Builder().build(),
                 /*prefixes=*/ImmutableSet.of(prefix),
                 /*namespaceMap=*/ImmutableMap.of(
                         prefix, ImmutableSet.of("package$database/namespace1")),
@@ -441,30 +475,13 @@
                                 "package$database/schema3", schemaTypeConfigProto)));
 
         converter.removeInaccessibleSchemaFilter(
-                /*callerPackageName=*/"otherPackageName",
-                new VisibilityStore() {
-                    @Override
-                    public void setVisibility(@NonNull String packageName,
-                            @NonNull String databaseName,
-                            @NonNull Set<String> schemasNotDisplayedBySystem,
-                            @NonNull Map<String, List<PackageIdentifier>> schemasVisibleToPackages)
-                            throws AppSearchException {
+                new CallerAccess(/*callingPackageName=*/"otherPackageName"),
+                visibilityStore,
+                AppSearchTestUtils.createMockVisibilityChecker(
+                        /*visiblePrefixedSchemas=*/ ImmutableSet.of(
+                                prefix + "schema1", prefix + "schema3")));
 
-                    }
-
-                    @Override
-                    public boolean isSchemaSearchableByCaller(@NonNull String packageName,
-                            @NonNull String databaseName, @NonNull String prefixedSchema,
-                            int callerUid, boolean callerHasSystemAccess) {
-                        // filter out schema 2 which is not searchable for user.
-                        return !prefixedSchema.equals(prefix + "schema2");
-                    }
-                },
-                /*callerUid=*/-1,
-                /*callerHasSystemAccess=*/true);
-
-        SearchSpecProto searchSpecProto =
-                converter.toSearchSpecProto(/*queryExpression=*/"");
+        SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
         // schema 2 is filtered out since it is not searchable for user.
         assertThat(searchSpecProto.getSchemaTypeFiltersList()).containsExactly(
                 prefix + "schema1", prefix + "schema3");
@@ -488,45 +505,33 @@
         );
 
         SearchSpecToProtoConverter emptySchemaConverter =
-                new SearchSpecToProtoConverter(searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
+                new SearchSpecToProtoConverter(
+                        /*queryExpression=*/"",
+                        searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
                         /*namespaceMap=*/namespaceMap,
                         /*schemaMap=*/ImmutableMap.of());
-        assertThat(emptySchemaConverter.isNothingToSearch()).isTrue();
+        assertThat(emptySchemaConverter.hasNothingToSearch()).isTrue();
 
         SearchSpecToProtoConverter emptyNamespaceConverter =
-                new SearchSpecToProtoConverter(searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
+                new SearchSpecToProtoConverter(
+                        /*queryExpression=*/"",
+                        searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
                         /*namespaceMap=*/ImmutableMap.of(),
                         schemaMap);
-        assertThat(emptyNamespaceConverter.isNothingToSearch()).isTrue();
+        assertThat(emptyNamespaceConverter.hasNothingToSearch()).isTrue();
 
         SearchSpecToProtoConverter nonEmptyConverter =
-                new SearchSpecToProtoConverter(searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
+                new SearchSpecToProtoConverter(
+                        /*queryExpression=*/"",
+                        searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
                         namespaceMap, schemaMap);
-        assertThat(nonEmptyConverter.isNothingToSearch()).isFalse();
+        assertThat(nonEmptyConverter.hasNothingToSearch()).isFalse();
 
         // remove all target schema filter, and the query becomes nothing to search.
         nonEmptyConverter.removeInaccessibleSchemaFilter(
-                /*callerPackageName=*/"otherPackageName",
-                new VisibilityStore() {
-                    @Override
-                    public void setVisibility(@NonNull String packageName,
-                            @NonNull String databaseName,
-                            @NonNull Set<String> schemasNotDisplayedBySystem,
-                            @NonNull Map<String, List<PackageIdentifier>> schemasVisibleToPackages)
-                            throws AppSearchException {
-
-                    }
-
-                    @Override
-                    public boolean isSchemaSearchableByCaller(@NonNull String packageName,
-                            @NonNull String databaseName, @NonNull String prefixedSchema,
-                            int callerUid, boolean callerHasSystemAccess) {
-                        // filter out all schema.
-                        return false;
-                    }
-                },
-                /*callerUid=*/-1,
-                /*callerHasSystemAccess=*/true);
-        assertThat(nonEmptyConverter.isNothingToSearch()).isTrue();
+                new CallerAccess(/*callingPackageName=*/"otherPackageName"),
+                /*visibilityStore=*/null,
+                /*visibilityChecker=*/null);
+        assertThat(nonEmptyConverter.hasNothingToSearch()).isTrue();
     }
 }
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SnippetTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SnippetTest.java
index fd150c0..9e3b559 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SnippetTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SnippetTest.java
@@ -18,6 +18,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import androidx.appsearch.app.PropertyPath;
 import androidx.appsearch.app.SearchResult;
 import androidx.appsearch.app.SearchResultPage;
 import androidx.appsearch.localstorage.util.PrefixUtil;
@@ -277,6 +278,7 @@
         assertThat(searchResultPage.getResults()).hasSize(1);
         SearchResult.MatchInfo match1 = searchResultPage.getResults().get(0).getMatchInfos().get(0);
         assertThat(match1.getPropertyPath()).isEqualTo("sender.name");
+        assertThat(match1.getPropertyPathObject()).isEqualTo(new PropertyPath("sender.name"));
         assertThat(match1.getFullText()).isEqualTo("Test Name Jr.");
         assertThat(match1.getExactMatchRange()).isEqualTo(
                 new SearchResult.MatchRange(/*lower=*/0, /*upper=*/4));
@@ -290,6 +292,7 @@
 
         SearchResult.MatchInfo match2 = searchResultPage.getResults().get(0).getMatchInfos().get(1);
         assertThat(match2.getPropertyPath()).isEqualTo("sender.email[1]");
+        assertThat(match2.getPropertyPathObject()).isEqualTo(new PropertyPath("sender.email[1]"));
         assertThat(match2.getFullText()).isEqualTo("TestNameJr2@gmail.com");
         assertThat(match2.getExactMatchRange()).isEqualTo(
                 new SearchResult.MatchRange(/*lower=*/0, /*upper=*/21));
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java
new file mode 100644
index 0000000..fc8d058
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright 2022 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.appsearch.localstorage.visibilitystore;
+
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_PACKAGE_NAME_PROPERTY;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_PACKAGE_SCHEMA_TYPE;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_SHA_256_CERT_PROPERTY;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_VISIBILITY_SCHEMA_TYPE;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.InternalSetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.OptimizeStrategy;
+import androidx.appsearch.localstorage.UnlimitedLimitConfig;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+
+import com.google.common.collect.ImmutableList;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.File;
+import java.util.Collections;
+
+public class VisibilityStoreMigrationHelperFromV0Test {
+
+    /**
+     * Always trigger optimize in this class. OptimizeStrategy will be tested in its own test class.
+     */
+    private static final OptimizeStrategy ALWAYS_OPTIMIZE = optimizeInfo -> true;
+
+    @Rule
+    public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+    private File mFile;
+
+    @Before
+    public void setUp() throws Exception {
+        // Give ourselves global query permissions
+        mFile = mTemporaryFolder.newFolder();
+    }
+
+    @Test
+    public void testVisibilityMigration_from0() throws Exception {
+        // Values for a "foo" client
+        String packageNameFoo = "packageFoo";
+        byte[] sha256CertFoo = new byte[32];
+
+        // Values for a "bar" client
+        String packageNameBar = "packageBar";
+        byte[] sha256CertBar = new byte[32];
+
+        // Create AppSearchImpl with visibility document version 0;
+        AppSearchImpl appSearchImplInV0 = buildAppSearchImplInV0();
+        // Build deprecated visibility documents in version 0
+        // "schema1" and "schema2" are platform hidden.
+        // "schema1" is accessible to packageFoo and "schema2" is accessible to packageBar.
+        String prefix = PrefixUtil.createPrefix("package", "database");
+        GenericDocument deprecatedVisibilityToPackageFoo = new GenericDocument.Builder<>(
+                VisibilityDocument.NAMESPACE, "", DEPRECATED_PACKAGE_SCHEMA_TYPE)
+                .setPropertyString(DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY, prefix + "Schema1")
+                .setPropertyString(DEPRECATED_PACKAGE_NAME_PROPERTY, packageNameFoo)
+                .setPropertyBytes(DEPRECATED_SHA_256_CERT_PROPERTY, sha256CertFoo)
+                .build();
+        GenericDocument deprecatedVisibilityToPackageBar = new GenericDocument.Builder<>(
+                VisibilityDocument.NAMESPACE, "", DEPRECATED_PACKAGE_SCHEMA_TYPE)
+                .setPropertyString(DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY, prefix + "Schema2")
+                .setPropertyString(DEPRECATED_PACKAGE_NAME_PROPERTY, packageNameBar)
+                .setPropertyBytes(DEPRECATED_SHA_256_CERT_PROPERTY, sha256CertBar)
+                .build();
+        GenericDocument deprecatedVisibilityDocument = new GenericDocument.Builder<>(
+                VisibilityDocument.NAMESPACE,
+                VisibilityStoreMigrationHelperFromV0.getDeprecatedVisibilityDocumentId(
+                        "package", "database"),
+                DEPRECATED_VISIBILITY_SCHEMA_TYPE)
+                .setPropertyString(DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY,
+                        prefix + "Schema1", prefix + "Schema2")
+                .setPropertyDocument(DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY,
+                        deprecatedVisibilityToPackageFoo, deprecatedVisibilityToPackageBar)
+                .build();
+
+        // Set some client schemas into AppSearchImpl with empty VisibilityDocument since we need to
+        // directly put old version of VisibilityDocument.
+        InternalSetSchemaResponse internalSetSchemaResponse = appSearchImplInV0.setSchema(
+                "package",
+                "database",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("schema1").build(),
+                        new AppSearchSchema.Builder("schema2").build()),
+                /*prefixedVisibilityBundles=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*schemaVersion=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Put deprecated visibility documents in version 0 to AppSearchImpl
+        appSearchImplInV0.putDocument(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                deprecatedVisibilityDocument,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/null);
+
+        // Persist to disk and re-open the AppSearchImpl
+        appSearchImplInV0.close();
+        AppSearchImpl appSearchImpl = AppSearchImpl.create(mFile, new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
+
+        VisibilityDocument actualDocument1 = new VisibilityDocument(
+                appSearchImpl.getDocument(
+                        VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                        VisibilityStore.VISIBILITY_DATABASE_NAME,
+                        VisibilityDocument.NAMESPACE,
+                        /*id=*/ prefix + "Schema1",
+                        /*typePropertyPaths=*/ Collections.emptyMap()));
+        VisibilityDocument actualDocument2 = new VisibilityDocument(
+                appSearchImpl.getDocument(
+                        VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                        VisibilityStore.VISIBILITY_DATABASE_NAME,
+                        VisibilityDocument.NAMESPACE,
+                        /*id=*/ prefix + "Schema2",
+                        /*typePropertyPaths=*/ Collections.emptyMap()));
+
+        VisibilityDocument expectedDocument1 =
+                new VisibilityDocument.Builder(/*id=*/ prefix + "Schema1")
+                        .setNotDisplayedBySystem(true)
+                        .setCreationTimestampMillis(actualDocument1.getCreationTimestampMillis())
+                        .addVisibleToPackage(new PackageIdentifier(packageNameFoo, sha256CertFoo))
+                        .build();
+        VisibilityDocument expectedDocument2 =
+                new VisibilityDocument.Builder(/*id=*/ prefix + "Schema2")
+                        .setNotDisplayedBySystem(true)
+                        .setCreationTimestampMillis(actualDocument2.getCreationTimestampMillis())
+                        .addVisibleToPackage(new PackageIdentifier(packageNameBar, sha256CertBar))
+                        .build();
+        assertThat(actualDocument1).isEqualTo(expectedDocument1);
+        assertThat(actualDocument2).isEqualTo(expectedDocument2);
+    }
+
+    /** Build AppSearchImpl with deprecated visibility schemas version 0.     */
+    private AppSearchImpl buildAppSearchImplInV0() throws Exception {
+        AppSearchSchema visibilityDocumentSchemaV0 = new AppSearchSchema.Builder(
+                DEPRECATED_VISIBILITY_SCHEMA_TYPE)
+                .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+                        DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY)
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                        .build())
+                .addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(
+                        DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY,
+                        DEPRECATED_PACKAGE_SCHEMA_TYPE)
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                        .build())
+                .build();
+        AppSearchSchema visibilityToPackagesSchemaV0 = new AppSearchSchema.Builder(
+                DEPRECATED_PACKAGE_SCHEMA_TYPE)
+                .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+                        DEPRECATED_PACKAGE_NAME_PROPERTY)
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                        .build())
+                .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder(
+                        DEPRECATED_SHA_256_CERT_PROPERTY)
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                        .build())
+                .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+                        DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY)
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                        .build())
+                .build();
+        // Set deprecated visibility schema version 0 into AppSearchImpl.
+        AppSearchImpl appSearchImpl = AppSearchImpl.create(mFile, new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
+        InternalSetSchemaResponse internalSetSchemaResponse = appSearchImpl.setSchema(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                ImmutableList.of(visibilityDocumentSchemaV0, visibilityToPackagesSchemaV0),
+                /*prefixedVisibilityBundles=*/ Collections.emptyList(),
+                /*forceOverride=*/ true, // force push the old version into disk
+                /*version=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        return appSearchImpl;
+    }
+}
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java
new file mode 100644
index 0000000..37d8fb6
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2022 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.appsearch.localstorage.visibilitystore;
+
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV1.DEPRECATED_ROLE_ASSISTANT;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV1.DEPRECATED_ROLE_HOME;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.InternalSetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.SetSchemaRequest;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.OptimizeStrategy;
+import androidx.appsearch.localstorage.UnlimitedLimitConfig;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.File;
+import java.util.Collections;
+
+public class VisibilityStoreMigrationHelperFromV1Test {
+
+    /**
+     * Always trigger optimize in this class. OptimizeStrategy will be tested in its own test class.
+     */
+    private static final OptimizeStrategy ALWAYS_OPTIMIZE = optimizeInfo -> true;
+
+    @Rule
+    public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+    private File mFile;
+
+    @Before
+    public void setUp() throws Exception {
+        // Give ourselves global query permissions
+        mFile = mTemporaryFolder.newFolder();
+    }
+
+    @Test
+    public void testVisibilityMigration_from1() throws Exception {
+        // Values for a "foo" client
+        String packageNameFoo = "packageFoo";
+        byte[] sha256CertFoo = new byte[32];
+
+        // Values for a "bar" client
+        String packageNameBar = "packageBar";
+        byte[] sha256CertBar = new byte[32];
+
+        // Create AppSearchImpl with visibility document version 1;
+        AppSearchImpl appSearchImplInV1 = AppSearchImpl.create(mFile, new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
+        InternalSetSchemaResponse internalSetSchemaResponse = appSearchImplInV1.setSchema(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                ImmutableList.of(VisibilityDocumentV1.SCHEMA),
+                /*prefixedVisibilityBundles=*/ Collections.emptyList(),
+                /*forceOverride=*/ true, // force push the old version into disk
+                /*version=*/ 1,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        // Build deprecated visibility documents in version 1
+        String prefix = PrefixUtil.createPrefix("package", "database");
+        VisibilityDocumentV1 visibilityDocumentV1 =
+                new VisibilityDocumentV1.Builder(prefix + "Schema")
+                        .setNotDisplayedBySystem(true)
+                        .addVisibleToPackage(new PackageIdentifier(packageNameFoo, sha256CertFoo))
+                        .addVisibleToPackage(new PackageIdentifier(packageNameBar, sha256CertBar))
+                        .setVisibleToRoles(ImmutableSet.of(DEPRECATED_ROLE_HOME,
+                                DEPRECATED_ROLE_ASSISTANT))
+                        .setVisibleToPermissions(ImmutableSet.of(SetSchemaRequest.READ_SMS,
+                                SetSchemaRequest.READ_CALENDAR))
+                        .build();
+
+        // Set client schema into AppSearchImpl with empty VisibilityDocument since we need to
+        // directly put old version of VisibilityDocument.
+        internalSetSchemaResponse = appSearchImplInV1.setSchema(
+                "package",
+                "database",
+                ImmutableList.of(
+                        new AppSearchSchema.Builder("Schema").build()),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ false,
+                /*schemaVersion=*/ 0,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+        // Put deprecated visibility documents in version 0 to AppSearchImpl
+        appSearchImplInV1.putDocument(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                visibilityDocumentV1,
+                /*sendChangeNotifications=*/ false,
+                /*logger=*/null);
+
+        // Persist to disk and re-open the AppSearchImpl
+        appSearchImplInV1.close();
+        AppSearchImpl appSearchImpl = AppSearchImpl.create(mFile, new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
+
+        VisibilityDocument actualDocument = new VisibilityDocument(
+                appSearchImpl.getDocument(
+                        VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                        VisibilityStore.VISIBILITY_DATABASE_NAME,
+                        VisibilityDocument.NAMESPACE,
+                        /*id=*/ prefix + "Schema",
+                        /*typePropertyPaths=*/ Collections.emptyMap()));
+
+        assertThat(actualDocument.isNotDisplayedBySystem()).isTrue();
+        assertThat(actualDocument.getPackageNames()).asList().containsExactly(packageNameFoo,
+                packageNameBar);
+        assertThat(actualDocument.getSha256Certs()).isEqualTo(
+                new byte[][] {sha256CertFoo, sha256CertBar});
+        assertThat(actualDocument.getVisibleToPermissions()).containsExactlyElementsIn(
+                ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA),
+                        ImmutableSet.of(SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA)));
+    }
+}
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java
new file mode 100644
index 0000000..0a5364f
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2022 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.appsearch.localstorage.visibilitystore;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertThrows;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.InternalSetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.OptimizeStrategy;
+import androidx.appsearch.localstorage.UnlimitedLimitConfig;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.File;
+import java.util.Collections;
+
+public class VisibilityStoreTest {
+
+    /**
+     * Always trigger optimize in this class. OptimizeStrategy will be tested in its own test class.
+     */
+    private static final OptimizeStrategy ALWAYS_OPTIMIZE = optimizeInfo -> true;
+    @Rule
+    public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+    private File mAppSearchDir;
+    private AppSearchImpl mAppSearchImpl;
+    private VisibilityStore mVisibilityStore;
+
+    @Before
+    public void setUp() throws Exception {
+        mAppSearchDir = mTemporaryFolder.newFolder();
+        mAppSearchImpl = AppSearchImpl.create(
+                mAppSearchDir,
+                new UnlimitedLimitConfig(),
+                /*initStatsBuilder=*/ null,
+                ALWAYS_OPTIMIZE,
+                /*visibilityChecker=*/null);
+        mVisibilityStore = new VisibilityStore(mAppSearchImpl);
+    }
+
+    @After
+    public void tearDown() {
+        mAppSearchImpl.close();
+    }
+
+    /**
+     * Make sure that we don't conflict with any special characters that AppSearchImpl has reserved.
+     */
+    @Test
+    public void testValidPackageName() {
+        assertThat(VisibilityStore.VISIBILITY_PACKAGE_NAME)
+                .doesNotContain(String.valueOf(PrefixUtil.PACKAGE_DELIMITER));
+        assertThat(VisibilityStore.VISIBILITY_PACKAGE_NAME)
+                .doesNotContain(String.valueOf(PrefixUtil.DATABASE_DELIMITER));
+    }
+
+    /**
+     * Make sure that we don't conflict with any special characters that AppSearchImpl has reserved.
+     */
+    @Test
+    public void testValidDatabaseName() {
+        assertThat(VisibilityStore.VISIBILITY_DATABASE_NAME)
+                .doesNotContain(String.valueOf(PrefixUtil.PACKAGE_DELIMITER));
+        assertThat(VisibilityStore.VISIBILITY_DATABASE_NAME)
+                .doesNotContain(String.valueOf(PrefixUtil.DATABASE_DELIMITER));
+    }
+
+    @Test
+    public void testSetAndGetVisibility() throws Exception {
+        String prefix = PrefixUtil.createPrefix("packageName", "databaseName");
+        VisibilityDocument visibilityDocument = new VisibilityDocument.Builder(prefix + "Email")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .build();
+        mVisibilityStore.setVisibility(ImmutableList.of(visibilityDocument));
+
+        assertThat(mVisibilityStore.getVisibility(prefix + "Email"))
+                .isEqualTo(visibilityDocument);
+        // Verify the VisibilityDocument is saved to AppSearchImpl.
+        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                VisibilityDocument.NAMESPACE,
+                /*id=*/ prefix + "Email",
+                /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(actualDocument).isEqualTo(visibilityDocument);
+    }
+
+    @Test
+    public void testRemoveVisibility() throws Exception {
+        VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .build();
+        mVisibilityStore.setVisibility(ImmutableList.of(visibilityDocument));
+
+        assertThat(mVisibilityStore.getVisibility("Email"))
+                .isEqualTo(visibilityDocument);
+        // Verify the VisibilityDocument is saved to AppSearchImpl.
+        VisibilityDocument actualDocument =  new VisibilityDocument(mAppSearchImpl.getDocument(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                VisibilityDocument.NAMESPACE,
+                /*id=*/ "Email",
+                /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(actualDocument).isEqualTo(visibilityDocument);
+
+        mVisibilityStore.removeVisibility(ImmutableSet.of(visibilityDocument.getId()));
+        assertThat(mVisibilityStore.getVisibility("Email")).isNull();
+        // Verify the VisibilityDocument is removed from AppSearchImpl.
+        AppSearchException e = assertThrows(AppSearchException.class,
+                () -> mAppSearchImpl.getDocument(
+                        VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                        VisibilityStore.VISIBILITY_DATABASE_NAME,
+                        VisibilityDocument.NAMESPACE,
+                        /*id=*/ "Email",
+                        /*typePropertyPaths=*/ Collections.emptyMap()));
+        assertThat(e).hasMessageThat().contains(
+                "Document (VS#Pkg$VS#Db/, Email) not found.");
+    }
+
+    @Test
+    public void testRecoverBrokenVisibilitySchema() throws Exception {
+        // Create a broken schema which could be recovered to the latest schema in a compatible
+        // change. Since we won't set force override to true to recover the broken case.
+        AppSearchSchema brokenSchema = new AppSearchSchema.Builder(VisibilityDocument.SCHEMA_TYPE)
+                .build();
+
+        // Index a broken schema into AppSearch, use the latest version to make it broken.
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                VisibilityStore.VISIBILITY_DATABASE_NAME,
+                Collections.singletonList(brokenSchema),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ true,
+                /*version=*/ VisibilityDocument.SCHEMA_VERSION_LATEST,
+                /*setSchemaStatsBuilder=*/ null);
+        assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+        // Create VisibilityStore should recover the broken schema
+        mVisibilityStore = new VisibilityStore(mAppSearchImpl);
+
+        // We should be able to set and get Visibility settings.
+        String prefix = PrefixUtil.createPrefix("packageName", "databaseName");
+        VisibilityDocument visibilityDocument = new VisibilityDocument.Builder(prefix + "Email")
+                .setNotDisplayedBySystem(true)
+                .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+                .build();
+        mVisibilityStore.setVisibility(ImmutableList.of(visibilityDocument));
+
+        assertThat(mVisibilityStore.getVisibility(prefix + "Email"))
+                .isEqualTo(visibilityDocument);
+    }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
index 23b0e83..c7bc830 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+// @exportToFramework:copyToPath(testing/testutils/src/android/app/appsearch/testutil/external/AlwaysSupportedFeatures.java)
 package androidx.appsearch.localstorage;
 
 import androidx.annotation.NonNull;
@@ -33,7 +34,16 @@
         if (Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH.equals(feature)) {
             return true;
         }
-        if (Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER.equals(feature)) {
+        if (Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK.equals(feature)) {
+            return true;
+        }
+        if (Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA.equals(feature)) {
+            return true;
+        }
+        if (Features.GLOBAL_SEARCH_SESSION_GET_BY_ID.equals(feature)) {
+            return true;
+        }
+        if (Features.ADD_PERMISSIONS_AND_GET_VISIBILITY.equals(feature)) {
             return true;
         }
         return false;
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
index a0016a2..ec6723c 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
@@ -16,6 +16,10 @@
 
 package androidx.appsearch.localstorage;
 
+import static androidx.appsearch.app.AppSearchResult.RESULT_INTERNAL_ERROR;
+import static androidx.appsearch.app.AppSearchResult.RESULT_SECURITY_ERROR;
+import static androidx.appsearch.app.InternalSetSchemaResponse.newFailedSetSchemaResponse;
+import static androidx.appsearch.app.InternalSetSchemaResponse.newSuccessfulSetSchemaResponse;
 import static androidx.appsearch.localstorage.util.PrefixUtil.addPrefixToDocument;
 import static androidx.appsearch.localstorage.util.PrefixUtil.createPrefix;
 import static androidx.appsearch.localstorage.util.PrefixUtil.getDatabaseName;
@@ -38,17 +42,22 @@
 import androidx.appsearch.app.GenericDocument;
 import androidx.appsearch.app.GetByDocumentIdRequest;
 import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.InternalSetSchemaResponse;
 import androidx.appsearch.app.PackageIdentifier;
 import androidx.appsearch.app.SearchResultPage;
 import androidx.appsearch.app.SearchSpec;
+import androidx.appsearch.app.SearchSuggestionResult;
+import androidx.appsearch.app.SearchSuggestionSpec;
 import androidx.appsearch.app.SetSchemaResponse;
 import androidx.appsearch.app.StorageInfo;
+import androidx.appsearch.app.VisibilityDocument;
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.localstorage.converter.GenericDocumentToProtoConverter;
 import androidx.appsearch.localstorage.converter.ResultCodeToProtoConverter;
 import androidx.appsearch.localstorage.converter.SchemaToProtoConverter;
 import androidx.appsearch.localstorage.converter.SearchResultToProtoConverter;
 import androidx.appsearch.localstorage.converter.SearchSpecToProtoConverter;
+import androidx.appsearch.localstorage.converter.SearchSuggestionSpecToProtoConverter;
 import androidx.appsearch.localstorage.converter.SetSchemaResponseToProtoConverter;
 import androidx.appsearch.localstorage.converter.TypePropertyPathToProtoConverter;
 import androidx.appsearch.localstorage.stats.InitializeStats;
@@ -58,8 +67,11 @@
 import androidx.appsearch.localstorage.stats.SearchStats;
 import androidx.appsearch.localstorage.stats.SetSchemaStats;
 import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityChecker;
 import androidx.appsearch.localstorage.visibilitystore.VisibilityStore;
-import androidx.appsearch.observer.AppSearchObserverCallback;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityUtil;
+import androidx.appsearch.observer.ObserverCallback;
 import androidx.appsearch.observer.ObserverSpec;
 import androidx.appsearch.util.LogUtil;
 import androidx.collection.ArrayMap;
@@ -68,6 +80,9 @@
 import androidx.core.util.Preconditions;
 
 import com.google.android.icing.IcingSearchEngine;
+import com.google.android.icing.proto.DebugInfoProto;
+import com.google.android.icing.proto.DebugInfoResultProto;
+import com.google.android.icing.proto.DebugInfoVerbosity;
 import com.google.android.icing.proto.DeleteByQueryResultProto;
 import com.google.android.icing.proto.DeleteResultProto;
 import com.google.android.icing.proto.DocumentProto;
@@ -79,6 +94,7 @@
 import com.google.android.icing.proto.GetSchemaResultProto;
 import com.google.android.icing.proto.IcingSearchEngineOptions;
 import com.google.android.icing.proto.InitializeResultProto;
+import com.google.android.icing.proto.LogSeverity;
 import com.google.android.icing.proto.NamespaceStorageInfoProto;
 import com.google.android.icing.proto.OptimizeResultProto;
 import com.google.android.icing.proto.PersistToDiskResultProto;
@@ -97,6 +113,7 @@
 import com.google.android.icing.proto.StatusProto;
 import com.google.android.icing.proto.StorageInfoProto;
 import com.google.android.icing.proto.StorageInfoResultProto;
+import com.google.android.icing.proto.SuggestionResponse;
 import com.google.android.icing.proto.TypePropertyMask;
 import com.google.android.icing.proto.UsageReport;
 
@@ -161,14 +178,7 @@
                     TypePropertyMask.newBuilder().setSchemaType(
                             GetByDocumentIdRequest.PROJECTION_SCHEMA_TYPE_WILDCARD)).build();
 
-    /** A ResultSpec that uses projection to skip all properties. */
-    private static final ResultSpecProto RESULT_SPEC_NO_PROPERTIES =
-            ResultSpecProto.newBuilder().addTypePropertyMasks(
-                    TypePropertyMask.newBuilder().setSchemaType(
-                            GetByDocumentIdRequest.PROJECTION_SCHEMA_TYPE_WILDCARD)).build();
-
     private final ReadWriteLock mReadWriteLock = new ReentrantReadWriteLock();
-    private final LogUtil mLogUtil = new LogUtil(TAG);
     private final OptimizeStrategy mOptimizeStrategy;
     private final LimitConfig mLimitConfig;
 
@@ -211,6 +221,21 @@
     private final ObserverManager mObserverManager = new ObserverManager();
 
     /**
+     * VisibilityStore will be used in {@link #setSchema} and {@link #getSchema} to store and query
+     * visibility information. But to create a {@link VisibilityStore}, it will call
+     * {@link #setSchema} and {@link #getSchema} to get the visibility schema. Make it nullable to
+     * avoid call it before we actually create it.
+     */
+    @Nullable
+    @VisibleForTesting
+    @GuardedBy("mReadWriteLock")
+    final VisibilityStore mVisibilityStoreLocked;
+
+    @Nullable
+    @GuardedBy("mReadWriteLock")
+    private final VisibilityChecker mVisibilityCheckerLocked;
+
+    /**
      * The counter to check when to call {@link #checkForOptimize}. The
      * interval is
      * {@link #CHECK_OPTIMIZE_INTERVAL}.
@@ -234,15 +259,20 @@
      * and putDocument.
      *
      * @param initStatsBuilder collects stats for initialization if provided.
+     * @param visibilityChecker The {@link VisibilityChecker} that check whether the caller has
+     *                          access to aa specific schema. Pass null will lost that ability and
+     *                          global querier could only get their own data.
      */
     @NonNull
     public static AppSearchImpl create(
             @NonNull File icingDir,
             @NonNull LimitConfig limitConfig,
             @Nullable InitializeStats.Builder initStatsBuilder,
-            @NonNull OptimizeStrategy optimizeStrategy)
+            @NonNull OptimizeStrategy optimizeStrategy,
+            @Nullable VisibilityChecker visibilityChecker)
             throws AppSearchException {
-        return new AppSearchImpl(icingDir, limitConfig, initStatsBuilder, optimizeStrategy);
+        return new AppSearchImpl(icingDir, limitConfig, initStatsBuilder, optimizeStrategy,
+                visibilityChecker);
     }
 
     /**
@@ -252,11 +282,13 @@
             @NonNull File icingDir,
             @NonNull LimitConfig limitConfig,
             @Nullable InitializeStats.Builder initStatsBuilder,
-            @NonNull OptimizeStrategy optimizeStrategy)
+            @NonNull OptimizeStrategy optimizeStrategy,
+            @Nullable VisibilityChecker visibilityChecker)
             throws AppSearchException {
         Preconditions.checkNotNull(icingDir);
         mLimitConfig = Preconditions.checkNotNull(limitConfig);
         mOptimizeStrategy = Preconditions.checkNotNull(optimizeStrategy);
+        mVisibilityCheckerLocked = visibilityChecker;
 
         mReadWriteLock.writeLock().lock();
         try {
@@ -264,18 +296,20 @@
             // than once. It's unnecessary and can be a costly operation.
             IcingSearchEngineOptions options = IcingSearchEngineOptions.newBuilder()
                     .setBaseDir(icingDir.getAbsolutePath()).build();
-            mLogUtil.piiTrace("Constructing IcingSearchEngine, request", options);
+            LogUtil.piiTrace(TAG, "Constructing IcingSearchEngine, request", options);
             mIcingSearchEngineLocked = new IcingSearchEngine(options);
-            mLogUtil.piiTrace(
+            LogUtil.piiTrace(
+                    TAG,
                     "Constructing IcingSearchEngine, response",
                     ObjectsCompat.hashCode(mIcingSearchEngineLocked));
 
             // The core initialization procedure. If any part of this fails, we bail into
             // resetLocked(), deleting all data (but hopefully allowing AppSearchImpl to come up).
             try {
-                mLogUtil.piiTrace("icingSearchEngine.initialize, request");
+                LogUtil.piiTrace(TAG, "icingSearchEngine.initialize, request");
                 InitializeResultProto initializeResultProto = mIcingSearchEngineLocked.initialize();
-                mLogUtil.piiTrace(
+                LogUtil.piiTrace(
+                        TAG,
                         "icingSearchEngine.initialize, response",
                         initializeResultProto.getStatus(),
                         initializeResultProto);
@@ -295,10 +329,11 @@
                 long prepareSchemaAndNamespacesLatencyStartMillis = SystemClock.elapsedRealtime();
                 SchemaProto schemaProto = getSchemaProtoLocked();
 
-                mLogUtil.piiTrace("init:getAllNamespaces, request");
+                LogUtil.piiTrace(TAG, "init:getAllNamespaces, request");
                 GetAllNamespacesResultProto getAllNamespacesResultProto =
                         mIcingSearchEngineLocked.getAllNamespaces();
-                mLogUtil.piiTrace(
+                LogUtil.piiTrace(
+                        TAG,
                         "init:getAllNamespaces, response",
                         getAllNamespacesResultProto.getNamespacesCount(),
                         getAllNamespacesResultProto);
@@ -344,7 +379,7 @@
                                     - prepareSchemaAndNamespacesLatencyStartMillis));
                 }
 
-                mLogUtil.piiTrace("Init completed successfully");
+                LogUtil.piiTrace(TAG, "Init completed successfully");
 
             } catch (AppSearchException e) {
                 // Some error. Reset and see if it fixes it.
@@ -355,6 +390,14 @@
                 resetLocked(initStatsBuilder);
             }
 
+            long prepareVisibilityStoreLatencyStartMillis = SystemClock.elapsedRealtime();
+            mVisibilityStoreLocked = new VisibilityStore(this);
+            long prepareVisibilityStoreLatencyEndMillis = SystemClock.elapsedRealtime();
+            if (initStatsBuilder != null) {
+                initStatsBuilder.setPrepareVisibilityStoreLatencyMillis((int)
+                        (prepareVisibilityStoreLatencyEndMillis
+                                - prepareVisibilityStoreLatencyStartMillis));
+            }
         } finally {
             mReadWriteLock.writeLock().unlock();
         }
@@ -381,9 +424,9 @@
                 return;
             }
             persistToDisk(PersistType.Code.FULL);
-            mLogUtil.piiTrace("icingSearchEngine.close, request");
+            LogUtil.piiTrace(TAG, "icingSearchEngine.close, request");
             mIcingSearchEngineLocked.close();
-            mLogUtil.piiTrace("icingSearchEngine.close, response");
+            LogUtil.piiTrace(TAG, "icingSearchEngine.close, response");
             mClosedLocked = true;
         } catch (AppSearchException e) {
             Log.w(TAG, "Error when closing AppSearchImpl.", e);
@@ -397,186 +440,426 @@
      *
      * <p>This method belongs to mutate group.
      *
-     * @param packageName                   The package name that owns the schemas.
-     * @param databaseName                  The name of the database where this schema lives.
-     * @param schemas                       Schemas to set for this app.
-     * @param visibilityStore               If set, {@code schemasNotDisplayedBySystem} and {@code
-     *                                      schemasVisibleToPackages} will be saved here if the
-     *                                      schema is successfully applied.
-     * @param schemasNotDisplayedBySystem   Schema types that should not be surfaced on platform
-     *                                      surfaces.
-     * @param schemasVisibleToPackages      Schema types that are visible to the specified packages.
-     * @param forceOverride                 Whether to force-apply the schema even if it is
-     *                                      incompatible. Documents
-     *                                      which do not comply with the new schema will be deleted.
-     * @param version                       The overall version number of the request.
-     * @param setSchemaStatsBuilder         Builder for {@link SetSchemaStats} to hold stats for
-     *                                      setSchema
-     * @return The response contains deleted schema types and incompatible schema types of this
-     * call.
+     * @param packageName                 The package name that owns the schemas.
+     * @param databaseName                The name of the database where this schema lives.
+     * @param schemas                     Schemas to set for this app.
+     * @param visibilityDocuments         {@link VisibilityDocument}s that contain all
+     *                                    visibility setting information for those schemas
+     *                                    has user custom settings. Other schemas in the list
+     *                                    that don't has a {@link VisibilityDocument}
+     *                                    will be treated as having the default visibility,
+     *                                    which is accessible by the system and no other packages.
+     * @param forceOverride               Whether to force-apply the schema even if it is
+     *                                    incompatible. Documents
+     *                                    which do not comply with the new schema will be deleted.
+     * @param version                     The overall version number of the request.
+     * @param setSchemaStatsBuilder       Builder for {@link SetSchemaStats} to hold stats for
+     *                                    setSchema
+     * @return A success {@link InternalSetSchemaResponse} with a {@link SetSchemaResponse}. Or a
+     * failed {@link InternalSetSchemaResponse} if this call contains incompatible change. The
+     * {@link SetSchemaResponse} in the failed {@link InternalSetSchemaResponse} contains which type
+     * is incompatible. You need to check the status by
+     * {@link InternalSetSchemaResponse#isSuccess()}.
+     *
      * @throws AppSearchException On IcingSearchEngine error. If the status code is
      *                            FAILED_PRECONDITION for the incompatible change, the
      *                            exception will be converted to the SetSchemaResponse.
      */
     @NonNull
-    public SetSchemaResponse setSchema(
+    public InternalSetSchemaResponse setSchema(
             @NonNull String packageName,
             @NonNull String databaseName,
             @NonNull List<AppSearchSchema> schemas,
-            @Nullable VisibilityStore visibilityStore,
-            @NonNull List<String> schemasNotDisplayedBySystem,
-            @NonNull Map<String, List<PackageIdentifier>> schemasVisibleToPackages,
+            @NonNull List<VisibilityDocument> visibilityDocuments,
             boolean forceOverride,
             int version,
             @Nullable SetSchemaStats.Builder setSchemaStatsBuilder) throws AppSearchException {
         mReadWriteLock.writeLock().lock();
         try {
             throwIfClosedLocked();
-
-            SchemaProto.Builder existingSchemaBuilder = getSchemaProtoLocked().toBuilder();
-
-            SchemaProto.Builder newSchemaBuilder = SchemaProto.newBuilder();
-            for (int i = 0; i < schemas.size(); i++) {
-                AppSearchSchema schema = schemas.get(i);
-                SchemaTypeConfigProto schemaTypeProto =
-                        SchemaToProtoConverter.toSchemaTypeConfigProto(schema, version);
-                newSchemaBuilder.addTypes(schemaTypeProto);
-            }
-
-            String prefix = createPrefix(packageName, databaseName);
-            // Combine the existing schema (which may have types from other prefixes) with this
-            // prefix's new schema. Modifies the existingSchemaBuilder.
-            RewrittenSchemaResults rewrittenSchemaResults = rewriteSchema(prefix,
-                    existingSchemaBuilder,
-                    newSchemaBuilder.build());
-
-            // Apply schema
-            SchemaProto finalSchema = existingSchemaBuilder.build();
-            mLogUtil.piiTrace("setSchema, request", finalSchema.getTypesCount(), finalSchema);
-            SetSchemaResultProto setSchemaResultProto =
-                    mIcingSearchEngineLocked.setSchema(finalSchema, forceOverride);
-            mLogUtil.piiTrace(
-                    "setSchema, response", setSchemaResultProto.getStatus(), setSchemaResultProto);
-
-            if (setSchemaStatsBuilder != null) {
-                setSchemaStatsBuilder.setStatusCode(statusProtoToResultCode(
-                        setSchemaResultProto.getStatus()));
-                AppSearchLoggerHelper.copyNativeStats(setSchemaResultProto,
-                        setSchemaStatsBuilder);
-            }
-
-            // Determine whether it succeeded.
-            try {
-                checkSuccess(setSchemaResultProto.getStatus());
-            } catch (AppSearchException e) {
-                // Swallow the exception for the incompatible change case. We will propagate
-                // those deleted schemas and incompatible types to the SetSchemaResponse.
-                boolean isFailedPrecondition = setSchemaResultProto.getStatus().getCode()
-                        == StatusProto.Code.FAILED_PRECONDITION;
-                boolean isIncompatible = setSchemaResultProto.getDeletedSchemaTypesCount() > 0
-                        || setSchemaResultProto.getIncompatibleSchemaTypesCount() > 0;
-                if (isFailedPrecondition && isIncompatible) {
-                    return SetSchemaResponseToProtoConverter
-                            .toSetSchemaResponse(setSchemaResultProto, prefix);
-                } else {
-                    throw e;
-                }
-            }
-
-            // Update derived data structures.
-            for (SchemaTypeConfigProto schemaTypeConfigProto :
-                    rewrittenSchemaResults.mRewrittenPrefixedTypes.values()) {
-                addToMap(mSchemaMapLocked, prefix, schemaTypeConfigProto);
-            }
-
-            for (String schemaType : rewrittenSchemaResults.mDeletedPrefixedTypes) {
-                removeFromMap(mSchemaMapLocked, prefix, schemaType);
-            }
-
-            if (visibilityStore != null) {
-                Set<String> prefixedSchemasNotDisplayedBySystem =
-                        new ArraySet<>(schemasNotDisplayedBySystem.size());
-                for (int i = 0; i < schemasNotDisplayedBySystem.size(); i++) {
-                    prefixedSchemasNotDisplayedBySystem.add(
-                            prefix + schemasNotDisplayedBySystem.get(i));
-                }
-
-                Map<String, List<PackageIdentifier>> prefixedSchemasVisibleToPackages =
-                        new ArrayMap<>(schemasVisibleToPackages.size());
-                for (Map.Entry<String, List<PackageIdentifier>> entry
-                        : schemasVisibleToPackages.entrySet()) {
-                    prefixedSchemasVisibleToPackages.put(prefix + entry.getKey(), entry.getValue());
-                }
-
-                visibilityStore.setVisibility(
+            if (mObserverManager.isPackageObserved(packageName)) {
+                return doSetSchemaWithChangeNotificationLocked(
                         packageName,
                         databaseName,
-                        prefixedSchemasNotDisplayedBySystem,
-                        prefixedSchemasVisibleToPackages);
+                        schemas,
+                        visibilityDocuments,
+                        forceOverride,
+                        version,
+                        setSchemaStatsBuilder);
+            } else {
+                return doSetSchemaNoChangeNotificationLocked(
+                        packageName,
+                        databaseName,
+                        schemas,
+                        visibilityDocuments,
+                        forceOverride,
+                        version,
+                        setSchemaStatsBuilder);
             }
-
-            return SetSchemaResponseToProtoConverter
-                    .toSetSchemaResponse(setSchemaResultProto, prefix);
         } finally {
             mReadWriteLock.writeLock().unlock();
         }
     }
 
     /**
+     * Updates the AppSearch schema for this app, dispatching change notifications.
+     *
+     * @see #setSchema
+     * @see #doSetSchemaNoChangeNotificationLocked
+     */
+    @GuardedBy("mReadWriteLock")
+    @NonNull
+    private InternalSetSchemaResponse doSetSchemaWithChangeNotificationLocked(
+            @NonNull String packageName,
+            @NonNull String databaseName,
+            @NonNull List<AppSearchSchema> schemas,
+            @NonNull List<VisibilityDocument> visibilityDocuments,
+            boolean forceOverride,
+            int version,
+            @Nullable SetSchemaStats.Builder setSchemaStatsBuilder) throws AppSearchException {
+        // First, capture the old state of the system. This includes the old schema as well as
+        // whether each registered observer can access each type. Once VisibilityStore is updated
+        // by the setSchema call, the information of which observers could see which types will be
+        // lost.
+        GetSchemaResponse oldSchema = getSchema(
+                packageName,
+                databaseName,
+                // A CallerAccess object for internal use that has local access to this database.
+                new CallerAccess(/*callingPackageName=*/packageName));
+
+        // Cache some lookup tables to help us work with the old schema
+        Set<AppSearchSchema> oldSchemaTypes = oldSchema.getSchemas();
+        Map<String, AppSearchSchema> oldSchemaNameToType = new ArrayMap<>(oldSchemaTypes.size());
+        // Maps unprefixed schema name to the set of listening packages that had visibility into
+        // that type under the old schema.
+        Map<String, Set<String>> oldSchemaNameToVisibleListeningPackage =
+                new ArrayMap<>(oldSchemaTypes.size());
+        for (AppSearchSchema oldSchemaType : oldSchemaTypes) {
+            String oldSchemaName = oldSchemaType.getSchemaType();
+            oldSchemaNameToType.put(oldSchemaName, oldSchemaType);
+            oldSchemaNameToVisibleListeningPackage.put(
+                    oldSchemaName,
+                    mObserverManager.getObserversForSchemaType(
+                            packageName,
+                            databaseName,
+                            oldSchemaName,
+                            mVisibilityStoreLocked,
+                            mVisibilityCheckerLocked));
+        }
+
+        // Apply the new schema
+        InternalSetSchemaResponse internalSetSchemaResponse = doSetSchemaNoChangeNotificationLocked(
+                packageName,
+                databaseName,
+                schemas,
+                visibilityDocuments,
+                forceOverride,
+                version,
+                setSchemaStatsBuilder);
+
+        // This check is needed wherever setSchema is called to detect soft errors which do not
+        // throw an exception but also prevent the schema from actually being applied.
+        if (!internalSetSchemaResponse.isSuccess()) {
+            return internalSetSchemaResponse;
+        }
+
+        // Cache some lookup tables to help us work with the new schema
+        Map<String, AppSearchSchema> newSchemaNameToType = new ArrayMap<>(schemas.size());
+        // Maps unprefixed schema name to the set of listening packages that have visibility into
+        // that type under the new schema.
+        Map<String, Set<String>> newSchemaNameToVisibleListeningPackage =
+                new ArrayMap<>(schemas.size());
+        for (AppSearchSchema newSchemaType : schemas) {
+            String newSchemaName = newSchemaType.getSchemaType();
+            newSchemaNameToType.put(newSchemaName, newSchemaType);
+            newSchemaNameToVisibleListeningPackage.put(
+                    newSchemaName,
+                    mObserverManager.getObserversForSchemaType(
+                            packageName,
+                            databaseName,
+                            newSchemaName,
+                            mVisibilityStoreLocked,
+                            mVisibilityCheckerLocked));
+        }
+
+        // Create a unified set of all schema names mentioned in either the old or new schema.
+        Set<String> allSchemaNames = new ArraySet<>(oldSchemaNameToType.keySet());
+        allSchemaNames.addAll(newSchemaNameToType.keySet());
+
+        // Perform the diff between the old and new schema.
+        for (String schemaName : allSchemaNames) {
+            final AppSearchSchema contentBefore = oldSchemaNameToType.get(schemaName);
+            final AppSearchSchema contentAfter = newSchemaNameToType.get(schemaName);
+
+            final boolean existBefore = (contentBefore != null);
+            final boolean existAfter = (contentAfter != null);
+
+            // This should never happen
+            if (!existBefore && !existAfter) {
+                continue;
+            }
+
+            boolean contentsChanged = true;
+            if (existBefore && existAfter && contentBefore.equals(contentAfter)) {
+                contentsChanged = false;
+            }
+
+            Set<String> oldVisibleListeners =
+                    oldSchemaNameToVisibleListeningPackage.get(schemaName);
+            Set<String> newVisibleListeners =
+                    newSchemaNameToVisibleListeningPackage.get(schemaName);
+            Set<String> allListeningPackages = new ArraySet<>(oldVisibleListeners);
+            if (newVisibleListeners != null) {
+                allListeningPackages.addAll(newVisibleListeners);
+            }
+
+            // Now that we've computed the relationship between the old and new schema, we go
+            // observer by observer and consider the observer's own personal view of the schema.
+            for (String listeningPackageName : allListeningPackages) {
+                // Figure out the visibility
+                final boolean visibleBefore = (
+                        existBefore
+                                && oldVisibleListeners != null
+                                && oldVisibleListeners.contains(listeningPackageName));
+                final boolean visibleAfter = (
+                        existAfter
+                                && newVisibleListeners != null
+                                && newVisibleListeners.contains(listeningPackageName));
+
+                // Now go through the truth table of all the relevant flags.
+                // visibleBefore and visibleAfter take into account existBefore and existAfter, so
+                // we can stop worrying about existBefore and existAfter.
+                boolean sendNotification = false;
+                if (visibleBefore && visibleAfter && contentsChanged) {
+                    sendNotification = true;  // Type configuration was modified
+                } else if (!visibleBefore && visibleAfter) {
+                    sendNotification = true;  // Newly granted visibility or type was created
+                } else if (visibleBefore && !visibleAfter) {
+                    sendNotification = true;  // Revoked visibility or type was deleted
+                } else {
+                    // No visibility before and no visibility after. Nothing to dispatch.
+                }
+
+                if (sendNotification) {
+                    mObserverManager.onSchemaChange(
+                            /*listeningPackageName=*/listeningPackageName,
+                            /*targetPackageName=*/packageName,
+                            /*databaseName=*/databaseName,
+                            /*schemaName=*/schemaName);
+                }
+            }
+        }
+
+        return internalSetSchemaResponse;
+    }
+
+    /**
+     * Updates the AppSearch schema for this app, without dispatching change notifications.
+     *
+     * <p>This method can be used only when no one is observing {@code packageName}.
+     *
+     * @see #setSchema
+     * @see #doSetSchemaWithChangeNotificationLocked
+     */
+    @GuardedBy("mReadWriteLock")
+    @NonNull
+    private InternalSetSchemaResponse doSetSchemaNoChangeNotificationLocked(
+            @NonNull String packageName,
+            @NonNull String databaseName,
+            @NonNull List<AppSearchSchema> schemas,
+            @NonNull List<VisibilityDocument> visibilityDocuments,
+            boolean forceOverride,
+            int version,
+            @Nullable SetSchemaStats.Builder setSchemaStatsBuilder) throws AppSearchException {
+        SchemaProto.Builder existingSchemaBuilder = getSchemaProtoLocked().toBuilder();
+
+        SchemaProto.Builder newSchemaBuilder = SchemaProto.newBuilder();
+        for (int i = 0; i < schemas.size(); i++) {
+            AppSearchSchema schema = schemas.get(i);
+            SchemaTypeConfigProto schemaTypeProto =
+                    SchemaToProtoConverter.toSchemaTypeConfigProto(schema, version);
+            newSchemaBuilder.addTypes(schemaTypeProto);
+        }
+
+        String prefix = createPrefix(packageName, databaseName);
+        // Combine the existing schema (which may have types from other prefixes) with this
+        // prefix's new schema. Modifies the existingSchemaBuilder.
+        RewrittenSchemaResults rewrittenSchemaResults = rewriteSchema(prefix,
+                existingSchemaBuilder,
+                newSchemaBuilder.build());
+
+        // Apply schema
+        SchemaProto finalSchema = existingSchemaBuilder.build();
+        LogUtil.piiTrace(TAG, "setSchema, request", finalSchema.getTypesCount(), finalSchema);
+        SetSchemaResultProto setSchemaResultProto =
+                mIcingSearchEngineLocked.setSchema(finalSchema, forceOverride);
+        LogUtil.piiTrace(
+                TAG, "setSchema, response", setSchemaResultProto.getStatus(), setSchemaResultProto);
+
+        if (setSchemaStatsBuilder != null) {
+            setSchemaStatsBuilder.setStatusCode(statusProtoToResultCode(
+                    setSchemaResultProto.getStatus()));
+            AppSearchLoggerHelper.copyNativeStats(setSchemaResultProto,
+                    setSchemaStatsBuilder);
+        }
+
+        boolean isFailedPrecondition = setSchemaResultProto.getStatus().getCode()
+                == StatusProto.Code.FAILED_PRECONDITION;
+        // Determine whether it succeeded.
+        try {
+            checkSuccess(setSchemaResultProto.getStatus());
+        } catch (AppSearchException e) {
+            // Swallow the exception for the incompatible change case. We will generate a failed
+            // InternalSetSchemaResponse for this case.
+            int deletedTypes = setSchemaResultProto.getDeletedSchemaTypesCount();
+            int incompatibleTypes = setSchemaResultProto.getIncompatibleSchemaTypesCount();
+            boolean isIncompatible = deletedTypes > 0 || incompatibleTypes > 0;
+            if (isFailedPrecondition && !forceOverride  && isIncompatible) {
+                SetSchemaResponse setSchemaResponse = SetSchemaResponseToProtoConverter
+                        .toSetSchemaResponse(setSchemaResultProto, prefix);
+                String errorMessage = "Schema is incompatible."
+                        + "\n  Deleted types: " + setSchemaResponse.getDeletedTypes()
+                        + "\n  Incompatible types: " + setSchemaResponse.getIncompatibleTypes();
+                return newFailedSetSchemaResponse(setSchemaResponse, errorMessage);
+            } else {
+                throw e;
+            }
+        }
+
+        // Update derived data structures.
+        for (SchemaTypeConfigProto schemaTypeConfigProto :
+                rewrittenSchemaResults.mRewrittenPrefixedTypes.values()) {
+            addToMap(mSchemaMapLocked, prefix, schemaTypeConfigProto);
+        }
+
+        for (String schemaType : rewrittenSchemaResults.mDeletedPrefixedTypes) {
+            removeFromMap(mSchemaMapLocked, prefix, schemaType);
+        }
+        // Since the constructor of VisibilityStore will set schema. Avoid call visibility
+        // store before we have already created it.
+        if (mVisibilityStoreLocked != null) {
+            // Add prefix to all visibility documents.
+            List<VisibilityDocument> prefixedVisibilityDocuments =
+                    new ArrayList<>(visibilityDocuments.size());
+            // Find out which Visibility document is deleted or changed to all-default settings.
+            // We need to remove them from Visibility Store.
+            Set<String> deprecatedVisibilityDocuments =
+                    new ArraySet<>(rewrittenSchemaResults.mRewrittenPrefixedTypes.keySet());
+            for (int i = 0; i < visibilityDocuments.size(); i++) {
+                VisibilityDocument unPrefixedDocument = visibilityDocuments.get(i);
+                // The VisibilityDocument is controlled by the client and it's untrusted but we
+                // make it safe by appending a prefix.
+                // We must control the package-database prefix. Therefore even if the client
+                // fake the id, they can only mess their own app. That's totally allowed and
+                // they can do this via the public API too.
+                String prefixedSchemaType = prefix + unPrefixedDocument.getId();
+                prefixedVisibilityDocuments.add(new VisibilityDocument(
+                        unPrefixedDocument.toBuilder()
+                                .setId(prefixedSchemaType)
+                                .build()));
+                // This schema has visibility settings. We should keep it from the removal list.
+                deprecatedVisibilityDocuments.remove(prefixedSchemaType);
+            }
+            // Now deprecatedVisibilityDocuments contains those existing schemas that has
+            // all-default visibility settings, add deleted schemas. That's all we need to
+            // remove.
+            deprecatedVisibilityDocuments.addAll(rewrittenSchemaResults.mDeletedPrefixedTypes);
+            mVisibilityStoreLocked.removeVisibility(deprecatedVisibilityDocuments);
+            mVisibilityStoreLocked.setVisibility(prefixedVisibilityDocuments);
+        }
+        return newSuccessfulSetSchemaResponse(SetSchemaResponseToProtoConverter
+                .toSetSchemaResponse(setSchemaResultProto, prefix));
+    }
+
+    /**
      * Retrieves the AppSearch schema for this package name, database.
      *
      * <p>This method belongs to query group.
      *
-     * @param packageName  Package name that owns this schema
-     * @param databaseName The name of the database where this schema lives.
+     * @param packageName  Package that owns the requested {@link AppSearchSchema} instances.
+     * @param databaseName Database that owns the requested {@link AppSearchSchema} instances.
+     * @param callerAccess Visibility access info of the calling app
      * @throws AppSearchException on IcingSearchEngine error.
      */
     @NonNull
-    public GetSchemaResponse getSchema(@NonNull String packageName,
-            @NonNull String databaseName) throws AppSearchException {
+    public GetSchemaResponse getSchema(
+            @NonNull String packageName,
+            @NonNull String databaseName,
+            @NonNull CallerAccess callerAccess)
+            throws AppSearchException {
         mReadWriteLock.readLock().lock();
         try {
             throwIfClosedLocked();
 
             SchemaProto fullSchema = getSchemaProtoLocked();
-
             String prefix = createPrefix(packageName, databaseName);
             GetSchemaResponse.Builder responseBuilder = new GetSchemaResponse.Builder();
             for (int i = 0; i < fullSchema.getTypesCount(); i++) {
-                String typePrefix = getPrefix(fullSchema.getTypes(i).getSchemaType());
+                // Check that this type belongs to the requested app and that the caller has
+                // access to it.
+                SchemaTypeConfigProto typeConfig = fullSchema.getTypes(i);
+                String prefixedSchemaType = typeConfig.getSchemaType();
+                String typePrefix = getPrefix(prefixedSchemaType);
                 if (!prefix.equals(typePrefix)) {
+                    // This schema type doesn't belong to the database we're querying for.
                     continue;
                 }
-                // Rewrite SchemaProto.types.schema_type
-                SchemaTypeConfigProto.Builder typeConfigBuilder = fullSchema.getTypes(
-                        i).toBuilder();
-                String newSchemaType =
-                        typeConfigBuilder.getSchemaType().substring(prefix.length());
-                typeConfigBuilder.setSchemaType(newSchemaType);
-
-                // Rewrite SchemaProto.types.properties.schema_type
-                for (int propertyIdx = 0;
-                        propertyIdx < typeConfigBuilder.getPropertiesCount();
-                        propertyIdx++) {
-                    PropertyConfigProto.Builder propertyConfigBuilder =
-                            typeConfigBuilder.getProperties(propertyIdx).toBuilder();
-                    if (!propertyConfigBuilder.getSchemaType().isEmpty()) {
-                        String newPropertySchemaType = propertyConfigBuilder.getSchemaType()
-                                .substring(prefix.length());
-                        propertyConfigBuilder.setSchemaType(newPropertySchemaType);
-                        typeConfigBuilder.setProperties(propertyIdx, propertyConfigBuilder);
-                    }
+                if (!VisibilityUtil.isSchemaSearchableByCaller(
+                        callerAccess,
+                        packageName,
+                        prefixedSchemaType,
+                        mVisibilityStoreLocked,
+                        mVisibilityCheckerLocked)) {
+                    // Caller doesn't have access to this type.
+                    continue;
                 }
 
+                // Rewrite SchemaProto.types.schema_type
+                SchemaTypeConfigProto.Builder typeConfigBuilder = typeConfig.toBuilder();
+                PrefixUtil.removePrefixesFromSchemaType(typeConfigBuilder);
                 AppSearchSchema schema = SchemaToProtoConverter.toAppSearchSchema(
                         typeConfigBuilder);
 
-                //TODO(b/183050495) find a place to store the version for the database, rather
-                // than read from a schema.
-                responseBuilder.setVersion(fullSchema.getTypes(i).getVersion());
+                responseBuilder.setVersion(typeConfig.getVersion());
                 responseBuilder.addSchema(schema);
+
+                // Populate visibility info. Since the constructor of VisibilityStore will get
+                // schema. Avoid call visibility store before we have already created it.
+                if (mVisibilityStoreLocked != null) {
+                    String typeName = typeConfig.getSchemaType().substring(typePrefix.length());
+                    VisibilityDocument visibilityDocument =
+                            mVisibilityStoreLocked.getVisibility(prefixedSchemaType);
+                    if (visibilityDocument != null) {
+                        if (visibilityDocument.isNotDisplayedBySystem()) {
+                            responseBuilder
+                                    .addSchemaTypeNotDisplayedBySystem(typeName);
+                        }
+                        String[] packageNames = visibilityDocument.getPackageNames();
+                        byte[][] sha256Certs = visibilityDocument.getSha256Certs();
+                        if (packageNames.length != sha256Certs.length) {
+                            throw new AppSearchException(RESULT_INTERNAL_ERROR,
+                                    "The length of package names and sha256Crets are different!");
+                        }
+                        if (packageNames.length != 0) {
+                            Set<PackageIdentifier> packageIdentifier = new ArraySet<>();
+                            for (int j = 0; j < packageNames.length; j++) {
+                                packageIdentifier.add(new PackageIdentifier(
+                                        packageNames[j], sha256Certs[j]));
+                            }
+                            responseBuilder.setSchemaTypeVisibleToPackages(typeName,
+                                    packageIdentifier);
+                        }
+                        Set<Set<Integer>> visibleToPermissions =
+                                visibilityDocument.getVisibleToPermissions();
+                        if (visibleToPermissions != null) {
+                            responseBuilder.setRequiredPermissionsForSchemaTypeVisibility(
+                                    typeName,  visibleToPermissions);
+                        }
+                    }
+                }
             }
             return responseBuilder.build();
+
         } finally {
             mReadWriteLock.readLock().unlock();
         }
@@ -597,13 +880,14 @@
         mReadWriteLock.readLock().lock();
         try {
             throwIfClosedLocked();
-            mLogUtil.piiTrace("getAllNamespaces, request");
+            LogUtil.piiTrace(TAG, "getAllNamespaces, request");
             // We can't just use mNamespaceMap here because we have no way to prune namespaces from
             // mNamespaceMap when they have no more documents (e.g. after setting schema to empty or
             // using deleteByQuery).
             GetAllNamespacesResultProto getAllNamespacesResultProto =
                     mIcingSearchEngineLocked.getAllNamespaces();
-            mLogUtil.piiTrace(
+            LogUtil.piiTrace(
+                    TAG,
                     "getAllNamespaces, response",
                     getAllNamespacesResultProto.getNamespacesCount(),
                     getAllNamespacesResultProto);
@@ -627,13 +911,20 @@
      *
      * <p>This method belongs to mutate group.
      *
-     * @param packageName  The package name that owns this document.
-     * @param databaseName The databaseName this document resides in.
-     * @param document     The document to index.
+     * @param packageName             The package name that owns this document.
+     * @param databaseName            The databaseName this document resides in.
+     * @param document                The document to index.
+     * @param sendChangeNotifications Whether to dispatch
+     *                                {@link androidx.appsearch.observer.DocumentChangeInfo}
+     *                                messages to observers for this change.
      * @throws AppSearchException on IcingSearchEngine error.
      */
-    public void putDocument(@NonNull String packageName, @NonNull String databaseName,
-            @NonNull GenericDocument document, @Nullable AppSearchLogger logger)
+    public void putDocument(
+            @NonNull String packageName,
+            @NonNull String databaseName,
+            @NonNull GenericDocument document,
+            boolean sendChangeNotifications,
+            @Nullable AppSearchLogger logger)
             throws AppSearchException {
         PutDocumentStats.Builder pStatsBuilder = null;
         if (logger != null) {
@@ -663,9 +954,10 @@
                     packageName, finalDocument.getUri(), finalDocument.getSerializedSize());
 
             // Insert document
-            mLogUtil.piiTrace("putDocument, request", finalDocument.getUri(), finalDocument);
+            LogUtil.piiTrace(TAG, "putDocument, request", finalDocument.getUri(), finalDocument);
             PutResultProto putResultProto = mIcingSearchEngineLocked.put(finalDocument);
-            mLogUtil.piiTrace("putDocument, response", putResultProto.getStatus(), putResultProto);
+            LogUtil.piiTrace(
+                    TAG, "putDocument, response", putResultProto.getStatus(), putResultProto);
 
             // Update caches
             addToMap(mNamespaceMapLocked, prefix, finalDocument.getNamespace());
@@ -688,8 +980,16 @@
             checkSuccess(putResultProto.getStatus());
 
             // Prepare notifications
-            mObserverManager.onDocumentChange(
-                    packageName, databaseName, document.getNamespace(), document.getSchemaType());
+            if (sendChangeNotifications) {
+                mObserverManager.onDocumentChange(
+                        packageName,
+                        databaseName,
+                        document.getNamespace(),
+                        document.getSchemaType(),
+                        document.getId(),
+                        mVisibilityStoreLocked,
+                        mVisibilityCheckerLocked);
+            }
         } finally {
             mReadWriteLock.writeLock().unlock();
 
@@ -758,6 +1058,69 @@
     }
 
     /**
+     * Retrieves a document from the AppSearch index by namespace and document ID from any
+     * application the caller is allowed to view
+     *
+     * <p>This method will handle both Icing engine errors as well as permission errors by
+     * throwing an obfuscated RESULT_NOT_FOUND exception. This is done so the caller doesn't
+     * receive information on whether or not a file they are not allowed to access exists or not.
+     * This is different from the behavior of {@link #getDocument}.
+     *
+     * @param packageName       The package that owns this document.
+     * @param databaseName      The databaseName this document resides in.
+     * @param namespace         The namespace this document resides in.
+     * @param id                The ID of the document to get.
+     * @param typePropertyPaths A map of schema type to a list of property paths to return in the
+     *                          result.
+     * @param callerAccess      Visibility access info of the calling app
+     * @return The Document contents
+     * @throws AppSearchException on IcingSearchEngine error or invalid permissions
+     */
+    @NonNull
+    public GenericDocument globalGetDocument(
+            @NonNull String packageName,
+            @NonNull String databaseName,
+            @NonNull String namespace,
+            @NonNull String id,
+            @NonNull Map<String, List<String>> typePropertyPaths,
+            @NonNull CallerAccess callerAccess) throws AppSearchException {
+        mReadWriteLock.readLock().lock();
+        try {
+            throwIfClosedLocked();
+            // We retrieve the document before checking for access, as we do not know which
+            // schema the document is under. Schema is required for checking access
+            DocumentProto documentProto;
+            try {
+                documentProto = getDocumentProtoByIdLocked(packageName, databaseName,
+                        namespace, id, typePropertyPaths);
+
+                if (!VisibilityUtil.isSchemaSearchableByCaller(
+                        callerAccess,
+                        packageName,
+                        documentProto.getSchema(),
+                        mVisibilityStoreLocked,
+                        mVisibilityCheckerLocked)) {
+                    throw new AppSearchException(AppSearchResult.RESULT_NOT_FOUND);
+                }
+            } catch (AppSearchException e) {
+                // Not passing cause in AppSearchException as that violates privacy guarantees as
+                // user could differentiate between document not existing and not having access.
+                throw new AppSearchException(AppSearchResult.RESULT_NOT_FOUND,
+                        "Document (" + namespace + ", " + id + ") not found.");
+            }
+
+            DocumentProto.Builder documentBuilder = documentProto.toBuilder();
+            removePrefixesFromDocument(documentBuilder);
+            String prefix = createPrefix(packageName, databaseName);
+            Map<String, SchemaTypeConfigProto> schemaTypeMap = mSchemaMapLocked.get(prefix);
+            return GenericDocumentToProtoConverter.toGenericDocument(documentBuilder.build(),
+                    prefix, schemaTypeMap);
+        } finally {
+            mReadWriteLock.readLock().unlock();
+        }
+    }
+
+    /**
      * Retrieves a document from the AppSearch index by namespace and document ID.
      *
      * <p>This method belongs to query group.
@@ -773,47 +1136,24 @@
      */
     @NonNull
     public GenericDocument getDocument(
-            @NonNull String packageName, @NonNull String databaseName,
+            @NonNull String packageName,
+            @NonNull String databaseName,
             @NonNull String namespace,
             @NonNull String id,
             @NonNull Map<String, List<String>> typePropertyPaths) throws AppSearchException {
         mReadWriteLock.readLock().lock();
         try {
             throwIfClosedLocked();
+            DocumentProto documentProto = getDocumentProtoByIdLocked(packageName, databaseName,
+                    namespace, id, typePropertyPaths);
+            DocumentProto.Builder documentBuilder = documentProto.toBuilder();
+            removePrefixesFromDocument(documentBuilder);
+
             String prefix = createPrefix(packageName, databaseName);
-            List<TypePropertyMask.Builder> nonPrefixedPropertyMaskBuilders =
-                    TypePropertyPathToProtoConverter
-                            .toTypePropertyMaskBuilderList(typePropertyPaths);
-            List<TypePropertyMask> prefixedPropertyMasks =
-                    new ArrayList<>(nonPrefixedPropertyMaskBuilders.size());
-            for (int i = 0; i < nonPrefixedPropertyMaskBuilders.size(); ++i) {
-                String nonPrefixedType = nonPrefixedPropertyMaskBuilders.get(i).getSchemaType();
-                String prefixedType = nonPrefixedType.equals(
-                        GetByDocumentIdRequest.PROJECTION_SCHEMA_TYPE_WILDCARD)
-                        ? nonPrefixedType : prefix + nonPrefixedType;
-                prefixedPropertyMasks.add(
-                        nonPrefixedPropertyMaskBuilders.get(i).setSchemaType(prefixedType).build());
-            }
-            GetResultSpecProto getResultSpec =
-                    GetResultSpecProto.newBuilder().addAllTypePropertyMasks(prefixedPropertyMasks)
-                            .build();
-
-            String finalNamespace = createPrefix(packageName, databaseName) + namespace;
-            if (mLogUtil.isPiiTraceEnabled()) {
-                mLogUtil.piiTrace(
-                        "getDocument, request", finalNamespace + ", " + id + "," + getResultSpec);
-            }
-            GetResultProto getResultProto =
-                    mIcingSearchEngineLocked.get(finalNamespace, id, getResultSpec);
-            mLogUtil.piiTrace("getDocument, response", getResultProto.getStatus(), getResultProto);
-            checkSuccess(getResultProto.getStatus());
-
             // The schema type map cannot be null at this point. It could only be null if no
             // schema had ever been set for that prefix. Given we have retrieved a document from
             // the index, we know a schema had to have been set.
             Map<String, SchemaTypeConfigProto> schemaTypeMap = mSchemaMapLocked.get(prefix);
-            DocumentProto.Builder documentBuilder = getResultProto.getDocument().toBuilder();
-            removePrefixesFromDocument(documentBuilder);
             return GenericDocumentToProtoConverter.toGenericDocument(documentBuilder.build(),
                     prefix, schemaTypeMap);
         } finally {
@@ -822,6 +1162,58 @@
     }
 
     /**
+     * Returns a DocumentProto from Icing.
+     *
+     * @param packageName       The package that owns this document.
+     * @param databaseName      The databaseName this document resides in.
+     * @param namespace         The namespace this document resides in.
+     * @param id                The ID of the document to get.
+     * @param typePropertyPaths A map of schema type to a list of property paths to return in the
+     *                          result.
+     * @return the DocumentProto object
+     * @throws AppSearchException on IcingSearchEngine error
+     */
+    @NonNull
+    @GuardedBy("mReadWriteLock")
+    private DocumentProto getDocumentProtoByIdLocked(
+            @NonNull String packageName,
+            @NonNull String databaseName,
+            @NonNull String namespace,
+            @NonNull String id,
+            @NonNull Map<String, List<String>> typePropertyPaths)
+            throws AppSearchException {
+        String prefix = createPrefix(packageName, databaseName);
+        List<TypePropertyMask.Builder> nonPrefixedPropertyMaskBuilders =
+                TypePropertyPathToProtoConverter
+                        .toTypePropertyMaskBuilderList(typePropertyPaths);
+        List<TypePropertyMask> prefixedPropertyMasks =
+                new ArrayList<>(nonPrefixedPropertyMaskBuilders.size());
+        for (int i = 0; i < nonPrefixedPropertyMaskBuilders.size(); ++i) {
+            String nonPrefixedType = nonPrefixedPropertyMaskBuilders.get(i).getSchemaType();
+            String prefixedType = nonPrefixedType.equals(
+                    GetByDocumentIdRequest.PROJECTION_SCHEMA_TYPE_WILDCARD)
+                    ? nonPrefixedType : prefix + nonPrefixedType;
+            prefixedPropertyMasks.add(
+                    nonPrefixedPropertyMaskBuilders.get(i).setSchemaType(prefixedType).build());
+        }
+        GetResultSpecProto getResultSpec =
+                GetResultSpecProto.newBuilder().addAllTypePropertyMasks(prefixedPropertyMasks)
+                        .build();
+
+        String finalNamespace = createPrefix(packageName, databaseName) + namespace;
+        if (LogUtil.isPiiTraceEnabled()) {
+            LogUtil.piiTrace(
+                    TAG, "getDocument, request", finalNamespace + ", " + id + "," + getResultSpec);
+        }
+        GetResultProto getResultProto =
+                mIcingSearchEngineLocked.get(finalNamespace, id, getResultSpec);
+        LogUtil.piiTrace(TAG, "getDocument, response", getResultProto.getStatus(), getResultProto);
+        checkSuccess(getResultProto.getStatus());
+
+        return getResultProto.getDocument();
+    }
+
+    /**
      * Executes a query against the AppSearch index and returns results.
      *
      * <p>This method belongs to query group.
@@ -866,9 +1258,9 @@
 
             String prefix = createPrefix(packageName, databaseName);
             SearchSpecToProtoConverter searchSpecToProtoConverter =
-                    new SearchSpecToProtoConverter(searchSpec, Collections.singleton(prefix),
-                            mNamespaceMapLocked, mSchemaMapLocked);
-            if (searchSpecToProtoConverter.isNothingToSearch()) {
+                    new SearchSpecToProtoConverter(queryExpression, searchSpec,
+                            Collections.singleton(prefix), mNamespaceMapLocked, mSchemaMapLocked);
+            if (searchSpecToProtoConverter.hasNothingToSearch()) {
                 // there is nothing to search over given their search filters, so we can return an
                 // empty SearchResult and skip sending request to Icing.
                 return new SearchResultPage(Bundle.EMPTY);
@@ -876,7 +1268,6 @@
 
             SearchResultPage searchResultPage =
                     doQueryLocked(
-                            queryExpression,
                             searchSpecToProtoConverter,
                             sStatsBuilder);
             addNextPageToken(packageName, searchResultPage.getNextPageToken());
@@ -897,16 +1288,10 @@
      *
      * <p>This method belongs to query group.
      *
-     * @param queryExpression       Query String to search.
-     * @param searchSpec            Spec for setting filters, raw query etc.
-     * @param callerPackageName     Package name of the caller, should belong to the {@code
-     *                              callerUserHandle}.
-     * @param visibilityStore       Optional visibility store to obtain system and package
-     *                              visibility settings from
-     * @param callerUid             UID of the client making the globalQuery call.
-     * @param callerHasSystemAccess Whether the caller has been positively identified as having
-     *                              access to schemas marked system surfaceable.
-     * @param logger                logger to collect globalQuery stats
+     * @param queryExpression Query String to search.
+     * @param searchSpec      Spec for setting filters, raw query etc.
+     * @param callerAccess    Visibility access info of the calling app
+     * @param logger          logger to collect globalQuery stats
      * @return The results of performing this search. It may contain an empty list of results if
      * no documents matched the query.
      * @throws AppSearchException on IcingSearchEngine error.
@@ -915,10 +1300,7 @@
     public SearchResultPage globalQuery(
             @NonNull String queryExpression,
             @NonNull SearchSpec searchSpec,
-            @NonNull String callerPackageName,
-            @Nullable VisibilityStore visibilityStore,
-            int callerUid,
-            boolean callerHasSystemAccess,
+            @NonNull CallerAccess callerAccess,
             @Nullable AppSearchLogger logger) throws AppSearchException {
         long totalLatencyStartMillis = SystemClock.elapsedRealtime();
         SearchStats.Builder sStatsBuilder = null;
@@ -926,7 +1308,7 @@
             sStatsBuilder =
                     new SearchStats.Builder(
                             SearchStats.VISIBILITY_SCOPE_GLOBAL,
-                            callerPackageName);
+                            callerAccess.getCallingPackageName());
         }
 
         mReadWriteLock.readLock().lock();
@@ -951,22 +1333,22 @@
                 }
             }
             SearchSpecToProtoConverter searchSpecToProtoConverter =
-                    new SearchSpecToProtoConverter(searchSpec, prefixFilters, mNamespaceMapLocked,
-                    mSchemaMapLocked);
+                    new SearchSpecToProtoConverter(queryExpression, searchSpec, prefixFilters,
+                            mNamespaceMapLocked, mSchemaMapLocked);
             // Remove those inaccessible schemas.
-            searchSpecToProtoConverter.removeInaccessibleSchemaFilter(callerPackageName,
-                    visibilityStore, callerUid, callerHasSystemAccess);
-            if (searchSpecToProtoConverter.isNothingToSearch()) {
+            searchSpecToProtoConverter.removeInaccessibleSchemaFilter(
+                    callerAccess, mVisibilityStoreLocked, mVisibilityCheckerLocked);
+            if (searchSpecToProtoConverter.hasNothingToSearch()) {
                 // there is nothing to search over given their search filters, so we can return an
                 // empty SearchResult and skip sending request to Icing.
                 return new SearchResultPage(Bundle.EMPTY);
             }
             SearchResultPage searchResultPage =
                     doQueryLocked(
-                            queryExpression,
                             searchSpecToProtoConverter,
                             sStatsBuilder);
-            addNextPageToken(callerPackageName, searchResultPage.getNextPageToken());
+            addNextPageToken(
+                    callerAccess.getCallingPackageName(), searchResultPage.getNextPageToken());
             return searchResultPage;
         } finally {
             mReadWriteLock.readLock().unlock();
@@ -981,15 +1363,13 @@
 
     @GuardedBy("mReadWriteLock")
     private SearchResultPage doQueryLocked(
-            @NonNull String queryExpression,
             @NonNull SearchSpecToProtoConverter searchSpecToProtoConverter,
             @Nullable SearchStats.Builder sStatsBuilder)
             throws AppSearchException {
         // Rewrite the given SearchSpec into SearchSpecProto, ResultSpecProto and ScoringSpecProto.
         // All processes are counted in rewriteSearchSpecLatencyMillis
         long rewriteSearchSpecLatencyStartMillis = SystemClock.elapsedRealtime();
-        SearchSpecProto finalSearchSpec =
-                searchSpecToProtoConverter.toSearchSpecProto(queryExpression);
+        SearchSpecProto finalSearchSpec = searchSpecToProtoConverter.toSearchSpecProto();
         ResultSpecProto finalResultSpec = searchSpecToProtoConverter.toResultSpecProto(
                 mNamespaceMapLocked);
         ScoringSpecProto scoringSpec = searchSpecToProtoConverter.toScoringSpecProto();
@@ -1020,16 +1400,17 @@
             @NonNull ResultSpecProto resultSpec,
             @NonNull ScoringSpecProto scoringSpec,
             @Nullable SearchStats.Builder sStatsBuilder) throws AppSearchException {
-        if (mLogUtil.isPiiTraceEnabled()) {
-            mLogUtil.piiTrace(
+        if (LogUtil.isPiiTraceEnabled()) {
+            LogUtil.piiTrace(
+                    TAG,
                     "search, request",
                     searchSpec.getQuery(),
                     searchSpec + ", " + scoringSpec + ", " + resultSpec);
         }
         SearchResultProto searchResultProto = mIcingSearchEngineLocked.search(
                 searchSpec, scoringSpec, resultSpec);
-        mLogUtil.piiTrace(
-                "search, response", searchResultProto.getResultsCount(), searchResultProto);
+        LogUtil.piiTrace(
+                TAG, "search, response", searchResultProto.getResultsCount(), searchResultProto);
         if (sStatsBuilder != null) {
             sStatsBuilder.setStatusCode(statusProtoToResultCode(searchResultProto.getStatus()));
             AppSearchLoggerHelper.copyNativeStats(searchResultProto.getQueryStats(), sStatsBuilder);
@@ -1039,6 +1420,73 @@
     }
 
     /**
+     * Generates suggestions based on the given search prefix.
+     *
+     * <p>This method belongs to query group.
+     *
+     * @param packageName               The package name that is performing the query.
+     * @param databaseName              The databaseName this query for.
+     * @param suggestionQueryExpression The non-empty query expression used to be completed.
+     * @param searchSuggestionSpec      Spec for setting filters.
+     * @return a List of {@link SearchSuggestionResult}. The returned {@link SearchSuggestionResult}
+     *      are order by the number of {@link androidx.appsearch.app.SearchResult} you could get
+     *      by using that suggestion in {@link #query}.
+     * @throws AppSearchException if the suggestionQueryExpression is empty.
+     */
+    @NonNull
+    public List<SearchSuggestionResult> searchSuggestion(
+            @NonNull String packageName,
+            @NonNull String databaseName,
+            @NonNull String suggestionQueryExpression,
+            @NonNull SearchSuggestionSpec searchSuggestionSpec) throws AppSearchException {
+        mReadWriteLock.readLock().lock();
+        try {
+            throwIfClosedLocked();
+            if (suggestionQueryExpression.isEmpty()) {
+                throw new AppSearchException(
+                        AppSearchResult.RESULT_INVALID_ARGUMENT,
+                        "suggestionQueryExpression cannot be empty.");
+            }
+            if (searchSuggestionSpec.getMaximumResultCount()
+                    > mLimitConfig.getMaxSuggestionCount()) {
+                throw new AppSearchException(
+                        AppSearchResult.RESULT_INVALID_ARGUMENT,
+                        "Trying to get " + searchSuggestionSpec.getMaximumResultCount()
+                                + " suggestion results, which exceeds limit of "
+                                + mLimitConfig.getMaxSuggestionCount());
+            }
+
+            String prefix = createPrefix(packageName, databaseName);
+            SearchSuggestionSpecToProtoConverter searchSuggestionSpecToProtoConverter =
+                    new SearchSuggestionSpecToProtoConverter(suggestionQueryExpression,
+                            searchSuggestionSpec,
+                            Collections.singleton(prefix),
+                            mNamespaceMapLocked);
+
+            if (searchSuggestionSpecToProtoConverter.hasNothingToSearch()) {
+                // there is nothing to search over given their search filters, so we can return an
+                // empty SearchResult and skip sending request to Icing.
+                return new ArrayList<>();
+            }
+
+            SuggestionResponse response = mIcingSearchEngineLocked.searchSuggestions(
+                    searchSuggestionSpecToProtoConverter.toSearchSuggestionSpecProto());
+
+            checkSuccess(response.getStatus());
+            List<SearchSuggestionResult> suggestions =
+                    new ArrayList<>(response.getSuggestionsCount());
+            for (int i = 0; i < response.getSuggestionsCount(); i++) {
+                suggestions.add(new SearchSuggestionResult.Builder()
+                        .setSuggestedResult(response.getSuggestions(i).getQuery())
+                        .build());
+            }
+            return suggestions;
+        } finally {
+            mReadWriteLock.readLock().unlock();
+        }
+    }
+
+    /**
      * Returns a mapping of package names to all the databases owned by that package.
      *
      * <p>This method is inefficient to call repeatedly.
@@ -1088,7 +1536,7 @@
         try {
             throwIfClosedLocked();
 
-            mLogUtil.piiTrace("getNextPage, request", nextPageToken);
+            LogUtil.piiTrace(TAG, "getNextPage, request", nextPageToken);
             checkNextPageToken(packageName, nextPageToken);
             SearchResultProto searchResultProto = mIcingSearchEngineLocked.getNextPage(
                     nextPageToken);
@@ -1099,7 +1547,8 @@
                         statsBuilder);
             }
 
-            mLogUtil.piiTrace(
+            LogUtil.piiTrace(
+                    TAG,
                     "getNextPage, response",
                     searchResultProto.getResultsCount(),
                     searchResultProto);
@@ -1155,7 +1604,7 @@
         try {
             throwIfClosedLocked();
 
-            mLogUtil.piiTrace("invalidateNextPageToken, request", nextPageToken);
+            LogUtil.piiTrace(TAG, "invalidateNextPageToken, request", nextPageToken);
             checkNextPageToken(packageName, nextPageToken);
             mIcingSearchEngineLocked.invalidateNextPageToken(nextPageToken);
 
@@ -1164,7 +1613,7 @@
                 if (tokens != null) {
                     tokens.remove(nextPageToken);
                 } else {
-                    Log.wtf(TAG, "Failed to invalidate token " + nextPageToken + ": tokens are not "
+                    Log.e(TAG, "Failed to invalidate token " + nextPageToken + ": tokens are not "
                             + "cached.");
                 }
             }
@@ -1195,9 +1644,9 @@
                     .setUsageType(usageType)
                     .build();
 
-            mLogUtil.piiTrace("reportUsage, request", report.getDocumentUri(), report);
+            LogUtil.piiTrace(TAG, "reportUsage, request", report.getDocumentUri(), report);
             ReportUsageResultProto result = mIcingSearchEngineLocked.reportUsage(report);
-            mLogUtil.piiTrace("reportUsage, response", result.getStatus(), result);
+            LogUtil.piiTrace(TAG, "reportUsage, response", result.getStatus(), result);
             checkSuccess(result.getStatus());
         } finally {
             mReadWriteLock.writeLock().unlock();
@@ -1234,24 +1683,24 @@
                 // know its type without retrieving it. Do so now.
                 // TODO(b/193494000): If Icing Lib can return information about the deleted
                 //  document's type we can remove this code.
-                if (mLogUtil.isPiiTraceEnabled()) {
-                    mLogUtil.piiTrace(
-                            "removeById, getRequest", prefixedNamespace + ", " + documentId);
+                if (LogUtil.isPiiTraceEnabled()) {
+                    LogUtil.piiTrace(
+                            TAG, "removeById, getRequest", prefixedNamespace + ", " + documentId);
                 }
                 GetResultProto getResult = mIcingSearchEngineLocked.get(
                         prefixedNamespace, documentId, GET_RESULT_SPEC_NO_PROPERTIES);
-                mLogUtil.piiTrace("removeById, getResponse", getResult.getStatus(), getResult);
+                LogUtil.piiTrace(TAG, "removeById, getResponse", getResult.getStatus(), getResult);
                 checkSuccess(getResult.getStatus());
                 schemaType = PrefixUtil.removePrefix(getResult.getDocument().getSchema());
             }
 
-            if (mLogUtil.isPiiTraceEnabled()) {
-                mLogUtil.piiTrace("removeById, request", prefixedNamespace + ", " + documentId);
+            if (LogUtil.isPiiTraceEnabled()) {
+                LogUtil.piiTrace(TAG, "removeById, request", prefixedNamespace + ", " + documentId);
             }
             DeleteResultProto deleteResultProto =
                     mIcingSearchEngineLocked.delete(prefixedNamespace, documentId);
-            mLogUtil.piiTrace(
-                    "removeById, response", deleteResultProto.getStatus(), deleteResultProto);
+            LogUtil.piiTrace(
+                    TAG, "removeById, response", deleteResultProto.getStatus(), deleteResultProto);
 
             if (removeStatsBuilder != null) {
                 removeStatsBuilder.setStatusCode(statusProtoToResultCode(
@@ -1266,7 +1715,14 @@
 
             // Prepare notifications
             if (schemaType != null) {
-                mObserverManager.onDocumentChange(packageName, databaseName, namespace, schemaType);
+                mObserverManager.onDocumentChange(
+                        packageName,
+                        databaseName,
+                        namespace,
+                        schemaType,
+                        documentId,
+                        mVisibilityStoreLocked,
+                        mVisibilityCheckerLocked);
             }
         } finally {
             mReadWriteLock.writeLock().unlock();
@@ -1315,16 +1771,15 @@
             }
 
             SearchSpecToProtoConverter searchSpecToProtoConverter =
-                    new SearchSpecToProtoConverter(searchSpec, Collections.singleton(prefix),
-                            mNamespaceMapLocked, mSchemaMapLocked);
-            if (searchSpecToProtoConverter.isNothingToSearch()) {
+                    new SearchSpecToProtoConverter(queryExpression, searchSpec,
+                            Collections.singleton(prefix), mNamespaceMapLocked, mSchemaMapLocked);
+            if (searchSpecToProtoConverter.hasNothingToSearch()) {
                 // there is nothing to search over given their search filters, so we can return
                 // early and skip sending request to Icing.
                 return;
             }
 
-            SearchSpecProto finalSearchSpec =
-                    searchSpecToProtoConverter.toSearchSpecProto(queryExpression);
+            SearchSpecProto finalSearchSpec = searchSpecToProtoConverter.toSearchSpecProto();
 
             Set<String> prefixedObservedSchemas = null;
             if (mObserverManager.isPackageObserved(packageName)) {
@@ -1340,13 +1795,8 @@
                 }
             }
 
-            if (prefixedObservedSchemas != null && !prefixedObservedSchemas.isEmpty()) {
-                doRemoveByQueryWithChangeNotificationLocked(
-                        packageName, finalSearchSpec, prefixedObservedSchemas, removeStatsBuilder);
-            } else {
-                doRemoveByQueryNoChangeNotificationLocked(
-                        packageName, finalSearchSpec, removeStatsBuilder);
-            }
+            doRemoveByQueryLocked(
+                    packageName, finalSearchSpec, prefixedObservedSchemas, removeStatsBuilder);
 
         } finally {
             mReadWriteLock.writeLock().unlock();
@@ -1358,121 +1808,30 @@
     }
 
     /**
-     * Executes removeByQuery, creating change notifications for removal.
+     * Executes removeByQuery.
      *
-     * @param packageName         The package name that owns the documents.
-     * @param finalSearchSpec     The final search spec that has been written through
-     *                            {@link SearchSpecToProtoConverter}.
+     * <p>Change notifications will be created if prefixedObservedSchemas is not null.
+     *
+     * @param packageName             The package name that owns the documents.
+     * @param finalSearchSpec         The final search spec that has been written through
+     *                                {@link SearchSpecToProtoConverter}.
      * @param prefixedObservedSchemas The set of prefixed schemas that have valid registered
      *                                observers. Only changes to schemas in this set will be queued.
      */
-    // TODO(b/193494000): Have Icing Lib return the URIs and types that were actually
-    //  deleted instead of querying in two passes like this.
     @GuardedBy("mReadWriteLock")
-    private void doRemoveByQueryWithChangeNotificationLocked(
+    private void doRemoveByQueryLocked(
             @NonNull String packageName,
             @NonNull SearchSpecProto finalSearchSpec,
-            @NonNull Set<String> prefixedObservedSchemas,
+            @Nullable Set<String> prefixedObservedSchemas,
             @Nullable RemoveStats.Builder removeStatsBuilder) throws AppSearchException {
-        mLogUtil.piiTrace(
-                "removeByQuery.withChangeNotification, query request", finalSearchSpec);
-        SearchResultProto searchResultProto = mIcingSearchEngineLocked.search(
-                finalSearchSpec,
-                ScoringSpecProto.getDefaultInstance(),
-                RESULT_SPEC_NO_PROPERTIES);
-        mLogUtil.piiTrace(
-                "removeByQuery.withChangeNotification, query response",
-                searchResultProto.getStatus(),
-                searchResultProto);
-
-        // TODO(b/187206766) also log query stats here once it's added to RemoveStats.Builder
-        checkSuccess(searchResultProto.getStatus());
-
-        long nextPageToken = searchResultProto.getNextPageToken();
-        int numDocumentsDeleted = 0;
-        while (true) {
-            for (int i = 0; i < searchResultProto.getResultsCount(); i++) {
-                DocumentProto document = searchResultProto.getResults(i).getDocument();
-
-                if (mLogUtil.isPiiTraceEnabled()) {
-                    mLogUtil.piiTrace(
-                            "removeByQuery.withChangeNotification, removeById request",
-                            document.getNamespace() + ", " + document.getUri());
-                }
-                DeleteResultProto deleteResultProto =
-                        mIcingSearchEngineLocked.delete(document.getNamespace(), document.getUri());
-                mLogUtil.piiTrace(
-                        "removeByQuery.withChangeNotification, removeById response",
-                        deleteResultProto.getStatus(),
-                        deleteResultProto);
-
-                if (removeStatsBuilder != null) {
-                    removeStatsBuilder.setStatusCode(statusProtoToResultCode(
-                            deleteResultProto.getStatus()));
-                    // TODO(b/187206766): This will keep overwriting the remove stats. This whole
-                    //  method should be replaced with native handling within icinglib for returning
-                    //  namespaces, types and URIs. That should populate the same proto as the
-                    //  non-observed case and remove the need for this hacky implementation and log.
-                    AppSearchLoggerHelper.copyNativeStats(
-                            deleteResultProto.getDeleteStats(), removeStatsBuilder);
-                }
-
-                // It shouldn't be possible for this to fail; we have the write lock!
-                checkSuccess(deleteResultProto.getStatus());
-                numDocumentsDeleted++;
-
-                // Prepare change notifications
-                if (prefixedObservedSchemas.contains(document.getSchema())) {
-                    mObserverManager.onDocumentChange(
-                            packageName,
-                            /*databaseName=*/ PrefixUtil.getDatabaseName(document.getNamespace()),
-                            /*namespace=*/ PrefixUtil.removePrefix(document.getNamespace()),
-                            /*schemaType=*/ PrefixUtil.removePrefix(document.getSchema()));
-                }
-            }
-
-            // Fetch next page
-            if (nextPageToken == EMPTY_PAGE_TOKEN) {
-                break;
-            }
-            mLogUtil.piiTrace(
-                    "removeByQuery.withChangeNotification, getNextPage request",
-                    nextPageToken);
-            searchResultProto = mIcingSearchEngineLocked.getNextPage(nextPageToken);
-            mLogUtil.piiTrace(
-                    "removeByQuery.withChangeNotification, getNextPage response",
-                    searchResultProto.getResultsCount(),
-                    searchResultProto);
-
-            // TODO(b/187206766) also log query stats here once it's added to RemoveStats.Builder
-            checkSuccess(searchResultProto.getStatus());
-
-            nextPageToken = searchResultProto.getNextPageToken();
-        }
-
-        // Update derived maps
-        updateDocumentCountAfterRemovalLocked(packageName, numDocumentsDeleted);
-    }
-
-    /**
-     * Executes removeByQuery without dispatching any change notifications.
-     *
-     * This is faster than {@link #doRemoveByQueryWithChangeNotificationLocked}.
-     *
-     * @param packageName         The package name that owns the documents.
-     * @param rewrittenSearchSpec A search spec that has been run through
-     *                            {@link #rewriteSearchSpecForPrefixesLocked}.
-     */
-    @GuardedBy("mReadWriteLock")
-    private void doRemoveByQueryNoChangeNotificationLocked(
-            @NonNull String packageName,
-            @NonNull SearchSpecProto rewrittenSearchSpec,
-            @Nullable RemoveStats.Builder removeStatsBuilder) throws AppSearchException {
-        mLogUtil.piiTrace("removeByQuery, request", rewrittenSearchSpec);
+        LogUtil.piiTrace(TAG, "removeByQuery, request", finalSearchSpec);
+        boolean returnDeletedDocumentInfo =
+                prefixedObservedSchemas != null && !prefixedObservedSchemas.isEmpty();
         DeleteByQueryResultProto deleteResultProto =
-                mIcingSearchEngineLocked.deleteByQuery(rewrittenSearchSpec);
-        mLogUtil.piiTrace(
-                "removeByQuery, response", deleteResultProto.getStatus(), deleteResultProto);
+                mIcingSearchEngineLocked.deleteByQuery(finalSearchSpec,
+                        returnDeletedDocumentInfo);
+        LogUtil.piiTrace(
+                TAG, "removeByQuery, response", deleteResultProto.getStatus(), deleteResultProto);
 
         if (removeStatsBuilder != null) {
             removeStatsBuilder.setStatusCode(statusProtoToResultCode(
@@ -1491,6 +1850,11 @@
         int numDocumentsDeleted =
                 deleteResultProto.getDeleteByQueryStats().getNumDocumentsDeleted();
         updateDocumentCountAfterRemovalLocked(packageName, numDocumentsDeleted);
+
+        if (prefixedObservedSchemas != null && !prefixedObservedSchemas.isEmpty()) {
+            dispatchChangeNotificationsAfterRemoveByQueryLocked(packageName,
+                    deleteResultProto, prefixedObservedSchemas);
+        }
     }
 
     @GuardedBy("mReadWriteLock")
@@ -1509,6 +1873,35 @@
         }
     }
 
+    @GuardedBy("mReadWriteLock")
+    private void dispatchChangeNotificationsAfterRemoveByQueryLocked(
+            @NonNull String packageName,
+            @NonNull DeleteByQueryResultProto deleteResultProto,
+            @NonNull Set<String> prefixedObservedSchemas
+    ) throws AppSearchException {
+        for (int i = 0; i < deleteResultProto.getDeletedDocumentsCount(); ++i) {
+            DeleteByQueryResultProto.DocumentGroupInfo group =
+                    deleteResultProto.getDeletedDocuments(i);
+            if (!prefixedObservedSchemas.contains(group.getSchema())) {
+                continue;
+            }
+            String databaseName = PrefixUtil.getDatabaseName(group.getNamespace());
+            String namespace = PrefixUtil.removePrefix(group.getNamespace());
+            String schemaType = PrefixUtil.removePrefix(group.getSchema());
+            for (int j = 0; j < group.getUrisCount(); ++j) {
+                String uri = group.getUris(j);
+                mObserverManager.onDocumentChange(
+                        packageName,
+                        databaseName,
+                        namespace,
+                        schemaType,
+                        uri,
+                        mVisibilityStoreLocked,
+                        mVisibilityCheckerLocked);
+            }
+        }
+    }
+
     /** Estimates the storage usage info for a specific package. */
     @NonNull
     public StorageInfo getStorageInfoForPackage(@NonNull String packageName)
@@ -1586,10 +1979,11 @@
         mReadWriteLock.readLock().lock();
         try {
             throwIfClosedLocked();
-            mLogUtil.piiTrace("getStorageInfo, request");
+            LogUtil.piiTrace(TAG, "getStorageInfo, request");
             StorageInfoResultProto storageInfoResult = mIcingSearchEngineLocked.getStorageInfo();
-            mLogUtil.piiTrace("getStorageInfo, response", storageInfoResult.getStatus(),
-                    storageInfoResult);
+            LogUtil.piiTrace(
+                    TAG,
+                    "getStorageInfo, response", storageInfoResult.getStatus(), storageInfoResult);
             checkSuccess(storageInfoResult.getStatus());
             return storageInfoResult.getStorageInfo();
         } finally {
@@ -1652,6 +2046,33 @@
     }
 
     /**
+     * Returns the native debug info capsuled in {@link DebugInfoResultProto} directly from
+     * IcingSearchEngine.
+     *
+     * @param verbosity The verbosity of the debug info. {@link DebugInfoVerbosity.Code#BASIC}
+     *                  will return the simplest debug information.
+     *                  {@link DebugInfoVerbosity.Code#DETAILED} will return more detailed
+     *                  debug information as indicated in the comments in debug.proto
+     */
+    @NonNull
+    public DebugInfoProto getRawDebugInfoProto(@NonNull DebugInfoVerbosity.Code verbosity)
+            throws AppSearchException {
+        mReadWriteLock.readLock().lock();
+        try {
+            throwIfClosedLocked();
+            LogUtil.piiTrace(TAG, "getDebugInfo, request");
+            DebugInfoResultProto debugInfoResult = mIcingSearchEngineLocked.getDebugInfo(
+                    verbosity);
+            LogUtil.piiTrace(TAG, "getDebugInfo, response", debugInfoResult.getStatus(),
+                    debugInfoResult);
+            checkSuccess(debugInfoResult.getStatus());
+            return debugInfoResult.getDebugInfo();
+        } finally {
+            mReadWriteLock.readLock().unlock();
+        }
+    }
+
+    /**
      * Persists all update/delete requests to the disk.
      *
      * <p>If the app crashes after a call to PersistToDisk with {@link PersistType.Code#FULL}, Icing
@@ -1677,10 +2098,11 @@
         try {
             throwIfClosedLocked();
 
-            mLogUtil.piiTrace("persistToDisk, request", persistType);
+            LogUtil.piiTrace(TAG, "persistToDisk, request", persistType);
             PersistToDiskResultProto persistToDiskResultProto =
                     mIcingSearchEngineLocked.persistToDisk(persistType);
-            mLogUtil.piiTrace(
+            LogUtil.piiTrace(
+                    TAG,
                     "persistToDisk, response",
                     persistToDiskResultProto.getStatus(),
                     persistToDiskResultProto);
@@ -1746,13 +2168,15 @@
 
             // Apply schema, set force override to true to remove all schemas and documents that
             // doesn't belong to any of these installed packages.
-            mLogUtil.piiTrace(
+            LogUtil.piiTrace(
+                    TAG,
                     "clearPackageData.setSchema, request",
                     finalSchema.getTypesCount(),
                     finalSchema);
             SetSchemaResultProto setSchemaResultProto = mIcingSearchEngineLocked.setSchema(
                     finalSchema, /*ignoreErrorsAndDeleteDocuments=*/ true);
-            mLogUtil.piiTrace(
+            LogUtil.piiTrace(
+                    TAG,
                     "clearPackageData.setSchema, response",
                     setSchemaResultProto.getStatus(),
                     setSchemaResultProto);
@@ -1771,12 +2195,13 @@
                     }
                     for (String databaseName : databaseNames) {
                         String removedPrefix = createPrefix(packageName, databaseName);
-                        mSchemaMapLocked.remove(removedPrefix);
+                        Map<String, SchemaTypeConfigProto> removedSchemas =
+                                mSchemaMapLocked.remove(removedPrefix);
+                        mVisibilityStoreLocked.removeVisibility(removedSchemas.keySet());
                         mNamespaceMapLocked.remove(removedPrefix);
                     }
                 }
             }
-            //TODO(b/145759910) clear visibility setting for package.
         } finally {
             mReadWriteLock.writeLock().unlock();
         }
@@ -1792,9 +2217,10 @@
     @GuardedBy("mReadWriteLock")
     private void resetLocked(@Nullable InitializeStats.Builder initStatsBuilder)
             throws AppSearchException {
-        mLogUtil.piiTrace("icingSearchEngine.reset, request");
+        LogUtil.piiTrace(TAG, "icingSearchEngine.reset, request");
         ResetResultProto resetResultProto = mIcingSearchEngineLocked.reset();
-        mLogUtil.piiTrace(
+        LogUtil.piiTrace(
+                TAG,
                 "icingSearchEngine.reset, response",
                 resetResultProto.getStatus(),
                 resetResultProto);
@@ -1917,9 +2343,9 @@
     @VisibleForTesting
     @GuardedBy("mReadWriteLock")
     SchemaProto getSchemaProtoLocked() throws AppSearchException {
-        mLogUtil.piiTrace("getSchema, request");
+        LogUtil.piiTrace(TAG, "getSchema, request");
         GetSchemaResultProto schemaProto = mIcingSearchEngineLocked.getSchema();
-        mLogUtil.piiTrace("getSchema, response", schemaProto.getStatus(), schemaProto);
+        LogUtil.piiTrace(TAG, "getSchema, response", schemaProto.getStatus(), schemaProto);
         // TODO(b/161935693) check GetSchemaResultProto is success or not. Call reset() if it's not.
         // TODO(b/161935693) only allow GetSchemaResultProto NOT_FOUND on first run
         checkCodeOneOf(schemaProto.getStatus(), StatusProto.Code.OK, StatusProto.Code.NOT_FOUND);
@@ -1951,7 +2377,7 @@
         synchronized (mNextPageTokensLocked) {
             Set<Long> nextPageTokens = mNextPageTokensLocked.get(packageName);
             if (nextPageTokens == null || !nextPageTokens.contains(nextPageToken)) {
-                throw new AppSearchException(AppSearchResult.RESULT_SECURITY_ERROR,
+                throw new AppSearchException(RESULT_SECURITY_ERROR,
                         "Package \"" + packageName + "\" cannot use nextPageToken: "
                                 + nextPageToken);
             }
@@ -1959,48 +2385,60 @@
     }
 
     /**
-     * Adds an {@link AppSearchObserverCallback} to monitor changes within the
-     * databases owned by {@code observedPackage} if they match the given
+     * Adds an {@link ObserverCallback} to monitor changes within the databases owned by
+     * {@code targetPackageName} if they match the given
      * {@link androidx.appsearch.observer.ObserverSpec}.
      *
-     * <p>If the data owned by {@code observedPackage} is not visible to you, the registration call
-     * will succeed but no notifications will be dispatched. Notifications could start flowing later
-     * if {@code observedPackage} changes its schema visibility settings.
+     * <p>If the data owned by {@code targetPackageName} is not visible to you, the registration
+     * call will succeed but no notifications will be dispatched. Notifications could start flowing
+     * later if {@code targetPackageName} changes its schema visibility settings.
      *
-     * <p>If no package matching {@code observedPackage} exists on the system, the registration call
-     * will succeed but no notifications will be dispatched. Notifications could start flowing later
-     * if {@code observedPackage} is installed and starts indexing data.
+     * <p>If no package matching {@code targetPackageName} exists on the system, the registration
+     * call will succeed but no notifications will be dispatched. Notifications could start flowing
+     * later if {@code targetPackageName} is installed and starts indexing data.
      *
      * <p>Note that this method does not take the standard read/write lock that guards I/O, so it
      * will not queue behind I/O. Therefore it is safe to call from any thread including UI or
      * binder threads.
+     *
+     * @param listeningPackageAccess Visibility information about the app that wants to receive
+     *                               notifications.
+     * @param targetPackageName      The package that owns the data the observer wants to be
+     *                               notified for.
+     * @param spec                   Describes the kind of data changes the observer should trigger
+     *                               for.
+     * @param executor               The executor on which to trigger the observer callback to
+     *                               deliver notifications.
+     * @param observer               The callback to trigger on notifications.
      */
-    public void addObserver(
-            @NonNull String observedPackage,
+    public void registerObserverCallback(
+            @NonNull CallerAccess listeningPackageAccess,
+            @NonNull String targetPackageName,
             @NonNull ObserverSpec spec,
             @NonNull Executor executor,
-            @NonNull AppSearchObserverCallback observer) {
+            @NonNull ObserverCallback observer) {
         // This method doesn't consult mSchemaMap or mNamespaceMap, and it will register
         // observers for types that don't exist. This is intentional because we notify for types
         // being created or removed. If we only registered observer for existing types, it would
         // be impossible to ever dispatch a notification of a type being added.
-        mObserverManager.addObserver(observedPackage, spec, executor, observer);
+        mObserverManager.registerObserverCallback(
+                listeningPackageAccess, targetPackageName, spec, executor, observer);
     }
 
     /**
-     * Removes an {@link AppSearchObserverCallback} from watching the databases owned by
-     * {@code observedPackage}.
+     * Removes an {@link ObserverCallback} from watching the databases owned by
+     * {@code targetPackageName}.
      *
      * <p>All observers which compare equal to the given observer via
-     * {@link AppSearchObserverCallback#equals} are removed. This may be 0, 1, or many observers.
+     * {@link ObserverCallback#equals} are removed. This may be 0, 1, or many observers.
      *
      * <p>Note that this method does not take the standard read/write lock that guards I/O, so it
      * will not queue behind I/O. Therefore it is safe to call from any thread including UI or
      * binder threads.
      */
-    public void removeObserver(
-            @NonNull String observedPackage, @NonNull AppSearchObserverCallback observer) {
-        mObserverManager.removeObserver(observedPackage, observer);
+    public void unregisterObserverCallback(
+            @NonNull String targetPackageName, @NonNull ObserverCallback observer) {
+        mObserverManager.unregisterObserverCallback(targetPackageName, observer);
     }
 
     /**
@@ -2141,9 +2579,10 @@
     public void optimize(@Nullable OptimizeStats.Builder builder) throws AppSearchException {
         mReadWriteLock.writeLock().lock();
         try {
-            mLogUtil.piiTrace("optimize, request");
+            LogUtil.piiTrace(TAG, "optimize, request");
             OptimizeResultProto optimizeResultProto = mIcingSearchEngineLocked.optimize();
-            mLogUtil.piiTrace(
+            LogUtil.piiTrace(
+                    TAG,
                     "optimize, response", optimizeResultProto.getStatus(), optimizeResultProto);
             if (builder != null) {
                 builder.setStatusCode(statusProtoToResultCode(optimizeResultProto.getStatus()));
@@ -2156,16 +2595,65 @@
         }
     }
 
+    /**
+     * Sync the current Android logging level to Icing for the entire process. No lock required.
+     */
+    public static void syncLoggingLevelToIcing() {
+        String icingTag = IcingSearchEngine.getLoggingTag();
+        if (icingTag == null) {
+            Log.e(TAG, "Received null logging tag from Icing");
+            return;
+        }
+        if (LogUtil.DEBUG) {
+            if (Log.isLoggable(icingTag, Log.VERBOSE)) {
+                IcingSearchEngine.setLoggingLevel(LogSeverity.Code.VERBOSE, /*verbosity=*/
+                        (short) 1);
+                return;
+            } else if (Log.isLoggable(icingTag, Log.DEBUG)) {
+                IcingSearchEngine.setLoggingLevel(LogSeverity.Code.DBG);
+                return;
+            }
+        }
+        if (Log.isLoggable(icingTag, Log.INFO)) {
+            IcingSearchEngine.setLoggingLevel(LogSeverity.Code.INFO);
+        } else if (Log.isLoggable(icingTag, Log.WARN)) {
+            IcingSearchEngine.setLoggingLevel(LogSeverity.Code.WARNING);
+        } else if (Log.isLoggable(icingTag, Log.ERROR)) {
+            IcingSearchEngine.setLoggingLevel(LogSeverity.Code.ERROR);
+        } else {
+            IcingSearchEngine.setLoggingLevel(LogSeverity.Code.FATAL);
+        }
+    }
+
     @GuardedBy("mReadWriteLock")
     @VisibleForTesting
     GetOptimizeInfoResultProto getOptimizeInfoResultLocked() {
-        mLogUtil.piiTrace("getOptimizeInfo, request");
+        LogUtil.piiTrace(TAG, "getOptimizeInfo, request");
         GetOptimizeInfoResultProto result = mIcingSearchEngineLocked.getOptimizeInfo();
-        mLogUtil.piiTrace("getOptimizeInfo, response", result.getStatus(), result);
+        LogUtil.piiTrace(TAG, "getOptimizeInfo, response", result.getStatus(), result);
         return result;
     }
 
     /**
+     * Returns all prefixed schema types saved in AppSearch.
+     *
+     * <p>This method is inefficient to call repeatedly.
+     */
+    @NonNull
+    public List<String> getAllPrefixedSchemaTypes() {
+        mReadWriteLock.readLock().lock();
+        try {
+            List<String> cachedPrefixedSchemaTypes = new ArrayList<>();
+            for (Map<String, SchemaTypeConfigProto> value : mSchemaMapLocked.values()) {
+                cachedPrefixedSchemaTypes.addAll(value.keySet());
+            }
+            return cachedPrefixedSchemaTypes;
+        } finally {
+            mReadWriteLock.readLock().unlock();
+        }
+    }
+
+    /**
      * Converts an erroneous status code from the Icing status enums to the AppSearchResult enums.
      *
      * <p>Callers should ensure that the status code is not OK or WARNING_DATA_LOSS.
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchMigrationHelper.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchMigrationHelper.java
index 393f8f2..312c2ed 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchMigrationHelper.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchMigrationHelper.java
@@ -165,7 +165,7 @@
      *                        {@link androidx.appsearch.app.SetSchemaResponse.MigrationFailure}
      *                        added in.
      * @return  the {@link SetSchemaResponse} for this
-     *          {@link androidx.appsearch.app.AppSearchSession#setSchema} call.
+     *          {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync} call.
      *
      * @throws IOException        on i/o problem
      * @throws AppSearchException on AppSearch problem
@@ -185,7 +185,12 @@
             while (!codedInputStream.isAtEnd()) {
                 GenericDocument document = readDocumentFromInputStream(codedInputStream);
                 try {
-                    mAppSearchImpl.putDocument(mPackageName, mDatabaseName, document,
+                    // During schema migrations, only schema change notifications are dispatched.
+                    mAppSearchImpl.putDocument(
+                            mPackageName,
+                            mDatabaseName,
+                            document,
+                            /*sendChangeNotifications=*/ false,
                             /*logger=*/ null);
                     savedDocsCount++;
                 } catch (Throwable t) {
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/GlobalSearchSessionImpl.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/GlobalSearchSessionImpl.java
index 6c9e456..ef8ec3b 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/GlobalSearchSessionImpl.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/GlobalSearchSessionImpl.java
@@ -16,24 +16,34 @@
 // @exportToFramework:skipFile()
 package androidx.appsearch.localstorage;
 
+import static androidx.appsearch.app.AppSearchResult.throwableToFailedResult;
+
+import android.annotation.SuppressLint;
 import android.content.Context;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.appsearch.app.AppSearchBatchResult;
 import androidx.appsearch.app.AppSearchResult;
 import androidx.appsearch.app.Features;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetByDocumentIdRequest;
+import androidx.appsearch.app.GetSchemaResponse;
 import androidx.appsearch.app.GlobalSearchSession;
 import androidx.appsearch.app.ReportSystemUsageRequest;
 import androidx.appsearch.app.SearchResults;
 import androidx.appsearch.app.SearchSpec;
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.localstorage.util.FutureUtil;
-import androidx.appsearch.observer.AppSearchObserverCallback;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
+import androidx.appsearch.observer.ObserverCallback;
 import androidx.appsearch.observer.ObserverSpec;
 import androidx.core.util.Preconditions;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.Executor;
 
 /**
@@ -48,12 +58,12 @@
     private final Executor mExecutor;
     private final Features mFeatures;
     private final Context mContext;
+    @Nullable private final AppSearchLogger mLogger;
+
+    private final CallerAccess mSelfCallerAccess;
 
     private boolean mIsClosed = false;
 
-    @Nullable
-    private final AppSearchLogger mLogger;
-
     GlobalSearchSessionImpl(
             @NonNull AppSearchImpl appSearchImpl,
             @NonNull Executor executor,
@@ -65,6 +75,37 @@
         mFeatures = Preconditions.checkNotNull(features);
         mContext = Preconditions.checkNotNull(context);
         mLogger = logger;
+
+        mSelfCallerAccess = new CallerAccess(/*callingPackageName=*/mContext.getPackageName());
+    }
+
+    @NonNull
+    @Override
+    public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
+            @NonNull String packageName,
+            @NonNull String databaseName,
+            @NonNull GetByDocumentIdRequest request) {
+        Preconditions.checkNotNull(packageName);
+        Preconditions.checkNotNull(databaseName);
+        Preconditions.checkNotNull(request);
+        Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
+        return FutureUtil.execute(mExecutor, () -> {
+            AppSearchBatchResult.Builder<String, GenericDocument> resultBuilder =
+                    new AppSearchBatchResult.Builder<>();
+
+            Map<String, List<String>> typePropertyPaths = request.getProjectionsInternal();
+            CallerAccess access = new CallerAccess(mContext.getPackageName());
+            for (String id : request.getIds()) {
+                try {
+                    GenericDocument document = mAppSearchImpl.globalGetDocument(packageName,
+                            databaseName, request.getNamespace(), id, typePropertyPaths, access);
+                    resultBuilder.setSuccess(id, document);
+                } catch (Throwable t) {
+                    resultBuilder.setResult(id, throwableToFailedResult(t));
+                }
+            }
+            return resultBuilder.build();
+        });
     }
 
     @NonNull
@@ -92,7 +133,8 @@
      */
     @NonNull
     @Override
-    public ListenableFuture<Void> reportSystemUsage(@NonNull ReportSystemUsageRequest request) {
+    public ListenableFuture<Void> reportSystemUsageAsync(
+            @NonNull ReportSystemUsageRequest request) {
         Preconditions.checkNotNull(request);
         Preconditions.checkState(!mIsClosed, "GlobalSearchSession has already been closed");
         return FutureUtil.execute(mExecutor, () -> {
@@ -102,6 +144,18 @@
         });
     }
 
+    @SuppressLint("KotlinPropertyAccess")
+    @NonNull
+    @Override
+    public ListenableFuture<GetSchemaResponse> getSchemaAsync(
+            @NonNull String packageName, @NonNull String databaseName) {
+        Preconditions.checkNotNull(packageName);
+        Preconditions.checkNotNull(databaseName);
+        Preconditions.checkState(!mIsClosed, "GlobalSearchSession has already been closed");
+        return FutureUtil.execute(mExecutor,
+                () -> mAppSearchImpl.getSchema(packageName, databaseName, mSelfCallerAccess));
+    }
+
     @NonNull
     @Override
     public Features getFeatures() {
@@ -109,36 +163,41 @@
     }
 
     @Override
-    public void addObserver(
-            @NonNull String observedPackage,
+    public void registerObserverCallback(
+            @NonNull String targetPackageName,
             @NonNull ObserverSpec spec,
             @NonNull Executor executor,
-            @NonNull AppSearchObserverCallback observer) {
-        Preconditions.checkNotNull(observedPackage);
+            @NonNull ObserverCallback observer) {
+        Preconditions.checkNotNull(targetPackageName);
         Preconditions.checkNotNull(spec);
         Preconditions.checkNotNull(executor);
         Preconditions.checkNotNull(observer);
         // LocalStorage does not support observing data from other packages.
-        if (!observedPackage.equals(mContext.getPackageName())) {
+        if (!targetPackageName.equals(mContext.getPackageName())) {
             throw new UnsupportedOperationException(
                     "Local storage implementation does not support receiving change notifications "
                             + "from other packages.");
         }
-        mAppSearchImpl.addObserver(observedPackage, spec, executor, observer);
+        mAppSearchImpl.registerObserverCallback(
+                /*listeningPackageAccess=*/mSelfCallerAccess,
+                /*targetPackageName=*/targetPackageName,
+                spec,
+                executor,
+                observer);
     }
 
     @Override
-    public void removeObserver(
-            @NonNull String observedPackage, @NonNull AppSearchObserverCallback observer) {
-        Preconditions.checkNotNull(observedPackage);
+    public void unregisterObserverCallback(
+            @NonNull String targetPackageName, @NonNull ObserverCallback observer) {
+        Preconditions.checkNotNull(targetPackageName);
         Preconditions.checkNotNull(observer);
         // LocalStorage does not support observing data from other packages.
-        if (!observedPackage.equals(mContext.getPackageName())) {
+        if (!targetPackageName.equals(mContext.getPackageName())) {
             throw new UnsupportedOperationException(
                     "Local storage implementation does not support receiving change notifications "
                             + "from other packages.");
         }
-        mAppSearchImpl.removeObserver(observedPackage, observer);
+        mAppSearchImpl.unregisterObserverCallback(targetPackageName, observer);
     }
 
     @Override
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LimitConfig.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LimitConfig.java
index dded201..b53e12a 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LimitConfig.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LimitConfig.java
@@ -53,4 +53,14 @@
      * </ol>
      */
     int getMaxDocumentCount();
+
+    /**
+     * The maximum number of suggestion results a single app is allowed to search.
+     *
+     * <p>Enforced at searching suggestion time.
+     *
+     * <p>The purpose of this limit is to protect Android framework system resource like memory
+     * from being overwhelmed by a single app.
+     */
+    int getMaxSuggestionCount();
 }
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java
index 3ffb93d..5a0dceb 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java
@@ -270,7 +270,7 @@
      *                {@link AppSearchSession}
      */
     @NonNull
-    public static ListenableFuture<AppSearchSession> createSearchSession(
+    public static ListenableFuture<AppSearchSession> createSearchSessionAsync(
             @NonNull SearchContext context) {
         Preconditions.checkNotNull(context);
         return FutureUtil.execute(context.mExecutor, () -> {
@@ -281,6 +281,18 @@
     }
 
     /**
+     * @deprecated use {@link #createSearchSessionAsync}
+     * @param context The {@link SearchContext} contains all information to create a new
+     *                {@link AppSearchSession}
+     */
+    @NonNull
+    @Deprecated
+    public static ListenableFuture<AppSearchSession> createSearchSession(
+            @NonNull SearchContext context) {
+        return createSearchSessionAsync(context);
+    }
+
+    /**
      * Opens a new {@link GlobalSearchSession} on this storage.
      *
      * <p>This process requires a native search library. If it's not created, the initialization
@@ -290,7 +302,7 @@
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     @NonNull
-    public static ListenableFuture<GlobalSearchSession> createGlobalSearchSession(
+    public static ListenableFuture<GlobalSearchSession> createGlobalSearchSessionAsync(
             @NonNull GlobalSearchContext context) {
         Preconditions.checkNotNull(context);
         return FutureUtil.execute(context.mExecutor, () -> {
@@ -301,6 +313,18 @@
     }
 
     /**
+     * @deprecated use {@link #createGlobalSearchSessionAsync}
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @NonNull
+    @Deprecated
+    public static ListenableFuture<GlobalSearchSession> createGlobalSearchSession(
+            @NonNull GlobalSearchContext context) {
+        return createGlobalSearchSessionAsync(context);
+    }
+
+    /**
      * Returns the singleton instance of {@link LocalStorage}.
      *
      * <p>If the system is not initialized, it will be initialized using the provided
@@ -338,11 +362,15 @@
             initStatsBuilder = new InitializeStats.Builder();
         }
 
+        // Syncing the current logging level to Icing before creating the AppSearch object, so that
+        // the correct logging level will cover the period of Icing initialization.
+        AppSearchImpl.syncLoggingLevelToIcing();
         mAppSearchImpl = AppSearchImpl.create(
                 icingDir,
                 new UnlimitedLimitConfig(),
                 initStatsBuilder,
-                new JetpackOptimizeStrategy());
+                new JetpackOptimizeStrategy(),
+                /*visibilityChecker=*/null);
 
         if (logger != null) {
             initStatsBuilder.setTotalLatencyMillis(
@@ -382,7 +410,7 @@
                 mAppSearchImpl,
                 context.mExecutor,
                 new AlwaysSupportedFeatures(),
-                context.mContext.getPackageName(),
+                context.mContext,
                 context.mDatabaseName,
                 context.mLogger);
     }
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/ObserverManager.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/ObserverManager.java
index 0d49147..c25be25 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/ObserverManager.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/ObserverManager.java
@@ -22,22 +22,29 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
-import androidx.appsearch.observer.AppSearchObserverCallback;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityChecker;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityStore;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityUtil;
 import androidx.appsearch.observer.DocumentChangeInfo;
+import androidx.appsearch.observer.ObserverCallback;
 import androidx.appsearch.observer.ObserverSpec;
+import androidx.appsearch.observer.SchemaChangeInfo;
 import androidx.collection.ArrayMap;
 import androidx.collection.ArraySet;
 import androidx.core.util.ObjectsCompat;
 import androidx.core.util.Preconditions;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Executor;
 
 /**
- * Manages {@link AppSearchObserverCallback} instances and queues notifications to them for later
+ * Manages {@link ObserverCallback} instances and queues notifications to them for later
  * dispatch.
  *
  * <p>This class is thread-safe.
@@ -84,72 +91,94 @@
     }
 
     private static final class ObserverInfo {
+        /** The package which registered the observer. */
+        final CallerAccess mListeningPackageAccess;
         final ObserverSpec mObserverSpec;
         final Executor mExecutor;
-        final AppSearchObserverCallback mObserver;
-        volatile Set<DocumentChangeGroupKey> mDocumentChanges = new ArraySet<>();
+        final ObserverCallback mObserverCallback;
+        // Values is a set of document IDs
+        volatile Map<DocumentChangeGroupKey, Set<String>> mDocumentChanges = new ArrayMap<>();
+        // Keys are database prefixes, values are a set of schema names
+        volatile Map<String, Set<String>> mSchemaChanges = new ArrayMap<>();
 
         ObserverInfo(
+                @NonNull CallerAccess listeningPackageAccess,
                 @NonNull ObserverSpec observerSpec,
                 @NonNull Executor executor,
-                @NonNull AppSearchObserverCallback observer) {
+                @NonNull ObserverCallback observerCallback) {
+            mListeningPackageAccess = Preconditions.checkNotNull(listeningPackageAccess);
             mObserverSpec = Preconditions.checkNotNull(observerSpec);
             mExecutor = Preconditions.checkNotNull(executor);
-            mObserver = Preconditions.checkNotNull(observer);
+            mObserverCallback = Preconditions.checkNotNull(observerCallback);
         }
     }
 
     private final Object mLock = new Object();
 
-    /** Maps observed package to observer infos watching something in that package. */
+    /** Maps target packages to ObserverInfos watching something in that package. */
     @GuardedBy("mLock")
     private final Map<String, List<ObserverInfo>> mObserversLocked = new ArrayMap<>();
 
     private volatile boolean mHasNotifications = false;
 
     /**
-     * Adds an {@link AppSearchObserverCallback} to monitor changes within the
-     * databases owned by {@code observedPackage} if they match the given
+     * Adds an {@link ObserverCallback} to monitor changes within the databases owned by
+     * {@code targetPackageName} if they match the given
      * {@link androidx.appsearch.observer.ObserverSpec}.
      *
-     * <p>If the data owned by {@code observedPackage} is not visible to you, the registration call
-     * will succeed but no notifications will be dispatched. Notifications could start flowing later
-     * if {@code observedPackage} changes its schema visibility settings.
+     * <p>If the data owned by {@code targetPackageName} is not visible to you, the registration
+     * call will succeed but no notifications will be dispatched. Notifications could start flowing
+     * later if {@code targetPackageName} changes its schema visibility settings.
      *
-     * <p>If no package matching {@code observedPackage} exists on the system, the registration call
-     * will succeed but no notifications will be dispatched. Notifications could start flowing later
-     * if {@code observedPackage} is installed and starts indexing data.
+     * <p>If no package matching {@code targetPackageName} exists on the system, the registration
+     * call will succeed but no notifications will be dispatched. Notifications could start flowing
+     * later if {@code targetPackageName} is installed and starts indexing data.
+     *
+     * <p>Note that this method does not take the standard read/write lock that guards I/O, so it
+     * will not queue behind I/O. Therefore it is safe to call from any thread including UI or
+     * binder threads.
+     *
+     * @param listeningPackageAccess Visibility information about the app that wants to receive
+     *                               notifications.
+     * @param targetPackageName      The package that owns the data the observerCallback wants to be
+     *                               notified for.
+     * @param spec                   Describes the kind of data changes the observerCallback should
+     *                               trigger for.
+     * @param executor               The executor on which to trigger the observerCallback callback
+     *                               to deliver notifications.
+     * @param observerCallback       The callback to trigger on notifications.
      */
-    public void addObserver(
-            @NonNull String observedPackage,
+    public void registerObserverCallback(
+            @NonNull CallerAccess listeningPackageAccess,
+            @NonNull String targetPackageName,
             @NonNull ObserverSpec spec,
             @NonNull Executor executor,
-            @NonNull AppSearchObserverCallback observer) {
+            @NonNull ObserverCallback observerCallback) {
         synchronized (mLock) {
-            List<ObserverInfo> infos = mObserversLocked.get(observedPackage);
+            List<ObserverInfo> infos = mObserversLocked.get(targetPackageName);
             if (infos == null) {
                 infos = new ArrayList<>();
-                mObserversLocked.put(observedPackage, infos);
+                mObserversLocked.put(targetPackageName, infos);
             }
-            infos.add(new ObserverInfo(spec, executor, observer));
+            infos.add(new ObserverInfo(listeningPackageAccess, spec, executor, observerCallback));
         }
     }
 
     /**
-     * Removes all observers that match via {@link AppSearchObserverCallback#equals} to the given
-     * observer from watching the observedPackage.
+     * Removes all observers that match via {@link ObserverCallback#equals} to the given observer
+     * from watching the targetPackageName.
      *
      * <p>Pending notifications queued for this observer, if any, are discarded.
      */
-    public void removeObserver(
-            @NonNull String observedPackage, @NonNull AppSearchObserverCallback observer) {
+    public void unregisterObserverCallback(
+            @NonNull String targetPackageName, @NonNull ObserverCallback observer) {
         synchronized (mLock) {
-            List<ObserverInfo> infos = mObserversLocked.get(observedPackage);
+            List<ObserverInfo> infos = mObserversLocked.get(targetPackageName);
             if (infos == null) {
                 return;
             }
             for (int i = 0; i < infos.size(); i++) {
-                if (infos.get(i).mObserver.equals(observer)) {
+                if (infos.get(i).mObserverCallback.equals(observer)) {
                     infos.remove(i);
                     i--;
                 }
@@ -162,28 +191,105 @@
      *
      * <p>The notification will be queued in memory for later dispatch. You must call
      * {@link #dispatchAndClearPendingNotifications} to dispatch all such pending notifications.
+     *
+     * @param visibilityStore   Store for visibility information. If not provided, only access to
+     *                          own data will be allowed.
+     * @param visibilityChecker Checker for visibility access. If not provided, only access to own
+     *                          data will be allowed.
      */
     public void onDocumentChange(
             @NonNull String packageName,
             @NonNull String databaseName,
             @NonNull String namespace,
-            @NonNull String schemaType) {
+            @NonNull String schemaType,
+            @NonNull String documentId,
+            @Nullable VisibilityStore visibilityStore,
+            @Nullable VisibilityChecker visibilityChecker) {
         synchronized (mLock) {
             List<ObserverInfo> allObserverInfosForPackage = mObserversLocked.get(packageName);
             if (allObserverInfosForPackage == null || allObserverInfosForPackage.isEmpty()) {
                 return; // No observers for this type
             }
             // Enqueue changes for later dispatch once the call returns
+            String prefixedSchema =
+                    PrefixUtil.createPrefix(packageName, databaseName) + schemaType;
             DocumentChangeGroupKey key = null;
             for (int i = 0; i < allObserverInfosForPackage.size(); i++) {
                 ObserverInfo observerInfo = allObserverInfosForPackage.get(i);
-                if (matchesSpec(schemaType, observerInfo.mObserverSpec)) {
-                    if (key == null) {
-                        key = new DocumentChangeGroupKey(
-                                packageName, databaseName, namespace, schemaType);
-                    }
-                    observerInfo.mDocumentChanges.add(key);
+                if (!matchesSpec(schemaType, observerInfo.mObserverSpec)) {
+                    continue;  // Observer doesn't want this notification
                 }
+                if (!VisibilityUtil.isSchemaSearchableByCaller(
+                        /*callerAccess=*/observerInfo.mListeningPackageAccess,
+                        /*targetPackageName=*/packageName,
+                        /*prefixedSchema=*/prefixedSchema,
+                        visibilityStore,
+                        visibilityChecker)) {
+                    continue;  // Observer can't have this notification.
+                }
+                if (key == null) {
+                    key = new DocumentChangeGroupKey(
+                            packageName, databaseName, namespace, schemaType);
+                }
+                Set<String> changedDocumentIds = observerInfo.mDocumentChanges.get(key);
+                if (changedDocumentIds == null) {
+                    changedDocumentIds = new ArraySet<>();
+                    observerInfo.mDocumentChanges.put(key, changedDocumentIds);
+                }
+                changedDocumentIds.add(documentId);
+            }
+            mHasNotifications = true;
+        }
+    }
+
+    /**
+     * Enqueues a change to a schema type for a single observer.
+     *
+     * <p>The notification will be queued in memory for later dispatch. You must call
+     * {@link #dispatchAndClearPendingNotifications} to dispatch all such pending notifications.
+     *
+     * <p>Note that unlike {@link #onDocumentChange}, the changes reported here are not dropped
+     * for observers that don't have visibility. This is because the observer might have had
+     * visibility before the schema change, and a final deletion needs to be sent to it. Caller
+     * is responsible for checking visibility of these notifications.
+     *
+     * @param listeningPackageName Name of package that subscribed to notifications and has been
+     *                             validated by the caller to have the right access to receive
+     *                             this notification.
+     * @param targetPackageName Name of package that owns the changed schema types.
+     * @param databaseName Database in which the changed schema types reside.
+     * @param schemaName Unprefixed name of the changed schema type.
+     */
+    public void onSchemaChange(
+            @NonNull String listeningPackageName,
+            @NonNull String targetPackageName,
+            @NonNull String databaseName,
+            @NonNull String schemaName) {
+        synchronized (mLock) {
+            List<ObserverInfo> allObserverInfosForPackage = mObserversLocked.get(targetPackageName);
+            if (allObserverInfosForPackage == null || allObserverInfosForPackage.isEmpty()) {
+                return; // No observers for this type
+            }
+            // Enqueue changes for later dispatch once the call returns
+            String prefix = null;
+            for (int i = 0; i < allObserverInfosForPackage.size(); i++) {
+                ObserverInfo observerInfo = allObserverInfosForPackage.get(i);
+                if (!observerInfo.mListeningPackageAccess.getCallingPackageName()
+                        .equals(listeningPackageName)) {
+                    continue;  // Not the observer we've been requested to update right now.
+                }
+                if (!matchesSpec(schemaName, observerInfo.mObserverSpec)) {
+                    continue;  // Observer doesn't want this notification
+                }
+                if (prefix == null) {
+                    prefix = PrefixUtil.createPrefix(targetPackageName, databaseName);
+                }
+                Set<String> changedSchemaNames = observerInfo.mSchemaChanges.get(prefix);
+                if (changedSchemaNames == null) {
+                    changedSchemaNames = new ArraySet<>();
+                    observerInfo.mSchemaChanges.put(prefix, changedSchemaNames);
+                }
+                changedSchemaNames.add(schemaName);
             }
             mHasNotifications = true;
         }
@@ -216,6 +322,44 @@
         }
     }
 
+    /**
+     * Returns package names of listening packages registered for changes on the given
+     * {@code packageName}, {@code databaseName} and unprefixed {@code schemaType}, only if they
+     * have access to that type according to the provided {@code visibilityChecker}.
+     */
+    @NonNull
+    public Set<String> getObserversForSchemaType(
+            @NonNull String packageName,
+            @NonNull String databaseName,
+            @NonNull String schemaType,
+            @Nullable VisibilityStore visibilityStore,
+            @Nullable VisibilityChecker visibilityChecker) {
+        synchronized (mLock) {
+            List<ObserverInfo> allObserverInfosForPackage = mObserversLocked.get(packageName);
+            if (allObserverInfosForPackage == null) {
+                return Collections.emptySet();
+            }
+            Set<String> result = new ArraySet<>();
+            String prefixedSchema = PrefixUtil.createPrefix(packageName, databaseName) + schemaType;
+            for (int i = 0; i < allObserverInfosForPackage.size(); i++) {
+                ObserverInfo observerInfo = allObserverInfosForPackage.get(i);
+                if (!matchesSpec(schemaType, observerInfo.mObserverSpec)) {
+                    continue;  // Observer doesn't want this notification
+                }
+                if (!VisibilityUtil.isSchemaSearchableByCaller(
+                        /*callerAccess=*/observerInfo.mListeningPackageAccess,
+                        /*targetPackageName=*/packageName,
+                        /*prefixedSchema=*/prefixedSchema,
+                        visibilityStore,
+                        visibilityChecker)) {
+                    continue;  // Observer can't have this notification.
+                }
+                result.add(observerInfo.mListeningPackageAccess.getCallingPackageName());
+            }
+            return result;
+        }
+    }
+
     /** Returns whether any notifications have been queued for dispatch. */
     public boolean hasNotifications() {
         return mHasNotifications;
@@ -243,28 +387,52 @@
     @GuardedBy("mLock")
     private void dispatchAndClearPendingNotificationsLocked(@NonNull ObserverInfo observerInfo) {
         // Get and clear the pending changes
-        Set<DocumentChangeGroupKey> documentChanges = observerInfo.mDocumentChanges;
-        if (documentChanges.isEmpty()) {
+        Map<String, Set<String>> schemaChanges = observerInfo.mSchemaChanges;
+        Map<DocumentChangeGroupKey, Set<String>> documentChanges = observerInfo.mDocumentChanges;
+        if (schemaChanges.isEmpty() && documentChanges.isEmpty()) {
             return;
         }
-        observerInfo.mDocumentChanges = new ArraySet<>();
+        if (!schemaChanges.isEmpty()) {
+            observerInfo.mSchemaChanges = new ArrayMap<>();
+        }
+        if (!documentChanges.isEmpty()) {
+            observerInfo.mDocumentChanges = new ArrayMap<>();
+        }
 
         // Dispatch the pending changes
         observerInfo.mExecutor.execute(() -> {
-            for (DocumentChangeGroupKey entry : documentChanges) {
-                // TODO(b/193494000): Buffer document URIs as the values of mDocumentChanges
-                // and include them in the final ChangeInfo
-                DocumentChangeInfo documentChangeInfo = new DocumentChangeInfo(
-                        entry.mPackageName,
-                        entry.mDatabaseName,
-                        entry.mNamespace,
-                        entry.mSchemaName);
+            // Schema changes
+            if (!schemaChanges.isEmpty()) {
+                for (Map.Entry<String, Set<String>> entry : schemaChanges.entrySet()) {
+                    SchemaChangeInfo schemaChangeInfo = new SchemaChangeInfo(
+                            /*packageName=*/PrefixUtil.getPackageName(entry.getKey()),
+                            /*databaseName=*/PrefixUtil.getDatabaseName(entry.getKey()),
+                            /*changedSchemaNames=*/entry.getValue());
 
-                try {
-                    // TODO(b/193494000): Add code to dispatch SchemaChangeInfo too.
-                    observerInfo.mObserver.onDocumentChanged(documentChangeInfo);
-                } catch (Throwable t) {
-                    Log.w(TAG, "AppSearchObserverCallback threw exception during dispatch", t);
+                    try {
+                        observerInfo.mObserverCallback.onSchemaChanged(schemaChangeInfo);
+                    } catch (Throwable t) {
+                        Log.w(TAG, "ObserverCallback threw exception during dispatch", t);
+                    }
+                }
+            }
+
+            // Document changes
+            if (!documentChanges.isEmpty()) {
+                for (Map.Entry<DocumentChangeGroupKey, Set<String>> entry
+                        : documentChanges.entrySet()) {
+                    DocumentChangeInfo documentChangeInfo = new DocumentChangeInfo(
+                            entry.getKey().mPackageName,
+                            entry.getKey().mDatabaseName,
+                            entry.getKey().mNamespace,
+                            entry.getKey().mSchemaName,
+                            entry.getValue());
+
+                    try {
+                        observerInfo.mObserverCallback.onDocumentChanged(documentChangeInfo);
+                    } catch (Throwable t) {
+                        Log.w(TAG, "ObserverCallback threw exception during dispatch", t);
+                    }
                 }
             }
         });
@@ -280,12 +448,6 @@
     private static boolean matchesSpec(
             @NonNull String schemaType, @NonNull ObserverSpec observerSpec) {
         Set<String> schemaFilters = observerSpec.getFilterSchemas();
-        if (!schemaFilters.isEmpty() && !schemaFilters.contains(schemaType)) {
-            return false;
-        }
-        // TODO(b/193494000): We also need to check VisibilityStore to see if the observer is
-        //  allowed to access this type before granting access. Note if fixing this TODO makes the
-        //  method non-static we need to handle locking.
-        return true;
+        return schemaFilters.isEmpty() || schemaFilters.contains(schemaType);
     }
 }
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchResultsImpl.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchResultsImpl.java
index 761ebfd..8da40bb 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchResultsImpl.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchResultsImpl.java
@@ -16,18 +16,15 @@
 // @exportToFramework:skipFile()
 package androidx.appsearch.localstorage;
 
-import android.os.Process;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.appsearch.app.AppSearchResult;
 import androidx.appsearch.app.SearchResult;
 import androidx.appsearch.app.SearchResultPage;
 import androidx.appsearch.app.SearchResults;
 import androidx.appsearch.app.SearchSpec;
-import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.localstorage.stats.SearchStats;
 import androidx.appsearch.localstorage.util.FutureUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
 import androidx.core.util.Preconditions;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -40,11 +37,13 @@
 
     private final Executor mExecutor;
 
-    // The package name to search over. If null, this will search over all package names.
-    @Nullable
+    /* The package name of the current app which is using the local backend. */
     private final String mPackageName;
 
-    // The database name to search over. If null, this will search over all database names.
+    /** A CallerAccess object describing local-only access of the current app. */
+    private final CallerAccess mSelfCallerAccess;
+
+    /* The database name to search over. If null, this will search over all database names. */
     @Nullable
     private final String mDatabaseName;
 
@@ -69,14 +68,15 @@
     SearchResultsImpl(
             @NonNull AppSearchImpl appSearchImpl,
             @NonNull Executor executor,
-            @Nullable String packageName,
+            @NonNull String packageName,
             @Nullable String databaseName,
             @NonNull String queryExpression,
             @NonNull SearchSpec searchSpec,
             @Nullable AppSearchLogger logger) {
         mAppSearchImpl = Preconditions.checkNotNull(appSearchImpl);
         mExecutor = Preconditions.checkNotNull(executor);
-        mPackageName = packageName;
+        mPackageName = Preconditions.checkNotNull(packageName);
+        mSelfCallerAccess = new CallerAccess(/*callingPackageName=*/mPackageName);
         mDatabaseName = databaseName;
         mQueryExpression = Preconditions.checkNotNull(queryExpression);
         mSearchSpec = Preconditions.checkNotNull(searchSpec);
@@ -85,27 +85,17 @@
 
     @Override
     @NonNull
-    public ListenableFuture<List<SearchResult>> getNextPage() {
+    public ListenableFuture<List<SearchResult>> getNextPageAsync() {
         Preconditions.checkState(!mIsClosed, "SearchResults has already been closed");
         return FutureUtil.execute(mExecutor, () -> {
             SearchResultPage searchResultPage;
             if (mIsFirstLoad) {
                 mIsFirstLoad = false;
-                if (mPackageName == null) {
-                    throw new AppSearchException(
-                            AppSearchResult.RESULT_INVALID_ARGUMENT,
-                            "Invalid null package name for query");
-                } else if (mDatabaseName == null) {
+                if (mDatabaseName == null) {
                     mVisibilityScope = SearchStats.VISIBILITY_SCOPE_GLOBAL;
                     // Global queries aren't restricted to a single database
                     searchResultPage = mAppSearchImpl.globalQuery(
-                            mQueryExpression,
-                            mSearchSpec,
-                            mPackageName,
-                            /*visibilityStore=*/ null,
-                            Process.myUid(),
-                            /*callerHasSystemAccess=*/ false,
-                            mLogger);
+                            mQueryExpression, mSearchSpec, mSelfCallerAccess, mLogger);
                 } else {
                     mVisibilityScope = SearchStats.VISIBILITY_SCOPE_LOCAL;
                     // Normal local query, pass in specified database.
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchSessionImpl.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchSessionImpl.java
index a695642..7ce6ae1 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchSessionImpl.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchSessionImpl.java
@@ -16,8 +16,11 @@
 // @exportToFramework:skipFile()
 package androidx.appsearch.localstorage;
 
+import static androidx.appsearch.app.AppSearchResult.RESULT_INTERNAL_ERROR;
+import static androidx.appsearch.app.AppSearchResult.RESULT_INVALID_SCHEMA;
 import static androidx.appsearch.app.AppSearchResult.throwableToFailedResult;
 
+import android.content.Context;
 import android.os.SystemClock;
 import android.util.Log;
 
@@ -30,24 +33,27 @@
 import androidx.appsearch.app.GenericDocument;
 import androidx.appsearch.app.GetByDocumentIdRequest;
 import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.InternalSetSchemaResponse;
 import androidx.appsearch.app.Migrator;
-import androidx.appsearch.app.PackageIdentifier;
 import androidx.appsearch.app.PutDocumentsRequest;
 import androidx.appsearch.app.RemoveByDocumentIdRequest;
 import androidx.appsearch.app.ReportUsageRequest;
 import androidx.appsearch.app.SearchResults;
 import androidx.appsearch.app.SearchSpec;
+import androidx.appsearch.app.SearchSuggestionResult;
+import androidx.appsearch.app.SearchSuggestionSpec;
 import androidx.appsearch.app.SetSchemaRequest;
 import androidx.appsearch.app.SetSchemaResponse;
 import androidx.appsearch.app.StorageInfo;
+import androidx.appsearch.app.VisibilityDocument;
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.localstorage.stats.OptimizeStats;
 import androidx.appsearch.localstorage.stats.RemoveStats;
 import androidx.appsearch.localstorage.stats.SchemaMigrationStats;
 import androidx.appsearch.localstorage.stats.SetSchemaStats;
 import androidx.appsearch.localstorage.util.FutureUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
 import androidx.appsearch.util.SchemaMigrationUtil;
-import androidx.collection.ArrayMap;
 import androidx.collection.ArraySet;
 import androidx.core.util.Preconditions;
 
@@ -70,49 +76,50 @@
  */
 class SearchSessionImpl implements AppSearchSession {
     private static final String TAG = "AppSearchSessionImpl";
+
     private final AppSearchImpl mAppSearchImpl;
     private final Executor mExecutor;
     private final Features mFeatures;
-    private final String mPackageName;
+    private final Context mContext;
     private final String mDatabaseName;
+    @Nullable private final AppSearchLogger mLogger;
+
+    private final String mPackageName;
+    private final CallerAccess mSelfCallerAccess;
+
     private volatile boolean mIsMutated = false;
     private volatile boolean mIsClosed = false;
-    @Nullable private final AppSearchLogger mLogger;
 
     SearchSessionImpl(
             @NonNull AppSearchImpl appSearchImpl,
             @NonNull Executor executor,
             @NonNull Features features,
-            @NonNull String packageName,
+            @NonNull Context context,
             @NonNull String databaseName,
             @Nullable AppSearchLogger logger) {
         mAppSearchImpl = Preconditions.checkNotNull(appSearchImpl);
         mExecutor = Preconditions.checkNotNull(executor);
         mFeatures = Preconditions.checkNotNull(features);
-        mPackageName = packageName;
+        mContext = Preconditions.checkNotNull(context);
         mDatabaseName = Preconditions.checkNotNull(databaseName);
         mLogger = logger;
+
+        mPackageName = mContext.getPackageName();
+        mSelfCallerAccess = new CallerAccess(/*callingPackageName=*/mPackageName);
     }
 
     @Override
     @NonNull
-    public ListenableFuture<SetSchemaResponse> setSchema(
+    public ListenableFuture<SetSchemaResponse> setSchemaAsync(
             @NonNull SetSchemaRequest request) {
         Preconditions.checkNotNull(request);
         Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
 
         ListenableFuture<SetSchemaResponse> future = execute(() -> {
             long startMillis = SystemClock.elapsedRealtime();
-
-            // Convert the inner set into a List since Binder can't handle Set.
-            Map<String, Set<PackageIdentifier>> schemasVisibleToPackages =
-                    request.getSchemasVisibleToPackagesInternal();
-            Map<String, List<PackageIdentifier>> copySchemasVisibleToPackages = new ArrayMap<>();
-            for (Map.Entry<String, Set<PackageIdentifier>> entry :
-                    schemasVisibleToPackages.entrySet()) {
-                copySchemasVisibleToPackages.put(entry.getKey(),
-                        new ArrayList<>(entry.getValue()));
-            }
+            // Extract a Map<schema, VisibilityDocument> from the request.
+            List<VisibilityDocument> visibilityDocuments = VisibilityDocument
+                    .toVisibilityDocuments(request);
 
             SetSchemaStats.Builder setSchemaStatsBuilder = null;
             if (mLogger != null) {
@@ -123,20 +130,25 @@
             // No need to trigger migration if user never set migrator.
             if (migrators.size() == 0) {
                 SetSchemaResponse setSchemaResponse =
-                        setSchemaNoMigrations(request, copySchemasVisibleToPackages,
-                                setSchemaStatsBuilder);
+                        setSchemaNoMigrations(request, visibilityDocuments, setSchemaStatsBuilder);
+
+                // Schedule a task to dispatch change notifications. See requirements for where the
+                // method is called documented in the method description.
+                dispatchChangeNotifications();
+
                 if (setSchemaStatsBuilder != null) {
                     setSchemaStatsBuilder.setTotalLatencyMillis(
                             (int) (SystemClock.elapsedRealtime() - startMillis));
                     mLogger.logStats(setSchemaStatsBuilder.build());
                 }
+
                 return setSchemaResponse;
             }
 
             // Migration process
             // 1. Validate and retrieve all active migrators.
-            GetSchemaResponse getSchemaResponse =
-                    mAppSearchImpl.getSchema(mPackageName, mDatabaseName);
+            GetSchemaResponse getSchemaResponse = mAppSearchImpl.getSchema(
+                    mPackageName, mDatabaseName, mSelfCallerAccess);
             int currentVersion = getSchemaResponse.getVersion();
             int finalVersion = request.getVersion();
             Map<String, Migrator> activeMigrators = SchemaMigrationUtil.getActiveMigrators(
@@ -144,8 +156,7 @@
             // No need to trigger migration if no migrator is active.
             if (activeMigrators.size() == 0) {
                 SetSchemaResponse setSchemaResponse =
-                        setSchemaNoMigrations(request, copySchemasVisibleToPackages,
-                                setSchemaStatsBuilder);
+                        setSchemaNoMigrations(request, visibilityDocuments, setSchemaStatsBuilder);
                 if (setSchemaStatsBuilder != null) {
                     setSchemaStatsBuilder.setTotalLatencyMillis(
                             (int) (SystemClock.elapsedRealtime() - startMillis));
@@ -157,13 +168,11 @@
             // 2. SetSchema with forceOverride=false, to retrieve the list of incompatible/deleted
             // types.
             long firstSetSchemaLatencyStartMillis = SystemClock.elapsedRealtime();
-            SetSchemaResponse setSchemaResponse = mAppSearchImpl.setSchema(
+            InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                     mPackageName,
                     mDatabaseName,
                     new ArrayList<>(request.getSchemas()),
-                    /*visibilityStore=*/ null,
-                    new ArrayList<>(request.getSchemasNotDisplayedBySystem()),
-                    copySchemasVisibleToPackages,
+                    visibilityDocuments,
                     /*forceOverride=*/false,
                     request.getVersion(),
                     setSchemaStatsBuilder);
@@ -172,10 +181,8 @@
             // If some aren't we must throw an error, rather than proceeding and deleting those
             // types.
             long queryAndTransformLatencyStartMillis = SystemClock.elapsedRealtime();
-            if (!request.isForceOverride()) {
-                SchemaMigrationUtil.checkDeletedAndIncompatibleAfterMigration(setSchemaResponse,
-                        activeMigrators.keySet());
-            }
+            SchemaMigrationUtil.checkDeletedAndIncompatibleAfterMigration(
+                    internalSetSchemaResponse, activeMigrators.keySet());
 
             SchemaMigrationStats.Builder schemaMigrationStatsBuilder = null;
             if (setSchemaStatsBuilder != null) {
@@ -191,20 +198,26 @@
                 // 5. SetSchema a second time with forceOverride=true if the first attempted failed
                 // due to backward incompatible changes.
                 long secondSetSchemaLatencyStartMillis = SystemClock.elapsedRealtime();
-                if (!setSchemaResponse.getIncompatibleTypes().isEmpty()
-                        || !setSchemaResponse.getDeletedTypes().isEmpty()) {
-                    setSchemaResponse = mAppSearchImpl.setSchema(
+                if (!internalSetSchemaResponse.isSuccess()) {
+                    internalSetSchemaResponse = mAppSearchImpl.setSchema(
                             mPackageName,
                             mDatabaseName,
                             new ArrayList<>(request.getSchemas()),
-                            /*visibilityStore=*/ null,
-                            new ArrayList<>(request.getSchemasNotDisplayedBySystem()),
-                            copySchemasVisibleToPackages,
+                            visibilityDocuments,
                             /*forceOverride=*/ true,
                             request.getVersion(),
                             setSchemaStatsBuilder);
+                    if (!internalSetSchemaResponse.isSuccess()) {
+                        // Impossible case, we just set forceOverride to be true, we should never
+                        // fail in incompatible changes. And all other cases should failed during
+                        // the first call.
+                        throw new AppSearchException(RESULT_INTERNAL_ERROR,
+                                internalSetSchemaResponse.getErrorMessage());
+                    }
                 }
-                SetSchemaResponse.Builder responseBuilder = setSchemaResponse.toBuilder()
+                SetSchemaResponse.Builder responseBuilder = internalSetSchemaResponse
+                        .getSetSchemaResponse()
+                        .toBuilder()
                         .addMigratedTypes(activeMigrators.keySet());
                 mIsMutated = true;
 
@@ -214,6 +227,10 @@
                         migrationHelper.readAndPutDocuments(responseBuilder,
                                 schemaMigrationStatsBuilder);
 
+                // Schedule a task to dispatch change notifications. See requirements for where the
+                // method is called documented in the method description.
+                dispatchChangeNotifications();
+
                 if (schemaMigrationStatsBuilder != null) {
                     long endMillis = SystemClock.elapsedRealtime();
                     schemaMigrationStatsBuilder
@@ -251,14 +268,15 @@
 
     @Override
     @NonNull
-    public ListenableFuture<GetSchemaResponse> getSchema() {
+    public ListenableFuture<GetSchemaResponse> getSchemaAsync() {
         Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
-        return execute(() -> mAppSearchImpl.getSchema(mPackageName, mDatabaseName));
+        return execute(
+                () -> mAppSearchImpl.getSchema(mPackageName, mDatabaseName, mSelfCallerAccess));
     }
 
     @NonNull
     @Override
-    public ListenableFuture<Set<String>> getNamespaces() {
+    public ListenableFuture<Set<String>> getNamespacesAsync() {
         Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
         return execute(() -> {
             List<String> namespaces = mAppSearchImpl.getNamespaces(mPackageName, mDatabaseName);
@@ -268,7 +286,7 @@
 
     @Override
     @NonNull
-    public ListenableFuture<AppSearchBatchResult<String, Void>> put(
+    public ListenableFuture<AppSearchBatchResult<String, Void>> putAsync(
             @NonNull PutDocumentsRequest request) {
         Preconditions.checkNotNull(request);
         Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
@@ -278,7 +296,12 @@
             for (int i = 0; i < request.getGenericDocuments().size(); i++) {
                 GenericDocument document = request.getGenericDocuments().get(i);
                 try {
-                    mAppSearchImpl.putDocument(mPackageName, mDatabaseName, document, mLogger);
+                    mAppSearchImpl.putDocument(
+                            mPackageName,
+                            mDatabaseName,
+                            document,
+                            /*sendChangeNotifications=*/ true,
+                            mLogger);
                     resultBuilder.setSuccess(document.getId(), /*value=*/ null);
                 } catch (Throwable t) {
                     resultBuilder.setResult(document.getId(), throwableToFailedResult(t));
@@ -303,7 +326,7 @@
 
     @Override
     @NonNull
-    public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentId(
+    public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
             @NonNull GetByDocumentIdRequest request) {
         Preconditions.checkNotNull(request);
         Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
@@ -344,9 +367,25 @@
                 mLogger);
     }
 
+    @NonNull
+    @Override
+    public ListenableFuture<List<SearchSuggestionResult>> searchSuggestionAsync(
+            @NonNull String suggestionQueryExpression,
+            @NonNull SearchSuggestionSpec searchSuggestionSpec) {
+        Preconditions.checkNotNull(suggestionQueryExpression);
+        Preconditions.checkStringNotEmpty(suggestionQueryExpression);
+        Preconditions.checkNotNull(searchSuggestionSpec);
+        Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
+        return execute(() -> mAppSearchImpl.searchSuggestion(
+                mPackageName,
+                mDatabaseName,
+                suggestionQueryExpression,
+                searchSuggestionSpec));
+    }
+
     @Override
     @NonNull
-    public ListenableFuture<Void> reportUsage(@NonNull ReportUsageRequest request) {
+    public ListenableFuture<Void> reportUsageAsync(@NonNull ReportUsageRequest request) {
         Preconditions.checkNotNull(request);
         Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
         return execute(() -> {
@@ -364,7 +403,7 @@
 
     @Override
     @NonNull
-    public ListenableFuture<AppSearchBatchResult<String, Void>> remove(
+    public ListenableFuture<AppSearchBatchResult<String, Void>> removeAsync(
             @NonNull RemoveByDocumentIdRequest request) {
         Preconditions.checkNotNull(request);
         Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
@@ -403,7 +442,7 @@
 
     @Override
     @NonNull
-    public ListenableFuture<Void> remove(
+    public ListenableFuture<Void> removeAsync(
             @NonNull String queryExpression, @NonNull SearchSpec searchSpec) {
         Preconditions.checkNotNull(queryExpression);
         Preconditions.checkNotNull(searchSpec);
@@ -432,14 +471,14 @@
 
     @Override
     @NonNull
-    public ListenableFuture<StorageInfo> getStorageInfo() {
+    public ListenableFuture<StorageInfo> getStorageInfoAsync() {
         Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
         return execute(() -> mAppSearchImpl.getStorageInfoForDatabase(mPackageName, mDatabaseName));
     }
 
     @NonNull
     @Override
-    public ListenableFuture<Void> requestFlush() {
+    public ListenableFuture<Void> requestFlushAsync() {
         return execute(() -> {
             mAppSearchImpl.persistToDisk(PersistType.Code.FULL);
             return null;
@@ -472,31 +511,29 @@
     /**
      * Set schema to Icing for no-migration scenario.
      *
-     * <p>We only need one time {@link #setSchema} call for no-migration scenario by using the
+     * <p>We only need one time {@link #setSchemaAsync} call for no-migration scenario by using the
      * forceoverride in the request.
      */
     private SetSchemaResponse setSchemaNoMigrations(@NonNull SetSchemaRequest request,
-            @NonNull Map<String, List<PackageIdentifier>> copySchemasVisibleToPackages,
+            @NonNull List<VisibilityDocument> visibilityDocuments,
             SetSchemaStats.Builder setSchemaStatsBuilder)
             throws AppSearchException {
-        SetSchemaResponse setSchemaResponse = mAppSearchImpl.setSchema(
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
                 mPackageName,
                 mDatabaseName,
                 new ArrayList<>(request.getSchemas()),
-                /*visibilityStore=*/ null,
-                new ArrayList<>(request.getSchemasNotDisplayedBySystem()),
-                copySchemasVisibleToPackages,
+                visibilityDocuments,
                 request.isForceOverride(),
                 request.getVersion(),
                 setSchemaStatsBuilder);
-        if (!request.isForceOverride()) {
-            // check both deleted types and incompatible types are empty. That's the only case we
-            // swallowed in the AppSearchImpl#setSchema().
-            SchemaMigrationUtil.checkDeletedAndIncompatible(setSchemaResponse.getDeletedTypes(),
-                    setSchemaResponse.getIncompatibleTypes());
+        if (!internalSetSchemaResponse.isSuccess()) {
+            // check is the set schema call failed because incompatible changes.
+            // That's the only case we swallowed in the AppSearchImpl#setSchema().
+            throw new AppSearchException(RESULT_INVALID_SCHEMA,
+                    internalSetSchemaResponse.getErrorMessage());
         }
         mIsMutated = true;
-        return setSchemaResponse;
+        return internalSetSchemaResponse.getSetSchemaResponse();
     }
 
     /**
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/UnlimitedLimitConfig.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/UnlimitedLimitConfig.java
index f1e99cb..b4f37fa 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/UnlimitedLimitConfig.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/UnlimitedLimitConfig.java
@@ -35,4 +35,9 @@
     public int getMaxDocumentCount() {
         return Integer.MAX_VALUE;
     }
+
+    @Override
+    public int getMaxSuggestionCount() {
+        return Integer.MAX_VALUE;
+    }
 }
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverter.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverter.java
index af24c98..43c5263 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverter.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverter.java
@@ -17,7 +17,6 @@
 package androidx.appsearch.localstorage.converter;
 
 import static androidx.appsearch.localstorage.util.PrefixUtil.createPrefix;
-import static androidx.appsearch.localstorage.util.PrefixUtil.getDatabaseName;
 import static androidx.appsearch.localstorage.util.PrefixUtil.getPackageName;
 import static androidx.appsearch.localstorage.util.PrefixUtil.removePrefix;
 
@@ -28,7 +27,10 @@
 import androidx.annotation.RestrictTo;
 import androidx.appsearch.app.SearchSpec;
 import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityChecker;
 import androidx.appsearch.localstorage.visibilitystore.VisibilityStore;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityUtil;
 import androidx.collection.ArrayMap;
 import androidx.collection.ArraySet;
 import androidx.core.util.Preconditions;
@@ -54,16 +56,24 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public final class SearchSpecToProtoConverter {
     private static final String TAG = "AppSearchSearchSpecConv";
+    private final String mQueryExpression;
     private final SearchSpec mSearchSpec;
     private final Set<String> mPrefixes;
-    /** Prefixed namespaces that the client is allowed to query over */
-    private final Set<String> mTargetPrefixedNamespaceFilters = new ArraySet<>();
-    /** Prefixed schemas that the client is allowed to query over */
-    private final Set<String> mTargetPrefixedSchemaFilters = new ArraySet<>();
+    /**
+     * The intersected prefixed namespaces that are existing in AppSearch and also accessible to the
+     * client.
+     */
+    private final Set<String> mTargetPrefixedNamespaceFilters;
+    /**
+     * The intersected prefixed schema types that are existing in AppSearch and also accessible to
+     * the client.
+     */
+    private final Set<String> mTargetPrefixedSchemaFilters;
 
     /**
      * Creates a {@link SearchSpecToProtoConverter} for given {@link SearchSpec}.
      *
+     * @param queryExpression                Query String to search.
      * @param searchSpec    The spec we need to convert from.
      * @param prefixes      Set of database prefix which the caller want to access.
      * @param namespaceMap  The cached Map of {@code <Prefix, Set<PrefixedNamespace>>} stores
@@ -71,72 +81,28 @@
      * @param schemaMap     The cached Map of {@code <Prefix, Map<PrefixedSchemaType, schemaProto>>}
      *                      stores all prefixed schema filters which are stored inAppSearch.
      */
-    public SearchSpecToProtoConverter(@NonNull SearchSpec searchSpec,
+    public SearchSpecToProtoConverter(
+            @NonNull String queryExpression,
+            @NonNull SearchSpec searchSpec,
             @NonNull Set<String> prefixes,
             @NonNull Map<String, Set<String>> namespaceMap,
             @NonNull Map<String, Map<String, SchemaTypeConfigProto>> schemaMap) {
+        mQueryExpression = Preconditions.checkNotNull(queryExpression);
         mSearchSpec = Preconditions.checkNotNull(searchSpec);
         mPrefixes = Preconditions.checkNotNull(prefixes);
         Preconditions.checkNotNull(namespaceMap);
         Preconditions.checkNotNull(schemaMap);
-        generateTargetNamespaceFilters(namespaceMap);
+        mTargetPrefixedNamespaceFilters =
+                SearchSpecToProtoConverterUtil.generateTargetNamespaceFilters(
+                        prefixes, namespaceMap, searchSpec.getFilterNamespaces());
+        // If the target namespace filter is empty, the user has nothing to search for. We can skip
+        // generate the target schema filter.
         if (!mTargetPrefixedNamespaceFilters.isEmpty()) {
-            // Skip generate the target schema filter if the target namespace filter is empty. We
-            // have nothing to search anyway.
-            generateTargetSchemaFilters(schemaMap);
-        }
-    }
-
-    /**
-     * Add prefix to the given namespace filters that user want to search over and find the
-     * intersection set with those prefixed namespace candidates that are stored in AppSearch.
-     *
-     * @param namespaceMap   The cached Map of {@code <Prefix, Set<PrefixedNamespace>>} stores
-     *                       all prefixed namespace filters which are stored in AppSearch.
-     */
-    private void generateTargetNamespaceFilters(
-            @NonNull Map<String, Set<String>> namespaceMap) {
-        // Convert namespace filters to prefixed namespace filters
-        for (String prefix : mPrefixes) {
-            // Step1: find all prefixed namespace candidates that are stored in AppSearch.
-            Set<String> prefixedNamespaceCandidates = namespaceMap.get(prefix);
-            if (prefixedNamespaceCandidates == null) {
-                // This is should never happen. All prefixes should be verified before reach
-                // here.
-                continue;
-            }
-            // Step2: get the intersection of user searching filters and those candidates which are
-            // stored in AppSearch.
-            getIntersectedFilters(prefix, prefixedNamespaceCandidates,
-                    mSearchSpec.getFilterNamespaces(), mTargetPrefixedNamespaceFilters);
-        }
-    }
-
-    /**
-     * Add prefix to the given schema filters that user want to search over and find the
-     * intersection set with those prefixed schema candidates that are stored in AppSearch.
-     *
-     * @param schemaMap              The cached Map of
-     *                               <Prefix, Map<PrefixedSchemaType, schemaProto>>
-     *                               stores all prefixed schema filters which are stored in
-     *                               AppSearch.
-     */
-    private void generateTargetSchemaFilters(
-            @NonNull Map<String, Map<String, SchemaTypeConfigProto>> schemaMap) {
-        // Append prefix to input schema filters and get the intersection of existing schema filter.
-        for (String prefix : mPrefixes) {
-            // Step1: find all prefixed schema candidates that are stored in AppSearch.
-            Map<String, SchemaTypeConfigProto> prefixedSchemaMap = schemaMap.get(prefix);
-            if (prefixedSchemaMap == null) {
-                // This is should never happen. All prefixes should be verified before reach
-                // here.
-                continue;
-            }
-            Set<String> prefixedSchemaCandidates = prefixedSchemaMap.keySet();
-            // Step2: get the intersection of user searching filters and those candidates which are
-            // stored in AppSearch.
-            getIntersectedFilters(prefix, prefixedSchemaCandidates, mSearchSpec.getFilterSchemas(),
-                    mTargetPrefixedSchemaFilters);
+            mTargetPrefixedSchemaFilters =
+                    SearchSpecToProtoConverterUtil.generateTargetSchemaFilters(
+                            prefixes, schemaMap, searchSpec.getFilterSchemas());
+        } else {
+            mTargetPrefixedSchemaFilters = new ArraySet<>();
         }
     }
 
@@ -144,7 +110,7 @@
      * @return whether this search's target filters are empty. If any target filter is empty, we
      * should skip send request to Icing.
      */
-    public boolean isNothingToSearch() {
+    public boolean hasNothingToSearch() {
         return mTargetPrefixedNamespaceFilters.isEmpty() || mTargetPrefixedSchemaFilters.isEmpty();
     }
 
@@ -152,55 +118,43 @@
      * For each target schema, we will check visibility store is that accessible to the caller. And
      * remove this schemas if it is not allowed for caller to query.
      *
-     * @param callerPackageName            The package name of caller
-     * @param visibilityStore              The visibility store which holds all visibility settings.
-     *                                     If you pass null, all schemas that don't belong to the
-     *                                     caller package will be removed.
-     * @param callerUid                    The uid of the caller.
-     * @param callerHasSystemAccess        Whether the caller has system access.
+     * @param callerAccess      Visibility access info of the calling app
+     * @param visibilityStore   The {@link VisibilityStore} that store all visibility
+     *                          information.
+     * @param visibilityChecker Optional visibility checker to check whether the caller
+     *                          could access target schemas. Pass {@code null} will
+     *                          reject access for all documents which doesn't belong
+     *                          to the calling package.
      */
-    public void removeInaccessibleSchemaFilter(@NonNull String callerPackageName,
+    public void removeInaccessibleSchemaFilter(
+            @NonNull CallerAccess callerAccess,
             @Nullable VisibilityStore visibilityStore,
-            int callerUid,
-            boolean callerHasSystemAccess) {
+            @Nullable VisibilityChecker visibilityChecker) {
         Iterator<String> targetPrefixedSchemaFilterIterator =
                 mTargetPrefixedSchemaFilters.iterator();
         while (targetPrefixedSchemaFilterIterator.hasNext()) {
             String targetPrefixedSchemaFilter = targetPrefixedSchemaFilterIterator.next();
             String packageName = getPackageName(targetPrefixedSchemaFilter);
 
-            boolean allow;
-            if (packageName.equals(callerPackageName)) {
-                // Callers can always retrieve their own data
-                allow = true;
-            } else if (visibilityStore == null) {
-                // If there's no visibility store, there's no extra access
-                allow = false;
-            } else {
-                String databaseName = getDatabaseName(targetPrefixedSchemaFilter);
-                allow = visibilityStore.isSchemaSearchableByCaller(packageName, databaseName,
-                        targetPrefixedSchemaFilter, callerUid, callerHasSystemAccess);
-            }
-            if (!allow) {
+            if (!VisibilityUtil.isSchemaSearchableByCaller(
+                    callerAccess,
+                    packageName,
+                    targetPrefixedSchemaFilter,
+                    visibilityStore,
+                    visibilityChecker)) {
                 targetPrefixedSchemaFilterIterator.remove();
             }
         }
     }
 
-    /**
-     * Extracts {@link SearchSpecProto} information from a {@link SearchSpec}.
-     *
-     * @param queryExpression                Query String to search.
-     */
+    /** Extracts {@link SearchSpecProto} information from a {@link SearchSpec}. */
     @NonNull
-    public SearchSpecProto toSearchSpecProto(
-            @NonNull String queryExpression) {
-        Preconditions.checkNotNull(queryExpression);
-
+    public SearchSpecProto toSearchSpecProto() {
         // set query to SearchSpecProto and override schema and namespace filter by
-        // targetPrefixedFilters which is
+        // targetPrefixedFilters which contains all existing and also accessible to the caller
+        // filters.
         SearchSpecProto.Builder protoBuilder = SearchSpecProto.newBuilder()
-                .setQuery(queryExpression)
+                .setQuery(mQueryExpression)
                 .addAllNamespaceFilters(mTargetPrefixedNamespaceFilters)
                 .addAllSchemaTypeFilters(mTargetPrefixedSchemaFilters);
 
@@ -229,7 +183,7 @@
                         ResultSpecProto.SnippetSpecProto.newBuilder()
                                 .setNumToSnippet(mSearchSpec.getSnippetCount())
                                 .setNumMatchesPerProperty(mSearchSpec.getSnippetCountPerProperty())
-                                .setMaxWindowBytes(mSearchSpec.getMaxSnippetSize()));
+                                .setMaxWindowUtf32Length(mSearchSpec.getMaxSnippetSize()));
 
         // Rewrites the typePropertyMasks that exist in {@code prefixes}.
         int groupingType = mSearchSpec.getResultGroupingTypeFlags();
@@ -449,34 +403,4 @@
                             .addAllNamespaces(namespaces).setMaxResults(maxNumResults));
         }
     }
-
-    /**
-     * Find the intersection set of candidates existing in AppSearch and user specified filters.
-     *
-     * @param prefix                   The package and database's identifier.
-     * @param prefixedCandidates       The set contains all prefixed candidates which are existing
-     *                                 in a database.
-     * @param inputFilters             The set contains all desired but un-prefixed filters of user.
-     * @param prefixedTargetFilters    The output set contains all desired prefixed filters which
-     *                                 are existing in the database.
-     */
-    private static void getIntersectedFilters(
-            @NonNull String prefix,
-            @NonNull Set<String> prefixedCandidates,
-            @NonNull List<String> inputFilters,
-            @NonNull Set<String> prefixedTargetFilters) {
-        if (inputFilters.isEmpty()) {
-            // Client didn't specify certain schemas to search over, add all candidates.
-            prefixedTargetFilters.addAll(prefixedCandidates);
-        } else {
-            // Client specified some filters to search over, check and only add those are
-            // existing in the database.
-            for (int i = 0; i < inputFilters.size(); i++) {
-                String prefixedTargetFilter = prefix + inputFilters.get(i);
-                if (prefixedCandidates.contains(prefixedTargetFilter)) {
-                    prefixedTargetFilters.add(prefixedTargetFilter);
-                }
-            }
-        }
-    }
 }
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterUtil.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterUtil.java
new file mode 100644
index 0000000..1a90bb8
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterUtil.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2022 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.appsearch.localstorage.converter;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.collection.ArraySet;
+
+import com.google.android.icing.proto.SchemaTypeConfigProto;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Utilities for working with {@link SearchSpecToProtoConverter} and
+ * {@link SearchSuggestionSpecToProtoConverter}.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class SearchSpecToProtoConverterUtil {
+    private SearchSpecToProtoConverterUtil() {}
+
+    /**
+     * Add prefix to the given namespace filters that user want to search over and find the
+     * intersection set with those prefixed namespace candidates that are stored in AppSearch.
+     *
+     * @param prefixes              Set of database prefix which the caller want to access.
+     * @param namespaceMap          The cached Map of {@code <Prefix, Set<PrefixedNamespace>>}
+     *                              stores all prefixed namespace filters which are stored in
+     *                              AppSearch.
+     * @param inputNamespaceFilters The set contains all desired but un-prefixed namespace filters
+     *                              of user. If the inputNamespaceFilters is empty, all existing
+     *                              prefixedCandidates will be added to the prefixedTargetFilters.
+     */
+    static Set<String> generateTargetNamespaceFilters(
+            @NonNull Set<String> prefixes,
+            @NonNull Map<String, Set<String>> namespaceMap,
+            @NonNull List<String> inputNamespaceFilters) {
+        // Convert namespace filters to prefixed namespace filters
+        Set<String> targetPrefixedNamespaceFilters = new ArraySet<>();
+        for (String prefix : prefixes) {
+            // Step1: find all prefixed namespace candidates that are stored in AppSearch.
+            Set<String> prefixedNamespaceCandidates = namespaceMap.get(prefix);
+            if (prefixedNamespaceCandidates == null) {
+                // This is should never happen. All prefixes should be verified before reach
+                // here.
+                continue;
+            }
+            // Step2: get the intersection of user searching filters and those candidates which are
+            // stored in AppSearch.
+            addIntersectedFilters(prefix, prefixedNamespaceCandidates,
+                    inputNamespaceFilters, targetPrefixedNamespaceFilters);
+        }
+        return targetPrefixedNamespaceFilters;
+    }
+
+    /**
+     * Add prefix to the given schema filters that user want to search over and find the
+     * intersection set with those prefixed schema candidates that are stored in AppSearch.
+     *
+     * @param prefixes              Set of database prefix which the caller want to access.
+     * @param schemaMap             The cached Map of
+     *                              {@code <Prefix, Map<PrefixedSchemaType, schemaProto>>}
+     *                              stores all prefixed schema filters which are stored in
+     *                              AppSearch.
+     * @param inputSchemaFilters    The set contains all desired but un-prefixed namespace filters
+     *                              of user. If the inputSchemaFilters is empty, all existing
+     *                              prefixedCandidates will be added to the prefixedTargetFilters.
+     */
+    static Set<String> generateTargetSchemaFilters(
+            @NonNull Set<String> prefixes,
+            @NonNull Map<String, Map<String, SchemaTypeConfigProto>> schemaMap,
+            @NonNull List<String> inputSchemaFilters) {
+        Set<String> targetPrefixedSchemaFilters = new ArraySet<>();
+        // Append prefix to input schema filters and get the intersection of existing schema filter.
+        for (String prefix : prefixes) {
+            // Step1: find all prefixed schema candidates that are stored in AppSearch.
+            Map<String, SchemaTypeConfigProto> prefixedSchemaMap = schemaMap.get(prefix);
+            if (prefixedSchemaMap == null) {
+                // This is should never happen. All prefixes should be verified before reach
+                // here.
+                continue;
+            }
+            Set<String> prefixedSchemaCandidates = prefixedSchemaMap.keySet();
+            // Step2: get the intersection of user searching filters and those candidates which are
+            // stored in AppSearch.
+            addIntersectedFilters(prefix, prefixedSchemaCandidates, inputSchemaFilters,
+                    targetPrefixedSchemaFilters);
+        }
+        return targetPrefixedSchemaFilters;
+    }
+
+    /**
+     * Find the intersection set of candidates existing in AppSearch and user specified filters.
+     *
+     * @param prefix                   The package and database's identifier.
+     * @param prefixedCandidates       The set contains all prefixed candidates which are existing
+     *                                 in a database.
+     * @param inputFilters             The set contains all desired but un-prefixed filters of user.
+     *                                 If the inputFilters is empty, all prefixedCandidates will be
+     *                                 added to the prefixedTargetFilters.
+     * @param prefixedTargetFilters    The output set contains all desired prefixed filters which
+     *                                 are existing in the database.
+     */
+    private static void addIntersectedFilters(
+            @NonNull String prefix,
+            @NonNull Set<String> prefixedCandidates,
+            @NonNull List<String> inputFilters,
+            @NonNull Set<String> prefixedTargetFilters) {
+        if (inputFilters.isEmpty()) {
+            // Client didn't specify certain schemas to search over, add all candidates.
+            prefixedTargetFilters.addAll(prefixedCandidates);
+        } else {
+            // Client specified some filters to search over, check and only add those are
+            // existing in the database.
+            for (int i = 0; i < inputFilters.size(); i++) {
+                String prefixedTargetFilter = prefix + inputFilters.get(i);
+                if (prefixedCandidates.contains(prefixedTargetFilter)) {
+                    prefixedTargetFilters.add(prefixedTargetFilter);
+                }
+            }
+        }
+    }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSuggestionSpecToProtoConverter.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSuggestionSpecToProtoConverter.java
new file mode 100644
index 0000000..e3f8b92
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSuggestionSpecToProtoConverter.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2022 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.appsearch.localstorage.converter;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.app.SearchSuggestionSpec;
+import androidx.core.util.Preconditions;
+
+import com.google.android.icing.proto.SuggestionSpecProto;
+import com.google.android.icing.proto.TermMatchType;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Translates a {@link SearchSuggestionSpec} into icing search protos.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public final class SearchSuggestionSpecToProtoConverter {
+    private final String mSuggestionQueryExpression;
+    private final SearchSuggestionSpec mSearchSuggestionSpec;
+    /**
+     * The intersected prefixed namespaces that are existing in AppSearch and also accessible to the
+     * client.
+     */
+    private final Set<String> mTargetPrefixedNamespaceFilters;
+
+    /**
+     * Creates a {@link SearchSuggestionSpecToProtoConverter} for given
+     * {@link SearchSuggestionSpec}.
+     *
+     * @param suggestionQueryExpression The non-empty query expression used to be completed.
+     * @param searchSuggestionSpec      The spec we need to convert from.
+     * @param prefixes                  Set of database prefix which the caller want to access.
+     * @param namespaceMap              The cached Map of {@code <Prefix, Set<PrefixedNamespace>>}
+     *                                  stores all prefixed namespace filters which are stored in
+     *                                  AppSearch.
+     */
+    public SearchSuggestionSpecToProtoConverter(
+            @NonNull String suggestionQueryExpression,
+            @NonNull SearchSuggestionSpec searchSuggestionSpec,
+            @NonNull Set<String> prefixes,
+            @NonNull Map<String, Set<String>> namespaceMap) {
+        mSuggestionQueryExpression = Preconditions.checkNotNull(suggestionQueryExpression);
+        mSearchSuggestionSpec = Preconditions.checkNotNull(searchSuggestionSpec);
+        Preconditions.checkNotNull(prefixes);
+        Preconditions.checkNotNull(namespaceMap);
+        mTargetPrefixedNamespaceFilters =
+                SearchSpecToProtoConverterUtil.generateTargetNamespaceFilters(
+                        prefixes, namespaceMap, searchSuggestionSpec.getFilterNamespaces());
+    }
+
+    /**
+     * @return whether this search's target filters are empty. If any target filter is empty, we
+     * should skip send request to Icing.
+     */
+    public boolean hasNothingToSearch() {
+        return mTargetPrefixedNamespaceFilters.isEmpty();
+    }
+
+    /**
+     * Extracts {@link SuggestionSpecProto} information from a {@link SearchSuggestionSpec}.
+     *
+     */
+    @NonNull
+    public SuggestionSpecProto toSearchSuggestionSpecProto() {
+        // Set query suggestion prefix to the SearchSuggestionProto and override schema and
+        // namespace filter by targetPrefixedFilters which contains all existing and also
+        // accessible to the caller filters.
+        SuggestionSpecProto.Builder protoBuilder = SuggestionSpecProto.newBuilder()
+                .setPrefix(mSuggestionQueryExpression)
+                .addAllNamespaceFilters(mTargetPrefixedNamespaceFilters)
+                .setNumToReturn(mSearchSuggestionSpec.getMaximumResultCount());
+
+        // TODO(b/227356108) expose setTermMatch in SearchSuggestionSpec.
+        protoBuilder.setScoringSpec(SuggestionSpecProto.SuggestionScoringSpecProto.newBuilder()
+                .setScoringMatchType(TermMatchType.Code.EXACT_ONLY)
+                .build());
+
+        return protoBuilder.build();
+    }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/CallStats.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/CallStats.java
index e3abf90..101ef1f 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/CallStats.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/CallStats.java
@@ -56,6 +56,7 @@
             CALL_TYPE_GLOBAL_SEARCH,
             CALL_TYPE_REMOVE_DOCUMENTS_BY_SEARCH,
             CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH,
+            CALL_TYPE_GLOBAL_GET_DOCUMENT_BY_ID,
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface CallType {
@@ -76,6 +77,7 @@
     public static final int CALL_TYPE_GLOBAL_SEARCH = 12;
     public static final int CALL_TYPE_REMOVE_DOCUMENTS_BY_SEARCH = 13;
     public static final int CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH = 14;
+    public static final int CALL_TYPE_GLOBAL_GET_DOCUMENT_BY_ID = 15;
 
     @Nullable
     private final String mPackageName;
@@ -145,11 +147,11 @@
      * Returns number of operations succeeded.
      *
      * <p>For example, for
-     * {@link androidx.appsearch.app.AppSearchSession#put}, it is the total number of individual
+     * {@link androidx.appsearch.app.AppSearchSession#putAsync}, it is the total number of individual
      * successful put operations. In this case, how many documents are successfully indexed.
      *
      * <p>For non-batch calls such as
-     * {@link androidx.appsearch.app.AppSearchSession#setSchema}, the sum of
+     * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync}, the sum of
      * {@link CallStats#getNumOperationsSucceeded()} and
      * {@link CallStats#getNumOperationsFailed()} is always 1 since there is only one
      * operation.
@@ -162,11 +164,12 @@
      * Returns number of operations failed.
      *
      * <p>For example, for
-     * {@link androidx.appsearch.app.AppSearchSession#put}, it is the total number of individual
+     * {@link androidx.appsearch.app.AppSearchSession#putAsync}, it is the total number of individual
      * failed put operations. In this case, how many documents are failed to be indexed.
      *
-     * <p>For non-batch calls such as {@link androidx.appsearch.app.AppSearchSession#setSchema},
-     * the sum of {@link CallStats#getNumOperationsSucceeded()} and
+     * <p>For non-batch calls such as
+     * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync}, the sum of
+     * {@link CallStats#getNumOperationsSucceeded()} and
      * {@link CallStats#getNumOperationsFailed()} is always 1 since there is only one
      * operation.
      */
@@ -235,12 +238,12 @@
          * Sets number of operations succeeded.
          *
          * <p>For example, for
-         * {@link androidx.appsearch.app.AppSearchSession#put}, it is the total number of
+         * {@link androidx.appsearch.app.AppSearchSession#putAsync}, it is the total number of
          * individual successful put operations. In this case, how many documents are
          * successfully indexed.
          *
          * <p>For non-batch calls such as
-         * {@link androidx.appsearch.app.AppSearchSession#setSchema}, the sum of
+         * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync}, the sum of
          * {@link CallStats#getNumOperationsSucceeded()} and
          * {@link CallStats#getNumOperationsFailed()} is always 1 since there is only one
          * operation.
@@ -254,12 +257,12 @@
         /**
          * Sets number of operations failed.
          *
-         * <p>For example, for {@link androidx.appsearch.app.AppSearchSession#put}, it is the
+         * <p>For example, for {@link androidx.appsearch.app.AppSearchSession#putAsync}, it is the
          * total number of individual failed put operations. In this case, how many documents
          * are failed to be indexed.
          *
          * <p>For non-batch calls such as
-         * {@link androidx.appsearch.app.AppSearchSession#setSchema}, the sum of
+         * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync}, the sum of
          * {@link CallStats#getNumOperationsSucceeded()} and
          * {@link CallStats#getNumOperationsFailed()} is always 1 since there is only one
          * operation.
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/PutDocumentStats.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/PutDocumentStats.java
index c8bc687..e9a25fd 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/PutDocumentStats.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/PutDocumentStats.java
@@ -23,7 +23,7 @@
 
 /**
  * A class for holding detailed stats to log for each individual document put by a
- * {@link androidx.appsearch.app.AppSearchSession#put} call.
+ * {@link androidx.appsearch.app.AppSearchSession#putAsync} call.
  *
  * @hide
  */
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/RemoveStats.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/RemoveStats.java
index 3a63aa0..7eb4820 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/RemoveStats.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/RemoveStats.java
@@ -29,8 +29,8 @@
 
 /**
  * Class holds detailed stats for
- * {@link androidx.appsearch.app.AppSearchSession#remove(RemoveByDocumentIdRequest)} and
- * {@link androidx.appsearch.app.AppSearchSession#remove(String, SearchSpec)}
+ * {@link androidx.appsearch.app.AppSearchSession#removeAsync(RemoveByDocumentIdRequest)} and
+ * {@link androidx.appsearch.app.AppSearchSession#removeAsync(String, SearchSpec)}
  *
  * @hide
  */
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/util/PrefixUtil.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/util/PrefixUtil.java
index 12d4587..5e4b053 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/util/PrefixUtil.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/util/PrefixUtil.java
@@ -25,10 +25,13 @@
 import androidx.appsearch.exceptions.AppSearchException;
 
 import com.google.android.icing.proto.DocumentProto;
+import com.google.android.icing.proto.PropertyConfigProto;
 import com.google.android.icing.proto.PropertyProto;
+import com.google.android.icing.proto.SchemaTypeConfigProto;
 
 /**
  * Provides utility functions for working with package + database prefixes.
+ *
  * @hide
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -41,7 +44,8 @@
     @VisibleForTesting
     public static final char PACKAGE_DELIMITER = '$';
 
-    private PrefixUtil() {}
+    private PrefixUtil() {
+    }
 
     /**
      * Creates prefix string for given package name and database name.
@@ -50,6 +54,7 @@
     public static String createPrefix(@NonNull String packageName, @NonNull String databaseName) {
         return packageName + PACKAGE_DELIMITER + databaseName + DATABASE_DELIMITER;
     }
+
     /**
      * Creates prefix string for given package name.
      */
@@ -71,7 +76,7 @@
         int delimiterIndex = prefix.indexOf(PACKAGE_DELIMITER);
         if (delimiterIndex == -1) {
             // This should never happen if we construct our prefixes properly
-            Log.wtf(TAG, "Malformed prefix doesn't contain package delimiter: " + prefix);
+            Log.e(TAG, "Malformed prefix doesn't contain package delimiter: " + prefix);
             return "";
         }
         return prefix.substring(0, delimiterIndex);
@@ -91,12 +96,12 @@
         int databaseDelimiterIndex = prefix.indexOf(DATABASE_DELIMITER);
         if (packageDelimiterIndex == -1) {
             // This should never happen if we construct our prefixes properly
-            Log.wtf(TAG, "Malformed prefix doesn't contain package delimiter: " + prefix);
+            Log.e(TAG, "Malformed prefix doesn't contain package delimiter: " + prefix);
             return "";
         }
         if (databaseDelimiterIndex == -1) {
             // This should never happen if we construct our prefixes properly
-            Log.wtf(TAG, "Malformed prefix doesn't contain database delimiter: " + prefix);
+            Log.e(TAG, "Malformed prefix doesn't contain database delimiter: " + prefix);
             return "";
         }
         return prefix.substring(packageDelimiterIndex + 1, databaseDelimiterIndex);
@@ -231,4 +236,37 @@
 
         return schemaPrefix;
     }
+
+    /**
+     * Removes any prefixes from types mentioned anywhere in {@code typeConfigBuilder}.
+     *
+     * @param typeConfigBuilder The schema type to mutate
+     * @return Prefix name that was removed from the schema type.
+     * @throws AppSearchException if there are unexpected database prefixing errors.
+     */
+    @NonNull
+    public static String removePrefixesFromSchemaType(
+            @NonNull SchemaTypeConfigProto.Builder typeConfigBuilder)
+            throws AppSearchException {
+        String typePrefix = PrefixUtil.getPrefix(typeConfigBuilder.getSchemaType());
+        // Rewrite SchemaProto.types.schema_type
+        String newSchemaType =
+                typeConfigBuilder.getSchemaType().substring(typePrefix.length());
+        typeConfigBuilder.setSchemaType(newSchemaType);
+
+        // Rewrite SchemaProto.types.properties.schema_type
+        for (int propertyIdx = 0;
+                propertyIdx < typeConfigBuilder.getPropertiesCount();
+                propertyIdx++) {
+            if (!typeConfigBuilder.getProperties(propertyIdx).getSchemaType().isEmpty()) {
+                PropertyConfigProto.Builder propertyConfigBuilder =
+                        typeConfigBuilder.getProperties(propertyIdx).toBuilder();
+                String newPropertySchemaType = propertyConfigBuilder.getSchemaType()
+                        .substring(typePrefix.length());
+                propertyConfigBuilder.setSchemaType(newPropertySchemaType);
+                typeConfigBuilder.setProperties(propertyIdx, propertyConfigBuilder);
+            }
+        }
+        return typePrefix;
+    }
 }
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/CallerAccess.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/CallerAccess.java
new file mode 100644
index 0000000..1a47109
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/CallerAccess.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2022 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.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.core.util.Preconditions;
+
+/**
+ * Contains attributes of an API caller relevant to its access via visibility store.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class CallerAccess {
+    private final String mCallingPackageName;
+
+    /**
+     * Constructs a new {@link CallerAccess}.
+     *
+     * @param callingPackageName    The name of the package which wants to access data.
+     */
+    public CallerAccess(@NonNull String callingPackageName) {
+        mCallingPackageName = Preconditions.checkNotNull(callingPackageName);
+    }
+
+    /** Returns the name of the package which wants to access data. */
+    @NonNull
+    public String getCallingPackageName() {
+        return mCallingPackageName;
+    }
+
+    @Override
+    public boolean equals(@Nullable Object o) {
+        if (this == o) return true;
+        if (!(o instanceof CallerAccess)) return false;
+        CallerAccess that = (CallerAccess) o;
+        return mCallingPackageName.equals(that.mCallingPackageName);
+    }
+
+    @Override
+    public int hashCode() {
+        return mCallingPackageName.hashCode();
+    }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityChecker.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityChecker.java
new file mode 100644
index 0000000..7801562
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityChecker.java
@@ -0,0 +1,41 @@
+/*
+ * 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.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+/**
+ * An interface for classes that validate document visibility data.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface VisibilityChecker {
+    /**
+     * Checks whether the given caller has access to the given prefixed schemas.
+     *
+     * @param callerAccess      Visibility access info of the calling app
+     * @param packageName Package of app that owns the schemas.
+     * @param prefixedSchema The prefixed schema type that the caller want to access.
+     * @param visibilityStore The {@link VisibilityStore} that store all visibility information.
+     */
+    boolean isSchemaSearchableByCaller(
+            @NonNull CallerAccess callerAccess,
+            @NonNull String packageName,
+            @NonNull String prefixedSchema,
+            @NonNull VisibilityStore visibilityStore);
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityDocumentV1.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityDocumentV1.java
new file mode 100644
index 0000000..537fd81
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityDocumentV1.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright 2022 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.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.collection.ArraySet;
+import androidx.core.util.Preconditions;
+
+import java.util.Set;
+
+/**
+ * Holds the visibility settings in version 1 that apply to a schema type.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+class VisibilityDocumentV1 extends GenericDocument {
+    /**
+     * The Schema type for documents that hold AppSearch's metadata, e.g. visibility settings.
+     */
+    static final String SCHEMA_TYPE = "VisibilityType";
+    /** Namespace of documents that contain visibility settings */
+    static final String NAMESPACE = "";
+
+    /**
+     * Property that holds the list of platform-hidden schemas, as part of the visibility settings.
+     */
+    private static final String NOT_DISPLAYED_BY_SYSTEM_PROPERTY = "notPlatformSurfaceable";
+
+    /** Property that holds the package name that can access a schema. */
+    private static final String PACKAGE_NAME_PROPERTY = "packageName";
+
+    /** Property that holds the SHA 256 certificate of the app that can access a schema. */
+    private static final String SHA_256_CERT_PROPERTY = "sha256Cert";
+
+    /** Property that holds the role can access a schema. */
+    private static final String ROLE_PROPERTY = "role";
+
+    /** Property that holds the required permissions to access the schema. */
+    private static final String PERMISSION_PROPERTY = "permission";
+
+    /**
+     * Schema for the VisibilityStore's documents.
+     */
+    static final AppSearchSchema
+            SCHEMA = new AppSearchSchema.Builder(SCHEMA_TYPE)
+            .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                    NOT_DISPLAYED_BY_SYSTEM_PROPERTY)
+                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                    .build())
+            .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(PACKAGE_NAME_PROPERTY)
+                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                    .build())
+            .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder(SHA_256_CERT_PROPERTY)
+                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                    .build())
+            .addProperty(new AppSearchSchema.LongPropertyConfig.Builder(ROLE_PROPERTY)
+                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                    .build())
+            .addProperty(new AppSearchSchema.LongPropertyConfig.Builder(PERMISSION_PROPERTY)
+                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                    .build())
+            .build();
+
+    VisibilityDocumentV1(@NonNull GenericDocument genericDocument) {
+        super(genericDocument);
+    }
+
+    /** Returns whether this schema is visible to the system. */
+    boolean isNotDisplayedBySystem() {
+        return getPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY);
+    }
+
+    /**
+     * Returns a package name array which could access this schema. Use {@link #getSha256Certs()}
+     * to get package's sha 256 certs. The same index of package names array and sha256Certs array
+     * represents same package.
+     */
+    @NonNull
+    String[] getPackageNames() {
+        return getPropertyStringArray(PACKAGE_NAME_PROPERTY);
+    }
+
+    /**
+     * Returns a package sha256Certs array which could access this schema. Use
+     * {@link #getPackageNames()} to get package's name. The same index of package names array
+     * and sha256Certs array represents same package.
+     */
+    @NonNull
+    byte[][] getSha256Certs() {
+        return getPropertyBytesArray(SHA_256_CERT_PROPERTY);
+    }
+
+    /**
+     * Returns an array of Android Roles that have access to the schema this
+     * {@link VisibilityDocumentV1} represents.
+     */
+    @Nullable
+    Set<Integer> getVisibleToRoles() {
+        return toInts(getPropertyLongArray(ROLE_PROPERTY));
+    }
+
+    /**
+     * Returns an array of Android Permissions that caller mush hold to access the schema
+     * this {@link VisibilityDocumentV1} represents.
+     */
+    @Nullable
+    Set<Integer> getVisibleToPermissions() {
+        return toInts(getPropertyLongArray(PERMISSION_PROPERTY));
+    }
+
+    /** Builder for {@link VisibilityDocumentV1}. */
+    static class Builder extends GenericDocument.Builder<Builder> {
+        private final Set<PackageIdentifier> mPackageIdentifiers = new ArraySet<>();
+
+        /**
+         * Creates a {@link Builder} for a {@link VisibilityDocumentV1}.
+         *
+         * @param id The SchemaType of the {@link AppSearchSchema} that this
+         *           {@link VisibilityDocumentV1} represents. The package and database prefix will
+         *           be added in server side. We are using prefixed schema type to be the final
+         *           id of this {@link VisibilityDocumentV1}.
+         */
+        Builder(@NonNull String id) {
+            super(NAMESPACE, id, SCHEMA_TYPE);
+        }
+
+        /** Sets whether this schema has opted out of platform surfacing. */
+        @NonNull
+        Builder setNotDisplayedBySystem(boolean notDisplayedBySystem) {
+            return setPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY,
+                    notDisplayedBySystem);
+        }
+
+        /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+        @NonNull
+        Builder addVisibleToPackages(@NonNull Set<PackageIdentifier> packageIdentifiers) {
+            Preconditions.checkNotNull(packageIdentifiers);
+            mPackageIdentifiers.addAll(packageIdentifiers);
+            return this;
+        }
+
+        /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+        @NonNull
+        Builder addVisibleToPackage(@NonNull PackageIdentifier packageIdentifier) {
+            Preconditions.checkNotNull(packageIdentifier);
+            mPackageIdentifiers.add(packageIdentifier);
+            return this;
+        }
+
+        /** Add a set of Android role that has access to the schema this
+         * {@link VisibilityDocumentV1} represents. */
+        @NonNull
+        Builder setVisibleToRoles(@NonNull Set<Integer> visibleToRoles) {
+            Preconditions.checkNotNull(visibleToRoles);
+            setPropertyLong(ROLE_PROPERTY, toLongs(visibleToRoles));
+            return this;
+        }
+
+        /** Add a set of Android role that has access to the schema this
+         * {@link VisibilityDocumentV1} represents. */
+        @NonNull
+        Builder setVisibleToPermissions(@NonNull Set<Integer> visibleToPermissions) {
+            Preconditions.checkNotNull(visibleToPermissions);
+            setPropertyLong(PERMISSION_PROPERTY, toLongs(visibleToPermissions));
+            return this;
+        }
+
+        /** Build a {@link VisibilityDocumentV1} */
+        @Override
+        @NonNull
+        public VisibilityDocumentV1 build() {
+            String[] packageNames = new String[mPackageIdentifiers.size()];
+            byte[][] sha256Certs = new byte[mPackageIdentifiers.size()][32];
+            int i = 0;
+            for (PackageIdentifier packageIdentifier : mPackageIdentifiers) {
+                packageNames[i] = packageIdentifier.getPackageName();
+                sha256Certs[i] = packageIdentifier.getSha256Certificate();
+                ++i;
+            }
+            setPropertyString(PACKAGE_NAME_PROPERTY, packageNames);
+            setPropertyBytes(SHA_256_CERT_PROPERTY, sha256Certs);
+            return new VisibilityDocumentV1(super.build());
+        }
+    }
+
+    @NonNull
+    static long[] toLongs(@NonNull Set<Integer> properties) {
+        long[] outputs = new long[properties.size()];
+        int i = 0;
+        for (int property : properties) {
+            outputs[i++] = property;
+        }
+        return outputs;
+    }
+
+    @Nullable
+    private static Set<Integer> toInts(@Nullable long[] properties) {
+        if (properties == null) {
+            return null;
+        }
+        Set<Integer> outputs = new ArraySet<>(properties.length);
+        for (long property : properties) {
+            outputs.add((int) property);
+        }
+        return outputs;
+    }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
index d3d754e..957f1be 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
@@ -15,60 +15,268 @@
  */
 package androidx.appsearch.localstorage.visibilitystore;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.RestrictTo;
-import androidx.annotation.VisibleForTesting;
-import androidx.appsearch.app.PackageIdentifier;
-import androidx.appsearch.exceptions.AppSearchException;
+import static androidx.appsearch.app.AppSearchResult.RESULT_NOT_FOUND;
 
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.app.AppSearchResult;
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.InternalSetSchemaResponse;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.app.VisibilityPermissionDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.collection.ArrayMap;
+import androidx.core.util.Preconditions;
+
+import com.google.android.icing.proto.PersistType;
+
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 /**
- * An interface for classes that store and validate document visibility data.
+ * Stores all visibility settings for all databases that AppSearchImpl knows about.
+ * Persists the visibility settings and reloads them on initialization.
+ *
+ * <p>The VisibilityStore creates a {@link VisibilityDocument} for each schema. This document holds
+ * the visibility settings that apply to that schema. The VisibilityStore also creates a
+ * schema for these documents and has its own package and database so that its data doesn't
+ * interfere with any clients' data. It persists the document and schema through AppSearchImpl.
+ *
+ * <p>These visibility settings won't be used in AppSearch Jetpack, we only store them for clients
+ * to look up.
  *
  * @hide
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public interface VisibilityStore {
+public class VisibilityStore {
+    private static final String TAG = "AppSearchVisibilityStor";
     /**
      * These cannot have any of the special characters used by AppSearchImpl (e.g. {@code
      * AppSearchImpl#PACKAGE_DELIMITER} or {@code AppSearchImpl#DATABASE_DELIMITER}.
      */
-    String PACKAGE_NAME = "VS#Pkg";
+    public static final String VISIBILITY_PACKAGE_NAME = "VS#Pkg";
 
-    @VisibleForTesting
-    String DATABASE_NAME = "VS#Db";
+    public static final String VISIBILITY_DATABASE_NAME = "VS#Db";
 
     /**
-     * Sets visibility settings for the given database. Any previous visibility settings will be
-     * overwritten.
+     * Map of PrefixedSchemaType and VisibilityDocument stores visibility information for each
+     * schema type.
+     */
+    private final Map<String, VisibilityDocument> mVisibilityDocumentMap = new ArrayMap<>();
+
+    private final AppSearchImpl mAppSearchImpl;
+
+    public VisibilityStore(@NonNull AppSearchImpl appSearchImpl)
+            throws AppSearchException {
+        mAppSearchImpl = Preconditions.checkNotNull(appSearchImpl);
+
+        GetSchemaResponse getSchemaResponse = mAppSearchImpl.getSchema(
+                VISIBILITY_PACKAGE_NAME,
+                VISIBILITY_DATABASE_NAME,
+                new CallerAccess(/*callingPackageName=*/VISIBILITY_PACKAGE_NAME));
+        List<VisibilityDocumentV1> visibilityDocumentsV1s = null;
+        switch (getSchemaResponse.getVersion()) {
+            case VisibilityDocument.SCHEMA_VERSION_DOC_PER_PACKAGE:
+                // TODO (b/202194495) add VisibilityDocument in version 0 back instead of using
+                //  GenericDocument.
+                List<GenericDocument> visibilityDocumentsV0s =
+                        VisibilityStoreMigrationHelperFromV0.getVisibilityDocumentsInVersion0(
+                                getSchemaResponse, mAppSearchImpl);
+                visibilityDocumentsV1s = VisibilityStoreMigrationHelperFromV0
+                        .toVisibilityDocumentV1(visibilityDocumentsV0s);
+                // fall through
+            case VisibilityDocument.SCHEMA_VERSION_DOC_PER_SCHEMA:
+                if (visibilityDocumentsV1s == null) {
+                    // We need to read VisibilityDocument in Version 1 from AppSearch instead of
+                    // taking from the above step.
+                    visibilityDocumentsV1s =
+                            VisibilityStoreMigrationHelperFromV1.getVisibilityDocumentsInVersion1(
+                                    mAppSearchImpl);
+                }
+                setLatestSchemaAndDocuments(VisibilityStoreMigrationHelperFromV1
+                        .toVisibilityDocumentsV2(visibilityDocumentsV1s));
+                break;
+            case VisibilityDocument.SCHEMA_VERSION_LATEST:
+                Set<AppSearchSchema> existingVisibilitySchema = getSchemaResponse.getSchemas();
+                if (existingVisibilitySchema.contains(VisibilityDocument.SCHEMA)
+                        && existingVisibilitySchema.contains(VisibilityPermissionDocument.SCHEMA)) {
+                    // The latest Visibility schema is in AppSearch, we must find our schema type.
+                    // Extract all stored Visibility Document into mVisibilityDocumentMap.
+                    loadVisibilityDocumentMap();
+                } else {
+                    // We must have a broken schema. Reset it to the latest version.
+                    // Do NOT set forceOverride to be true here, see comment below.
+                    InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                            VISIBILITY_PACKAGE_NAME,
+                            VISIBILITY_DATABASE_NAME,
+                            Arrays.asList(VisibilityDocument.SCHEMA,
+                                    VisibilityPermissionDocument.SCHEMA),
+                            /*visibilityDocuments=*/ Collections.emptyList(),
+                            /*forceOverride=*/ false,
+                            /*version=*/ VisibilityDocument.SCHEMA_VERSION_LATEST,
+                            /*setSchemaStatsBuilder=*/ null);
+                    if (!internalSetSchemaResponse.isSuccess()) {
+                        // If you hit problem here it means you made a incompatible change in
+                        // Visibility Schema without update the version number. You should bump
+                        // the version number and create a VisibilityStoreMigrationHelper which
+                        // can analyse the different between the old version and the new version
+                        // to migration user's visibility settings.
+                        throw new AppSearchException(AppSearchResult.RESULT_INTERNAL_ERROR,
+                                "Fail to set the latest visibility schema to AppSearch. "
+                                        + "You may need to update the visibility schema version "
+                                        + "number.");
+                    }
+                }
+                break;
+            default:
+                // We must did something wrong.
+                throw new AppSearchException(AppSearchResult.RESULT_INTERNAL_ERROR,
+                        "Found unsupported visibility version: " + getSchemaResponse.getVersion());
+        }
+    }
+
+    /**
+     * Sets visibility settings for the given {@link VisibilityDocument}s. Any previous
+     * {@link VisibilityDocument}s with same prefixed schema type will be overwritten.
      *
-     * @param packageName Package of app that owns the schemas.
-     * @param databaseName Database that owns the schemas.
-     * @param schemasNotDisplayedBySystem Set of prefixed schemas that should be hidden from
-     *     platform surfaces.
-     * @param schemasVisibleToPackages Map of prefixed schemas to a list of package identifiers that
-     *     have access to the schema.
+     * @param prefixedVisibilityDocuments List of prefixed {@link VisibilityDocument} which
+     *                                    contains schema type's visibility information.
      * @throws AppSearchException on AppSearchImpl error.
      */
-    void setVisibility(
-            @NonNull String packageName,
-            @NonNull String databaseName,
-            @NonNull Set<String> schemasNotDisplayedBySystem,
-            @NonNull Map<String, List<PackageIdentifier>> schemasVisibleToPackages)
-            throws AppSearchException;
+    public void setVisibility(@NonNull List<VisibilityDocument> prefixedVisibilityDocuments)
+            throws AppSearchException {
+        Preconditions.checkNotNull(prefixedVisibilityDocuments);
+        // Save new setting.
+        for (int i = 0; i < prefixedVisibilityDocuments.size(); i++) {
+            // put VisibilityDocument to AppSearchImpl and mVisibilityDocumentMap. If there is a
+            // VisibilityDocument with same prefixed schema exists, it will be replaced by new
+            // VisibilityDocument in both AppSearch and memory look up map.
+            VisibilityDocument prefixedVisibilityDocument = prefixedVisibilityDocuments.get(i);
+            mAppSearchImpl.putDocument(
+                    VISIBILITY_PACKAGE_NAME,
+                    VISIBILITY_DATABASE_NAME,
+                    prefixedVisibilityDocument,
+                    /*sendChangeNotifications=*/ false,
+                    /*logger=*/ null);
+            mVisibilityDocumentMap.put(prefixedVisibilityDocument.getId(),
+                    prefixedVisibilityDocument);
+        }
+        // Now that the visibility document has been written. Persist the newly written data.
+        mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
+    }
 
     /**
-     * Checks whether the given package has access to system-surfaceable schemas.
-     *
-     * @param callerUid UID of the app that wants to see the data.
+     * Remove the visibility setting for the given prefixed schema type from both AppSearch and
+     * memory look up map.
      */
-    boolean isSchemaSearchableByCaller(
-            @NonNull String packageName,
-            @NonNull String databaseName,
-            @NonNull String prefixedSchema,
-            int callerUid,
-            boolean callerHasSystemAccess);
+    public void removeVisibility(@NonNull Set<String> prefixedSchemaTypes)
+            throws AppSearchException {
+        for (String prefixedSchemaType : prefixedSchemaTypes) {
+            if (mVisibilityDocumentMap.remove(prefixedSchemaType) != null) {
+                // The deleted schema is not all-default setting, we need to remove its
+                // VisibilityDocument from Icing.
+                try {
+                    mAppSearchImpl.remove(VISIBILITY_PACKAGE_NAME, VISIBILITY_DATABASE_NAME,
+                            VisibilityDocument.NAMESPACE, prefixedSchemaType,
+                            /*removeStatsBuilder=*/null);
+                } catch (AppSearchException e) {
+                    if (e.getResultCode() == RESULT_NOT_FOUND) {
+                        // We are trying to remove this visibility setting, so it's weird but seems
+                        // to be fine if we cannot find it.
+                        Log.e(TAG, "Cannot find visibility document for " + prefixedSchemaType
+                                + " to remove.");
+                        return;
+                    }
+                    throw e;
+                }
+            }
+        }
+    }
+
+    /** Gets the {@link VisibilityDocument} for the given prefixed schema type.     */
+    @Nullable
+    public VisibilityDocument getVisibility(@NonNull String prefixedSchemaType) {
+        return mVisibilityDocumentMap.get(prefixedSchemaType);
+    }
+
+    /**
+     * Loads all stored latest {@link VisibilityDocument} from Icing, and put them into
+     * {@link #mVisibilityDocumentMap}.
+     */
+    private void loadVisibilityDocumentMap() throws AppSearchException {
+        // Populate visibility settings set
+        List<String> cachedSchemaTypes = mAppSearchImpl.getAllPrefixedSchemaTypes();
+        for (int i = 0; i < cachedSchemaTypes.size(); i++) {
+            String prefixedSchemaType = cachedSchemaTypes.get(i);
+            String packageName = PrefixUtil.getPackageName(prefixedSchemaType);
+            if (packageName.equals(VISIBILITY_PACKAGE_NAME)) {
+                continue; // Our own package. Skip.
+            }
+
+            VisibilityDocument visibilityDocument;
+            try {
+                // Note: We use the other clients' prefixed schema type as ids
+                visibilityDocument = new VisibilityDocument(
+                        mAppSearchImpl.getDocument(
+                                VISIBILITY_PACKAGE_NAME,
+                                VISIBILITY_DATABASE_NAME,
+                                VisibilityDocument.NAMESPACE,
+                                /*id=*/ prefixedSchemaType,
+                                /*typePropertyPaths=*/ Collections.emptyMap()));
+            } catch (AppSearchException e) {
+                if (e.getResultCode() == RESULT_NOT_FOUND) {
+                    // The schema has all default setting and we won't have a VisibilityDocument for
+                    // it.
+                    continue;
+                }
+                // Otherwise, this is some other error we should pass up.
+                throw e;
+            }
+            mVisibilityDocumentMap.put(prefixedSchemaType, visibilityDocument);
+        }
+    }
+
+    /**
+     * Set the latest version of {@link VisibilityDocument} and its schema to AppSearch.
+     */
+    private void setLatestSchemaAndDocuments(@NonNull List<VisibilityDocument> migratedDocuments)
+            throws AppSearchException {
+        // The latest schema type doesn't exist yet. Add it. Set forceOverride true to
+        // delete old schema.
+        InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+                VISIBILITY_PACKAGE_NAME,
+                VISIBILITY_DATABASE_NAME,
+                Arrays.asList(VisibilityDocument.SCHEMA,
+                        VisibilityPermissionDocument.SCHEMA),
+                /*visibilityDocuments=*/ Collections.emptyList(),
+                /*forceOverride=*/ true,
+                /*version=*/ VisibilityDocument.SCHEMA_VERSION_LATEST,
+                /*setSchemaStatsBuilder=*/ null);
+        if (!internalSetSchemaResponse.isSuccess()) {
+            // Impossible case, we just set forceOverride to be true, we should never
+            // fail in incompatible changes.
+            throw new AppSearchException(AppSearchResult.RESULT_INTERNAL_ERROR,
+                    internalSetSchemaResponse.getErrorMessage());
+        }
+        for (int i = 0; i < migratedDocuments.size(); i++) {
+            VisibilityDocument migratedDocument = migratedDocuments.get(i);
+            mVisibilityDocumentMap.put(migratedDocument.getId(), migratedDocument);
+            mAppSearchImpl.putDocument(
+                    VISIBILITY_PACKAGE_NAME,
+                    VISIBILITY_DATABASE_NAME,
+                    migratedDocument,
+                    /*sendChangeNotifications=*/ false,
+                    /*logger=*/ null);
+        }
+    }
 }
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0.java
new file mode 100644
index 0000000..edff437
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0.java
@@ -0,0 +1,257 @@
+/*
+ * Copyright 2022 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.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
+import androidx.appsearch.app.AppSearchResult;
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.collection.ArrayMap;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * The helper class to store Visibility Document information of version 0 and handle the upgrade to
+ * version 1.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class VisibilityStoreMigrationHelperFromV0 {
+    private VisibilityStoreMigrationHelperFromV0() {}
+    /** Prefix to add to all visibility document ids. IcingSearchEngine doesn't allow empty ids. */
+    private static final String DEPRECATED_ID_PREFIX = "uri:";
+
+    /** Schema type for documents that hold AppSearch's metadata, e.g. visibility settings */
+    @VisibleForTesting
+    static final String DEPRECATED_VISIBILITY_SCHEMA_TYPE = "VisibilityType";
+
+    /**
+     * Property that holds the list of platform-hidden schemas, as part of the visibility settings.
+     */
+    @VisibleForTesting
+    static final String DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY =
+            "notPlatformSurfaceable";
+
+    /** Property that holds nested documents of package accessible schemas. */
+    @VisibleForTesting
+    static final String DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY = "packageAccessible";
+
+    /**
+     * Property that holds the list of platform-hidden schemas, as part of the visibility settings.
+     */
+    @VisibleForTesting
+    static final String DEPRECATED_PACKAGE_SCHEMA_TYPE = "PackageAccessibleType";
+
+    /** Property that holds the prefixed schema type that is accessible by some package. */
+    @VisibleForTesting
+    static final String DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY = "accessibleSchema";
+
+    /** Property that holds the package name that can access a schema. */
+    @VisibleForTesting
+    static final String DEPRECATED_PACKAGE_NAME_PROPERTY = "packageName";
+
+    /** Property that holds the SHA 256 certificate of the app that can access a schema. */
+    @VisibleForTesting
+    static final String DEPRECATED_SHA_256_CERT_PROPERTY = "sha256Cert";
+
+//    The visibility schema of version 0.
+//---------------------------------------------------------------------------------------------
+//    Schema of DEPRECATED_VISIBILITY_SCHEMA_TYPE:
+//    new AppSearchSchema.Builder(
+//            DEPRECATED_VISIBILITY_SCHEMA_TYPE)
+//            .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+//                    DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY)
+//                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+//                    .build())
+//            .addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(
+//                    DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY,
+//                    DEPRECATED_PACKAGE_SCHEMA_TYPE)
+//                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+//                    .build())
+//            .build();
+//    Schema of DEPRECATED_PACKAGE_SCHEMA_TYPE:
+//    new AppSearchSchema.Builder(DEPRECATED_PACKAGE_SCHEMA_TYPE)
+//        .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+//                 DEPRECATED_PACKAGE_NAME_PROPERTY)
+//                .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+//                .build())
+//        .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder(
+//                DEPRECATED_SHA_256_CERT_PROPERTY)
+//                .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+//                .build())
+//        .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+//                DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY)
+//                .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+//                .build())
+//        .build();
+//---------------------------------------------------------------------------------------------
+
+    /** Returns whether the given schema type is deprecated.     */
+    static boolean isDeprecatedType(@NonNull String schemaType) {
+        return schemaType.equals(DEPRECATED_VISIBILITY_SCHEMA_TYPE)
+                || schemaType.equals(DEPRECATED_PACKAGE_SCHEMA_TYPE);
+    }
+
+    /**
+     * Adds a prefix to create a deprecated visibility document's id.
+     *
+     * @param packageName Package to which the visibility doc refers.
+     * @param databaseName Database to which the visibility doc refers.
+     * @return deprecated visibility document's id.
+     */
+    @NonNull
+    static String getDeprecatedVisibilityDocumentId(
+            @NonNull String packageName, @NonNull String databaseName) {
+        return DEPRECATED_ID_PREFIX + PrefixUtil.createPrefix(packageName, databaseName);
+    }
+
+    /**  Reads all stored deprecated Visibility Document in version 0 from icing. */
+    static List<GenericDocument> getVisibilityDocumentsInVersion0(
+            @NonNull GetSchemaResponse getSchemaResponse,
+            @NonNull AppSearchImpl appSearchImpl) throws AppSearchException {
+        if (!hasDeprecatedType(getSchemaResponse)) {
+            return new ArrayList<>();
+        }
+        Map<String, Set<String>> packageToDatabases = appSearchImpl.getPackageToDatabases();
+        List<GenericDocument> deprecatedDocuments = new ArrayList<>(packageToDatabases.size());
+        for (Map.Entry<String, Set<String>> entry : packageToDatabases.entrySet()) {
+            String packageName = entry.getKey();
+            if (packageName.equals(VisibilityStore.VISIBILITY_PACKAGE_NAME)) {
+                continue; // Our own package. Skip.
+            }
+            for (String databaseName : entry.getValue()) {
+                try {
+                    // Note: We use the other clients' prefixed names as ids
+                    deprecatedDocuments.add(appSearchImpl.getDocument(
+                            VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                            VisibilityStore.VISIBILITY_DATABASE_NAME,
+                            VisibilityDocument.NAMESPACE,
+                            getDeprecatedVisibilityDocumentId(packageName, databaseName),
+                            /*typePropertyPaths=*/ Collections.emptyMap()));
+                } catch (AppSearchException e) {
+                    if (e.getResultCode() == AppSearchResult.RESULT_NOT_FOUND) {
+                        // TODO(b/172068212): This indicates some desync error. We were expecting a
+                        //  document, but didn't find one. Should probably reset AppSearch instead
+                        //  of ignoring it.
+                        continue;
+                    }
+                    // Otherwise, this is some other error we should pass up.
+                    throw e;
+                }
+            }
+        }
+        return deprecatedDocuments;
+    }
+
+    /**
+     * Converts the given list of deprecated Visibility Documents into a Map of {@code
+     * <PrefixedSchemaType, VisibilityDocument.Builder of the latest version>}.
+     *
+     * @param visibilityDocumentV0s          The deprecated Visibility Document we found.
+     */
+    @NonNull
+    static List<VisibilityDocumentV1> toVisibilityDocumentV1(
+            @NonNull List<GenericDocument> visibilityDocumentV0s) {
+        Map<String, VisibilityDocumentV1.Builder> documentBuilderMap = new ArrayMap<>();
+
+        // Set all visibility information into documentBuilderMap
+        for (int i = 0; i < visibilityDocumentV0s.size(); i++) {
+            GenericDocument visibilityDocumentV0 = visibilityDocumentV0s.get(i);
+
+            // Read not displayed by system property field.
+            String[] notDisplayedBySystemSchemas = visibilityDocumentV0.getPropertyStringArray(
+                    DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY);
+            if (notDisplayedBySystemSchemas != null) {
+                for (String notDisplayedBySystemSchema : notDisplayedBySystemSchemas) {
+                    // SetSchemaRequest.Builder.build() make sure all schemas that has visibility
+                    // setting must present in the requests.
+                    VisibilityDocumentV1.Builder visibilityBuilder = getOrCreateBuilder(
+                            documentBuilderMap, notDisplayedBySystemSchema);
+                    visibilityBuilder.setNotDisplayedBySystem(true);
+                }
+            }
+
+            // Read visible to packages field.
+            GenericDocument[] deprecatedPackageDocuments = visibilityDocumentV0
+                    .getPropertyDocumentArray(DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY);
+            if (deprecatedPackageDocuments != null) {
+                for (GenericDocument deprecatedPackageDocument : deprecatedPackageDocuments) {
+                    String prefixedSchemaType = deprecatedPackageDocument
+                            .getPropertyString(DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY);
+                    VisibilityDocumentV1.Builder visibilityBuilder = getOrCreateBuilder(
+                            documentBuilderMap, prefixedSchemaType);
+                    visibilityBuilder.addVisibleToPackage(new PackageIdentifier(
+                            deprecatedPackageDocument.getPropertyString(
+                                    DEPRECATED_PACKAGE_NAME_PROPERTY),
+                            deprecatedPackageDocument.getPropertyBytes(
+                                    DEPRECATED_SHA_256_CERT_PROPERTY)));
+                }
+            }
+        }
+        List<VisibilityDocumentV1> visibilityDocumentsV1 =
+                new ArrayList<>(documentBuilderMap.size());
+        for (Map.Entry<String, VisibilityDocumentV1.Builder> entry :
+                documentBuilderMap.entrySet()) {
+            visibilityDocumentsV1.add(entry.getValue().build());
+        }
+        return visibilityDocumentsV1;
+    }
+
+    /**
+     * Return whether the database maybe has the oldest version of deprecated schema.
+     *
+     * <p> Since the current version number is 0, it is possible that the database is just empty
+     * and it return 0 as the default version number. So we need to check if the deprecated document
+     * presents to trigger the migration.
+     */
+    private static boolean hasDeprecatedType(@NonNull GetSchemaResponse getSchemaResponse) {
+        for (AppSearchSchema schema : getSchemaResponse.getSchemas()) {
+            if (VisibilityStoreMigrationHelperFromV0
+                    .isDeprecatedType(schema.getSchemaType())) {
+                // Found deprecated type, we need to migrate visibility Document. And it's
+                // not possible for us to find the latest visibility schema.
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @NonNull
+    private static VisibilityDocumentV1.Builder getOrCreateBuilder(
+            @NonNull Map<String, VisibilityDocumentV1.Builder> documentBuilderMap,
+            @NonNull String schemaType) {
+        VisibilityDocumentV1.Builder builder = documentBuilderMap.get(schemaType);
+        if (builder == null) {
+            builder = new VisibilityDocumentV1.Builder(/*id=*/ schemaType);
+            documentBuilderMap.put(schemaType, builder);
+        }
+        return builder;
+    }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1.java
new file mode 100644
index 0000000..cd3e2c5
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2022 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.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
+import androidx.appsearch.app.AppSearchResult;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.SetSchemaRequest;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.collection.ArraySet;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * The helper class to store Visibility Document information of version 1 and handle the upgrade to
+ * latest version
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class VisibilityStoreMigrationHelperFromV1 {
+    private VisibilityStoreMigrationHelperFromV1() {}
+
+    /** Enum in {@link androidx.appsearch.app.SetSchemaRequest} AppSearch supported role. */
+    @VisibleForTesting
+    static final int DEPRECATED_ROLE_HOME = 1;
+
+    /** Enum in {@link androidx.appsearch.app.SetSchemaRequest} AppSearch supported role. */
+    @VisibleForTesting
+    static final int DEPRECATED_ROLE_ASSISTANT = 2;
+
+    /**  Reads all stored deprecated Visibility Document in version 0 from icing. */
+    static List<VisibilityDocumentV1> getVisibilityDocumentsInVersion1(
+            @NonNull AppSearchImpl appSearchImpl) throws AppSearchException {
+        List<String> allPrefixedSchemaTypes = appSearchImpl.getAllPrefixedSchemaTypes();
+        List<VisibilityDocumentV1> visibilityDocumentV1s =
+                new ArrayList<>(allPrefixedSchemaTypes.size());
+        for (int i = 0; i < allPrefixedSchemaTypes.size(); i++) {
+            String packageName = PrefixUtil.getPackageName(allPrefixedSchemaTypes.get(i));
+            if (packageName.equals(VisibilityStore.VISIBILITY_PACKAGE_NAME)) {
+                continue; // Our own package. Skip.
+            }
+            try {
+                // Note: We use the prefixed schema type as ids
+                visibilityDocumentV1s.add(new VisibilityDocumentV1(appSearchImpl.getDocument(
+                        VisibilityStore.VISIBILITY_PACKAGE_NAME,
+                        VisibilityStore.VISIBILITY_DATABASE_NAME,
+                        VisibilityDocument.NAMESPACE,
+                        allPrefixedSchemaTypes.get(i),
+                        /*typePropertyPaths=*/ Collections.emptyMap())));
+            } catch (AppSearchException e) {
+                if (e.getResultCode() == AppSearchResult.RESULT_NOT_FOUND) {
+                    // TODO(b/172068212): This indicates some desync error. We were expecting a
+                    //  document, but didn't find one. Should probably reset AppSearch instead
+                    //  of ignoring it.
+                    continue;
+                }
+                // Otherwise, this is some other error we should pass up.
+                throw e;
+            }
+        }
+        return visibilityDocumentV1s;
+    }
+
+    /**
+     * Converts the given list of deprecated Visibility Documents into a Map of {@code
+     * <PrefixedSchemaType, VisibilityDocument.Builder of the latest version>}.
+     *
+     * @param visibilityDocumentV1s          The deprecated Visibility Document we found.
+     */
+    @NonNull
+    static List<VisibilityDocument> toVisibilityDocumentsV2(
+            @NonNull List<VisibilityDocumentV1> visibilityDocumentV1s) {
+        List<VisibilityDocument> latestVisibilityDocuments =
+                new ArrayList<>(visibilityDocumentV1s.size());
+        for (int i = 0; i < visibilityDocumentV1s.size(); i++) {
+            VisibilityDocumentV1 visibilityDocumentV1 = visibilityDocumentV1s.get(i);
+            Set<Set<Integer>> visibleToPermissions = new ArraySet<>();
+            Set<Integer> deprecatedVisibleToRoles = visibilityDocumentV1.getVisibleToRoles();
+            if (deprecatedVisibleToRoles != null) {
+                for (int deprecatedVisibleToRole : deprecatedVisibleToRoles) {
+                    Set<Integer> visibleToPermission = new ArraySet<>();
+                    switch (deprecatedVisibleToRole) {
+                        case DEPRECATED_ROLE_HOME:
+                            visibleToPermission.add(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA);
+                            break;
+                        case DEPRECATED_ROLE_ASSISTANT:
+                            visibleToPermission.add(SetSchemaRequest
+                                    .READ_ASSISTANT_APP_SEARCH_DATA);
+                            break;
+                    }
+                    visibleToPermissions.add(visibleToPermission);
+                }
+            }
+            Set<Integer> deprecatedVisibleToPermissions =
+                    visibilityDocumentV1.getVisibleToPermissions();
+            if (deprecatedVisibleToPermissions != null) {
+                visibleToPermissions.add(deprecatedVisibleToPermissions);
+            }
+
+            Set<PackageIdentifier> packageIdentifiers = new ArraySet<>();
+            String[] packageNames = visibilityDocumentV1.getPackageNames();
+            byte[][] sha256Certs = visibilityDocumentV1.getSha256Certs();
+            if (packageNames.length == sha256Certs.length) {
+                for (int j = 0; j < packageNames.length; j++) {
+                    packageIdentifiers.add(new PackageIdentifier(packageNames[j], sha256Certs[j]));
+                }
+            }
+            VisibilityDocument.Builder latestVisibilityDocumentBuilder =
+                    new VisibilityDocument.Builder(visibilityDocumentV1.getId())
+                    .setNotDisplayedBySystem(visibilityDocumentV1.isNotDisplayedBySystem())
+                    .addVisibleToPackages(packageIdentifiers);
+            if (!visibleToPermissions.isEmpty()) {
+                latestVisibilityDocumentBuilder.setVisibleToPermissions(visibleToPermissions);
+            }
+            latestVisibilityDocuments.add(latestVisibilityDocumentBuilder.build());
+        }
+        return latestVisibilityDocuments;
+    }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityUtil.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityUtil.java
new file mode 100644
index 0000000..ea04968
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityUtil.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2022 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.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.core.util.Preconditions;
+
+/**
+ * Utilities for working with {@link VisibilityChecker} and {@link VisibilityStore}.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class VisibilityUtil {
+    private VisibilityUtil() {}
+
+    /**
+     * Determines whether the calling package has access to the given prefixed schema type.
+     *
+     * <p>Correctly handles access to own data and the situation that visibilityStore and
+     * visibilityChecker are not configured.
+     *
+     * @param callerAccess      Visibility access info of the calling app
+     * @param targetPackageName The package name of the app that owns the data.
+     * @param prefixedSchema    The prefixed schema type the caller wants to access.
+     * @param visibilityStore   Store for visibility information. If not provided, only
+     *                          access to own data will be allowed.
+     * @param visibilityChecker Checker for visibility access. If not provided, only access to
+     *                          own data will be allowed.
+     * @return Whether access by the caller to this prefixed schema should be allowed.
+     */
+    public static boolean isSchemaSearchableByCaller(
+            @NonNull CallerAccess callerAccess,
+            @NonNull String targetPackageName,
+            @NonNull String prefixedSchema,
+            @Nullable VisibilityStore visibilityStore,
+            @Nullable VisibilityChecker visibilityChecker) {
+        Preconditions.checkNotNull(callerAccess);
+        Preconditions.checkNotNull(targetPackageName);
+        Preconditions.checkNotNull(prefixedSchema);
+
+        if (callerAccess.getCallingPackageName().equals(targetPackageName)) {
+            return true;  // Everyone is always allowed to retrieve their own data.
+        }
+        if (visibilityStore == null || visibilityChecker == null) {
+            return false;  // No visibility is configured at this time; no other access possible.
+        }
+        return visibilityChecker.isSchemaSearchableByCaller(
+                callerAccess,
+                targetPackageName,
+                prefixedSchema,
+                visibilityStore);
+    }
+}
diff --git a/appsearch/appsearch-platform-storage/api/current.txt b/appsearch/appsearch-platform-storage/api/current.txt
index 881789d..0b3b2e6 100644
--- a/appsearch/appsearch-platform-storage/api/current.txt
+++ b/appsearch/appsearch-platform-storage/api/current.txt
@@ -2,8 +2,10 @@
 package androidx.appsearch.platformstorage {
 
   @RequiresApi(android.os.Build.VERSION_CODES.S) public final class PlatformStorage {
-    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
-    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+    method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+    method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
   }
 
   public static final class PlatformStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-platform-storage/api/public_plus_experimental_current.txt b/appsearch/appsearch-platform-storage/api/public_plus_experimental_current.txt
index 881789d..0b3b2e6 100644
--- a/appsearch/appsearch-platform-storage/api/public_plus_experimental_current.txt
+++ b/appsearch/appsearch-platform-storage/api/public_plus_experimental_current.txt
@@ -2,8 +2,10 @@
 package androidx.appsearch.platformstorage {
 
   @RequiresApi(android.os.Build.VERSION_CODES.S) public final class PlatformStorage {
-    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
-    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+    method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+    method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
   }
 
   public static final class PlatformStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-platform-storage/api/restricted_current.txt b/appsearch/appsearch-platform-storage/api/restricted_current.txt
index 881789d..0b3b2e6 100644
--- a/appsearch/appsearch-platform-storage/api/restricted_current.txt
+++ b/appsearch/appsearch-platform-storage/api/restricted_current.txt
@@ -2,8 +2,10 @@
 package androidx.appsearch.platformstorage {
 
   @RequiresApi(android.os.Build.VERSION_CODES.S) public final class PlatformStorage {
-    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
-    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+    method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+    method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
   }
 
   public static final class PlatformStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-platform-storage/build.gradle b/appsearch/appsearch-platform-storage/build.gradle
index 73bb4b7..e4c1f37 100644
--- a/appsearch/appsearch-platform-storage/build.gradle
+++ b/appsearch/appsearch-platform-storage/build.gradle
@@ -25,8 +25,9 @@
     api("androidx.annotation:annotation:1.1.0")
 
     implementation project(":appsearch:appsearch")
+    implementation('androidx.collection:collection:1.2.0')
     implementation("androidx.concurrent:concurrent-futures:1.0.0")
-    implementation("androidx.core:core:1.2.0")
+    implementation("androidx.core:core:1.7.0")
 
     androidTestImplementation(libs.testCore)
     androidTestImplementation(libs.testRules)
diff --git a/appsearch/appsearch-platform-storage/lint-baseline.xml b/appsearch/appsearch-platform-storage/lint-baseline.xml
index d977a53..e1f4abe 100644
--- a/appsearch/appsearch-platform-storage/lint-baseline.xml
+++ b/appsearch/appsearch-platform-storage/lint-baseline.xml
@@ -1,158 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="cli" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `Builder`"
-        errorLine1="                new PlatformStorage.SearchContext.Builder("
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `build`"
-        errorLine1="                        /*databaseName=*/&quot;dbName&quot;).build();"
-        errorLine2="                                                   ~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `getDatabaseName`"
-        errorLine1="        assertThat(searchContext.getDatabaseName()).isEqualTo(&quot;dbName&quot;);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `Builder`"
-        errorLine1="        PlatformStorage.SearchContext searchContext = new PlatformStorage.SearchContext.Builder("
-        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `setWorkerExecutor`"
-        errorLine1="                .setWorkerExecutor(executor)"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `build`"
-        errorLine1="                .build();"
-        errorLine2="                 ~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `getWorkerExecutor`"
-        errorLine1="        assertThat(searchContext.getWorkerExecutor()).isEqualTo(executor);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `getDatabaseName`"
-        errorLine1="        assertThat(searchContext.getDatabaseName()).isEqualTo(&quot;dbName&quot;);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `Builder`"
-        errorLine1="        PlatformStorage.SearchContext searchContext = new PlatformStorage.SearchContext.Builder("
-        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `build`"
-        errorLine1="                .build();"
-        errorLine2="                 ~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `getWorkerExecutor`"
-        errorLine1="        assertThat(searchContext.getWorkerExecutor()).isNotNull();"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `getDatabaseName`"
-        errorLine1="        assertThat(searchContext.getDatabaseName()).isEqualTo(&quot;dbName&quot;);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `Builder`"
-        errorLine1="                () -> new PlatformStorage.SearchContext.Builder("
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `build`"
-        errorLine1="                        &quot;testDatabaseNameEndWith/&quot;).build());"
-        errorLine2="                                                    ~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `Builder`"
-        errorLine1="                () -> new PlatformStorage.SearchContext.Builder("
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 31 (current min is 14): `build`"
-        errorLine1="                        &quot;/testDatabaseNameStartWith&quot;).build());"
-        errorLine2="                                                      ~~~~~">
-        <location
-            file="src/androidTest/java/androidx/appsearch/platformstorage/PlatformStorageTest.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: AppSearchResult.RESULT_OK, AppSearchResult.RESULT_UNKNOWN_ERROR, AppSearchResult.RESULT_INTERNAL_ERROR, AppSearchResult.RESULT_INVALID_ARGUMENT, AppSearchResult.RESULT_IO_ERROR, AppSearchResult.RESULT_OUT_OF_SPACE, AppSearchResult.RESULT_NOT_FOUND, AppSearchResult.RESULT_INVALID_SCHEMA, AppSearchResult.RESULT_SECURITY_ERROR"
-        errorLine1="                platformResult.getResultCode(), platformResult.getErrorMessage());"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverter.java"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="WrongConstant"
@@ -166,229 +13,13 @@
     <issue
         id="WrongConstant"
         message="Must be one of: AppSearchResult.RESULT_OK, AppSearchResult.RESULT_UNKNOWN_ERROR, AppSearchResult.RESULT_INTERNAL_ERROR, AppSearchResult.RESULT_INVALID_ARGUMENT, AppSearchResult.RESULT_IO_ERROR, AppSearchResult.RESULT_OUT_OF_SPACE, AppSearchResult.RESULT_NOT_FOUND, AppSearchResult.RESULT_INVALID_SCHEMA, AppSearchResult.RESULT_SECURITY_ERROR"
-        errorLine1="                    failure.getValue().getResultCode(),"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: AppSearchResult.RESULT_OK, AppSearchResult.RESULT_UNKNOWN_ERROR, AppSearchResult.RESULT_INTERNAL_ERROR, AppSearchResult.RESULT_INVALID_ARGUMENT, AppSearchResult.RESULT_IO_ERROR, AppSearchResult.RESULT_OUT_OF_SPACE, AppSearchResult.RESULT_NOT_FOUND, AppSearchResult.RESULT_INVALID_SCHEMA, AppSearchResult.RESULT_SECURITY_ERROR"
-        errorLine1="                                        result.getResultCode(), result.getErrorMessage()));"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: AppSearchResult.RESULT_OK, AppSearchResult.RESULT_UNKNOWN_ERROR, AppSearchResult.RESULT_INTERNAL_ERROR, AppSearchResult.RESULT_INVALID_ARGUMENT, AppSearchResult.RESULT_IO_ERROR, AppSearchResult.RESULT_OUT_OF_SPACE, AppSearchResult.RESULT_NOT_FOUND, AppSearchResult.RESULT_INVALID_SCHEMA, AppSearchResult.RESULT_SECURITY_ERROR"
-        errorLine1="                                        result.getResultCode(), result.getErrorMessage()));"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(stringProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: StringPropertyConfig.INDEXING_TYPE_NONE, StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS, StringPropertyConfig.INDEXING_TYPE_PREFIXES"
-        errorLine1="                    .setIndexingType(stringProperty.getIndexingType())"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: StringPropertyConfig.TOKENIZER_TYPE_NONE, StringPropertyConfig.TOKENIZER_TYPE_PLAIN"
-        errorLine1="                    .setTokenizerType(stringProperty.getTokenizerType())"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(jetpackProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(jetpackProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(jetpackProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(jetpackProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(documentProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(stringProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: StringPropertyConfig.INDEXING_TYPE_NONE, StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS, StringPropertyConfig.INDEXING_TYPE_PREFIXES"
-        errorLine1="                    .setIndexingType(stringProperty.getIndexingType())"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: StringPropertyConfig.TOKENIZER_TYPE_NONE, StringPropertyConfig.TOKENIZER_TYPE_PLAIN"
-        errorLine1="                    .setTokenizerType(stringProperty.getTokenizerType())"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(platformProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(platformProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(platformProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(platformProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PropertyConfig.CARDINALITY_REPEATED, PropertyConfig.CARDINALITY_OPTIONAL, PropertyConfig.CARDINALITY_REQUIRED"
-        errorLine1="                    .setCardinality(documentProperty.getCardinality())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: AppSearchResult.RESULT_OK, AppSearchResult.RESULT_UNKNOWN_ERROR, AppSearchResult.RESULT_INTERNAL_ERROR, AppSearchResult.RESULT_INVALID_ARGUMENT, AppSearchResult.RESULT_IO_ERROR, AppSearchResult.RESULT_OUT_OF_SPACE, AppSearchResult.RESULT_NOT_FOUND, AppSearchResult.RESULT_INVALID_SCHEMA, AppSearchResult.RESULT_SECURITY_ERROR"
-        errorLine1="                        new AppSearchException(result.getResultCode(), result.getErrorMessage()));"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/SearchResultsImpl.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: AppSearchResult.RESULT_OK, AppSearchResult.RESULT_UNKNOWN_ERROR, AppSearchResult.RESULT_INTERNAL_ERROR, AppSearchResult.RESULT_INVALID_ARGUMENT, AppSearchResult.RESULT_IO_ERROR, AppSearchResult.RESULT_OUT_OF_SPACE, AppSearchResult.RESULT_NOT_FOUND, AppSearchResult.RESULT_INVALID_SCHEMA, AppSearchResult.RESULT_SECURITY_ERROR"
-        errorLine1="                        platformResult.getResultCode(), platformResult.getErrorMessage()));"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="                                            namespaceResult.getResultCode(),"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appsearch/platformstorage/SearchSessionImpl.java"/>
     </issue>
 
     <issue
-        id="WrongConstant"
-        message="Must be one of: SearchSpec.TERM_MATCH_EXACT_ONLY, SearchSpec.TERM_MATCH_PREFIX"
-        errorLine1="                .setTermMatch(jetpackSearchSpec.getTermMatch())"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SearchSpecToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: SearchSpec.RANKING_STRATEGY_NONE, SearchSpec.RANKING_STRATEGY_DOCUMENT_SCORE, SearchSpec.RANKING_STRATEGY_CREATION_TIMESTAMP, SearchSpec.RANKING_STRATEGY_RELEVANCE_SCORE, SearchSpec.RANKING_STRATEGY_USAGE_COUNT, SearchSpec.RANKING_STRATEGY_USAGE_LAST_USED_TIMESTAMP, SearchSpec.RANKING_STRATEGY_SYSTEM_USAGE_COUNT, SearchSpec.RANKING_STRATEGY_SYSTEM_USAGE_LAST_USED_TIMESTAMP"
-        errorLine1="                .setRankingStrategy(jetpackSearchSpec.getRankingStrategy())"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SearchSpecToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: SearchSpec.ORDER_DESCENDING, SearchSpec.ORDER_ASCENDING"
-        errorLine1="                .setOrder(jetpackSearchSpec.getOrder())"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SearchSpecToPlatformConverter.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one or more of: SearchSpec.GROUPING_TYPE_PER_PACKAGE, SearchSpec.GROUPING_TYPE_PER_NAMESPACE"
-        errorLine1="                    jetpackSearchSpec.getResultGroupingTypeFlags(),"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/appsearch/platformstorage/converter/SearchSpecToPlatformConverter.java"/>
-    </issue>
-
-    <issue
         id="ClassVerificationFailure"
         message="This call references a method added in API level 33; however, the containing class androidx.appsearch.platformstorage.converter.GetSchemaResponseToPlatformConverter is reachable from earlier API levels and will fail run-time class verification."
         errorLine1="                    platformResponse.getSchemaTypesNotDisplayedBySystem()) {"
@@ -418,8 +49,8 @@
     <issue
         id="ClassVerificationFailure"
         message="This call references a method added in API level 33; however, the containing class androidx.appsearch.platformstorage.GlobalSearchSessionImpl is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            mPlatformSession.getByDocumentId(packageName, databaseName,"
-        errorLine2="                             ~~~~~~~~~~~~~~~">
+        errorLine1="        mPlatformSession.getByDocumentId(packageName, databaseName,"
+        errorLine2="                         ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java"/>
     </issue>
@@ -427,8 +58,8 @@
     <issue
         id="ClassVerificationFailure"
         message="This call references a method added in API level 33; however, the containing class androidx.appsearch.platformstorage.GlobalSearchSessionImpl is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            mPlatformSession.getSchema("
-        errorLine2="                             ~~~~~~~~~">
+        errorLine1="        mPlatformSession.getSchema("
+        errorLine2="                         ~~~~~~~~~">
         <location
             file="src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java"/>
     </issue>
@@ -436,8 +67,8 @@
     <issue
         id="ClassVerificationFailure"
         message="This call references a method added in API level 33; however, the containing class androidx.appsearch.platformstorage.GlobalSearchSessionImpl is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    mPlatformSession.registerObserverCallback("
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="                mPlatformSession.registerObserverCallback("
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java"/>
     </issue>
@@ -445,8 +76,8 @@
     <issue
         id="ClassVerificationFailure"
         message="This call references a method added in API level 33; however, the containing class androidx.appsearch.platformstorage.GlobalSearchSessionImpl is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    mPlatformSession.unregisterObserverCallback(targetPackageName,"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="                mPlatformSession.unregisterObserverCallback(targetPackageName, frameworkCallback);"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java"/>
     </issue>
diff --git a/appsearch/appsearch-platform-storage/src/androidTest/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverterTest.java b/appsearch/appsearch-platform-storage/src/androidTest/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverterTest.java
new file mode 100644
index 0000000..3ee507c
--- /dev/null
+++ b/appsearch/appsearch-platform-storage/src/androidTest/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverterTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2022 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.appsearch.platformstorage.converter;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertThrows;
+
+import android.os.Build;
+
+import androidx.appsearch.app.AppSearchResult;
+import androidx.concurrent.futures.ResolvableFuture;
+import androidx.test.filters.SdkSuppress;
+
+import org.junit.Test;
+
+import java.util.concurrent.ExecutionException;
+
+public class AppSearchResultToPlatformConverterTest {
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+    public void testPlatformAppSearchResultToJetpack_catchException() {
+        android.app.appsearch.AppSearchResult<String> platformResult =
+                android.app.appsearch.AppSearchResult.newSuccessfulResult("42");
+        AppSearchResult<Integer> jetpackResult =
+                AppSearchResultToPlatformConverter.platformAppSearchResultToJetpack(
+                        platformResult,
+                        platformValue -> {
+                            throw new IllegalArgumentException("Test exception");
+                        }
+                );
+        assertThat(jetpackResult.getResultCode())
+                .isEqualTo(AppSearchResult.RESULT_INVALID_ARGUMENT);
+        assertThat(jetpackResult.getErrorMessage()).contains("Test exception");
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+    public void testPlatformAppSearchResultToFuture_catchException() {
+        android.app.appsearch.AppSearchResult<String> platformResult =
+                android.app.appsearch.AppSearchResult.newSuccessfulResult("42");
+        ResolvableFuture<Integer> future = ResolvableFuture.create();
+        AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+                platformResult,
+                future,
+                platformValue -> {
+                    throw new IllegalArgumentException("Test exception");
+                }
+        );
+        ExecutionException e = assertThrows(ExecutionException.class, future::get);
+        assertThat(e).hasCauseThat().isInstanceOf(IllegalArgumentException.class);
+        assertThat(e).hasCauseThat().hasMessageThat().contains("Test exception");
+    }
+}
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
index 34ab614..336b213 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
@@ -17,6 +17,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.appsearch.app.Features;
+import androidx.core.os.BuildCompat;
 
 /**
  * An implementation of {@link Features}. Feature availability is dependent on Android API
@@ -25,16 +26,23 @@
 final class FeaturesImpl implements Features {
 
     @Override
+    // TODO(b/201316758): Remove once BuildCompat.isAtLeastT is removed
+    @BuildCompat.PrereleaseSdkCheck
     public boolean isFeatureSupported(@NonNull String feature) {
         if (Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH.equals(feature)) {
-            // TODO(b/201316758) : Update to reflect support in Android T+ once this feature is
-            // synced over into service-appsearch.
-            return false;
+            return BuildCompat.isAtLeastT();
         }
-        if (Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER.equals(feature)) {
-            // TODO(b/201316758) : Update to reflect support in Android T+ once this feature is
-            // synced over into service-appsearch.
-            return false;
+        if (Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK.equals(feature)) {
+            return BuildCompat.isAtLeastT();
+        }
+        if (Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA.equals(feature)) {
+            return BuildCompat.isAtLeastT();
+        }
+        if (Features.GLOBAL_SEARCH_SESSION_GET_BY_ID.equals(feature)) {
+            return BuildCompat.isAtLeastT();
+        }
+        if (Features.ADD_PERMISSIONS_AND_GET_VISIBILITY.equals(feature)) {
+            return BuildCompat.isAtLeastT();
         }
         return false;
     }
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java
index 0984e13..6ed63ee 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java
@@ -15,31 +15,48 @@
  */
 package androidx.appsearch.platformstorage;
 
+import android.annotation.SuppressLint;
 import android.os.Build;
 
+import androidx.annotation.GuardedBy;
 import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
+import androidx.appsearch.app.AppSearchBatchResult;
 import androidx.appsearch.app.Features;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetByDocumentIdRequest;
+import androidx.appsearch.app.GetSchemaResponse;
 import androidx.appsearch.app.GlobalSearchSession;
 import androidx.appsearch.app.ReportSystemUsageRequest;
 import androidx.appsearch.app.SearchResults;
 import androidx.appsearch.app.SearchSpec;
-import androidx.appsearch.observer.AppSearchObserverCallback;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.observer.DocumentChangeInfo;
+import androidx.appsearch.observer.ObserverCallback;
 import androidx.appsearch.observer.ObserverSpec;
+import androidx.appsearch.observer.SchemaChangeInfo;
 import androidx.appsearch.platformstorage.converter.AppSearchResultToPlatformConverter;
+import androidx.appsearch.platformstorage.converter.GenericDocumentToPlatformConverter;
+import androidx.appsearch.platformstorage.converter.GetSchemaResponseToPlatformConverter;
+import androidx.appsearch.platformstorage.converter.ObserverSpecToPlatformConverter;
 import androidx.appsearch.platformstorage.converter.RequestToPlatformConverter;
 import androidx.appsearch.platformstorage.converter.SearchSpecToPlatformConverter;
+import androidx.appsearch.platformstorage.util.BatchResultCallbackAdapter;
+import androidx.collection.ArrayMap;
 import androidx.concurrent.futures.ResolvableFuture;
+import androidx.core.os.BuildCompat;
 import androidx.core.util.Preconditions;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
+import java.util.Map;
 import java.util.concurrent.Executor;
 
 /**
  * An implementation of {@link androidx.appsearch.app.GlobalSearchSession} which proxies to a
  * platform {@link android.app.appsearch.GlobalSearchSession}.
+ *
  * @hide
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -49,6 +66,11 @@
     private final Executor mExecutor;
     private final Features mFeatures;
 
+    // Management of observer callbacks.
+    @GuardedBy("mObserverCallbacksLocked")
+    private final Map<ObserverCallback, android.app.appsearch.observer.ObserverCallback>
+            mObserverCallbacksLocked = new ArrayMap<>();
+
     GlobalSearchSessionImpl(
             @NonNull android.app.appsearch.GlobalSearchSession platformSession,
             @NonNull Executor executor,
@@ -58,6 +80,29 @@
         mFeatures = Preconditions.checkNotNull(features);
     }
 
+    @BuildCompat.PrereleaseSdkCheck
+    @NonNull
+    @Override
+    public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
+            @NonNull String packageName, @NonNull String databaseName,
+            @NonNull GetByDocumentIdRequest request) {
+        if (!BuildCompat.isAtLeastT()) {
+            throw new UnsupportedOperationException(Features.GLOBAL_SEARCH_SESSION_GET_BY_ID
+                    + " is not supported on this AppSearch implementation.");
+        }
+        Preconditions.checkNotNull(packageName);
+        Preconditions.checkNotNull(databaseName);
+        Preconditions.checkNotNull(request);
+        ResolvableFuture<AppSearchBatchResult<String, GenericDocument>> future =
+                ResolvableFuture.create();
+        mPlatformSession.getByDocumentId(packageName, databaseName,
+                RequestToPlatformConverter.toPlatformGetByDocumentIdRequest(request),
+                mExecutor,
+                new BatchResultCallbackAdapter<>(
+                        future, GenericDocumentToPlatformConverter::toJetpackGenericDocument));
+        return future;
+    }
+
     @Override
     @NonNull
     public SearchResults search(
@@ -74,7 +119,8 @@
 
     @NonNull
     @Override
-    public ListenableFuture<Void> reportSystemUsage(@NonNull ReportSystemUsageRequest request) {
+    public ListenableFuture<Void> reportSystemUsageAsync(
+            @NonNull ReportSystemUsageRequest request) {
         Preconditions.checkNotNull(request);
         ResolvableFuture<Void> future = ResolvableFuture.create();
         mPlatformSession.reportSystemUsage(
@@ -85,34 +131,136 @@
         return future;
     }
 
+    @BuildCompat.PrereleaseSdkCheck
+    @NonNull
+    @Override
+    public ListenableFuture<GetSchemaResponse> getSchemaAsync(@NonNull String packageName,
+            @NonNull String databaseName) {
+        // Superclass is annotated with @RequiresFeature, so we shouldn't get here on an
+        // unsupported build.
+        if (!BuildCompat.isAtLeastT()) {
+            throw new UnsupportedOperationException(
+                    Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA
+                            + " is not supported on this AppSearch implementation.");
+        }
+        ResolvableFuture<GetSchemaResponse> future = ResolvableFuture.create();
+        mPlatformSession.getSchema(
+                packageName,
+                databaseName,
+                mExecutor,
+                result -> AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+                        result,
+                        future,
+                        GetSchemaResponseToPlatformConverter::toJetpackGetSchemaResponse));
+        return future;
+    }
+
     @NonNull
     @Override
     public Features getFeatures() {
         return mFeatures;
     }
 
+    // TODO(b/193494000): Remove these two lines once BuildCompat.isAtLeastT() is removed.
+    @SuppressLint("NewApi")
+    @BuildCompat.PrereleaseSdkCheck
     @Override
-    public void addObserver(
-            @NonNull String observedPackage,
+    public void registerObserverCallback(
+            @NonNull String targetPackageName,
             @NonNull ObserverSpec spec,
             @NonNull Executor executor,
-            @NonNull AppSearchObserverCallback observer) {
-        Preconditions.checkNotNull(observedPackage);
+            @NonNull ObserverCallback observer) throws AppSearchException {
+        Preconditions.checkNotNull(targetPackageName);
         Preconditions.checkNotNull(spec);
         Preconditions.checkNotNull(executor);
         Preconditions.checkNotNull(observer);
-        // TODO(b/193494000): Support change notifications in the platform backend once the
-        //  feature is exposed in the Android SDK.
-        throw new UnsupportedOperationException("addObserver not supported for platform yet");
+        // Superclass is annotated with @RequiresFeature, so we shouldn't get here on an
+        // unsupported build.
+        if (!BuildCompat.isAtLeastT()) {
+            throw new UnsupportedOperationException(
+                    Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK
+                            + " is not supported on this AppSearch implementation");
+        }
+
+        synchronized (mObserverCallbacksLocked) {
+            android.app.appsearch.observer.ObserverCallback frameworkCallback =
+                    mObserverCallbacksLocked.get(observer);
+            if (frameworkCallback == null) {
+                // No stub is associated with this package and observer, so we must create one.
+                frameworkCallback = new android.app.appsearch.observer.ObserverCallback() {
+                    @Override
+                    public void onSchemaChanged(
+                            @NonNull android.app.appsearch.observer.SchemaChangeInfo
+                                    platformSchemaChangeInfo) {
+                        SchemaChangeInfo jetpackSchemaChangeInfo =
+                                ObserverSpecToPlatformConverter.toJetpackSchemaChangeInfo(
+                                        platformSchemaChangeInfo);
+                        observer.onSchemaChanged(jetpackSchemaChangeInfo);
+                    }
+
+                    @Override
+                    public void onDocumentChanged(
+                            @NonNull android.app.appsearch.observer.DocumentChangeInfo
+                                    platformDocumentChangeInfo) {
+                        DocumentChangeInfo jetpackDocumentChangeInfo =
+                                ObserverSpecToPlatformConverter.toJetpackDocumentChangeInfo(
+                                        platformDocumentChangeInfo);
+                        observer.onDocumentChanged(jetpackDocumentChangeInfo);
+                    }
+                };
+            }
+
+            // Regardless of whether this stub was fresh or not, we have to register it again
+            // because the user might be supplying a different spec.
+            try {
+                mPlatformSession.registerObserverCallback(
+                        targetPackageName,
+                        ObserverSpecToPlatformConverter.toPlatformObserverSpec(spec),
+                        executor,
+                        frameworkCallback);
+            } catch (android.app.appsearch.exceptions.AppSearchException e) {
+                throw new AppSearchException((int) e.getResultCode(), e.getMessage(), e.getCause());
+            }
+
+            // Now that registration has succeeded, save this stub into our in-memory cache. This
+            // isn't done when errors occur because the user may not call removeObserver if
+            // addObserver threw.
+            mObserverCallbacksLocked.put(observer, frameworkCallback);
+        }
     }
 
+    @SuppressLint("NewApi")
+    @BuildCompat.PrereleaseSdkCheck
     @Override
-    public void removeObserver(
-            @NonNull String observedPackage, @NonNull AppSearchObserverCallback observer) {
-        Preconditions.checkNotNull(observedPackage);
+    public void unregisterObserverCallback(
+            @NonNull String targetPackageName, @NonNull ObserverCallback observer)
+            throws AppSearchException {
+        Preconditions.checkNotNull(targetPackageName);
         Preconditions.checkNotNull(observer);
-        // TODO(b/193494000): Implement removeObserver
-        throw new UnsupportedOperationException("removeObserver not supported for platform yet");
+        // Superclass is annotated with @RequiresFeature, so we shouldn't get here on an
+        // unsupported build.
+        if (!BuildCompat.isAtLeastT()) {
+            throw new UnsupportedOperationException(
+                    Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK
+                            + " is not supported on this AppSearch implementation");
+        }
+
+        android.app.appsearch.observer.ObserverCallback frameworkCallback;
+        synchronized (mObserverCallbacksLocked) {
+            frameworkCallback = mObserverCallbacksLocked.get(observer);
+            if (frameworkCallback == null) {
+                return;  // No such observer registered. Nothing to do.
+            }
+
+            try {
+                mPlatformSession.unregisterObserverCallback(targetPackageName, frameworkCallback);
+            } catch (android.app.appsearch.exceptions.AppSearchException e) {
+                throw new AppSearchException((int) e.getResultCode(), e.getMessage(), e.getCause());
+            }
+
+            // Only remove from the in-memory map once removal from the service side succeeds
+            mObserverCallbacksLocked.remove(observer);
+        }
     }
 
     @Override
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java
index e45c239..6d0d9b6 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java
@@ -211,7 +211,7 @@
      */
     @SuppressLint("WrongConstant")
     @NonNull
-    public static ListenableFuture<AppSearchSession> createSearchSession(
+    public static ListenableFuture<AppSearchSession> createSearchSessionAsync(
             @NonNull SearchContext context) {
         Preconditions.checkNotNull(context);
         AppSearchManager appSearchManager =
@@ -224,7 +224,7 @@
                     if (result.isSuccess()) {
                         future.set(
                                 new SearchSessionImpl(result.getResultValue(), context.mExecutor,
-                                new FeaturesImpl()));
+                                        new FeaturesImpl()));
                     } else {
                         // Without the SuppressLint annotation on the method, this line causes a
                         // lint error because getResultCode isn't defined as returning a value from
@@ -238,11 +238,24 @@
     }
 
     /**
+     * @deprecated use {@link #createSearchSessionAsync}.
+     *
+     * @param context The {@link SearchContext} contains all information to create a new
+     *                {@link AppSearchSession}
+     */
+    @NonNull
+    @Deprecated
+    public static ListenableFuture<AppSearchSession> createSearchSession(
+            @NonNull SearchContext context) {
+        return createSearchSessionAsync(context);
+    }
+
+    /**
      * Opens a new {@link GlobalSearchSession} on this storage.
      */
     @SuppressLint("WrongConstant")
     @NonNull
-    public static ListenableFuture<GlobalSearchSession> createGlobalSearchSession(
+    public static ListenableFuture<GlobalSearchSession> createGlobalSearchSessionAsync(
             @NonNull GlobalSearchContext context) {
         Preconditions.checkNotNull(context);
         AppSearchManager appSearchManager =
@@ -266,4 +279,14 @@
                 });
         return future;
     }
+
+    /**
+     * @deprecated use {@link #createGlobalSearchSessionAsync}.
+     */
+    @Deprecated
+    @NonNull
+    public static ListenableFuture<GlobalSearchSession> createGlobalSearchSession(
+            @NonNull GlobalSearchContext context) {
+        return createGlobalSearchSessionAsync(context);
+    }
 }
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchResultsImpl.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchResultsImpl.java
index ff19a90..e774332 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchResultsImpl.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchResultsImpl.java
@@ -27,6 +27,7 @@
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.platformstorage.converter.SearchResultToPlatformConverter;
 import androidx.concurrent.futures.ResolvableFuture;
+import androidx.core.os.BuildCompat;
 import androidx.core.util.Preconditions;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -60,23 +61,28 @@
     @SuppressLint("WrongConstant")
     @Override
     @NonNull
-    public ListenableFuture<List<SearchResult>> getNextPage() {
+    @BuildCompat.PrereleaseSdkCheck
+    public ListenableFuture<List<SearchResult>> getNextPageAsync() {
         ResolvableFuture<List<SearchResult>> future = ResolvableFuture.create();
         mPlatformResults.getNextPage(mExecutor, result -> {
             if (result.isSuccess()) {
                 List<android.app.appsearch.SearchResult> frameworkResults = result.getResultValue();
                 List<SearchResult> jetpackResults = new ArrayList<>(frameworkResults.size());
                 for (int i = 0; i < frameworkResults.size(); i++) {
-                    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.S) {
+                    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.S
+                            || Build.VERSION.SDK_INT == Build.VERSION_CODES.S_V2) {
                         // This is a patch for b/197361770, framework-appsearch in Android S will
                         // disable the whole namespace filter if none of given namespaces exist.
-                        // And that will result in Icing return all documents this query is able
-                        // to access.
+                        // And that will result in Icing returns all documents that this query is
+                        // able to access.
                         if (i == 0 && !mSearchSpec.getFilterNamespaces().isEmpty()
                                 && !mSearchSpec.getFilterNamespaces().contains(
                                 frameworkResults.get(i).getGenericDocument().getNamespace())) {
-                            // And in the meantime, since none of the namespace and document that
-                            // use query for exists, we should just return an empty result.
+                            // We should never return a document with a namespace that is not
+                            // required in the request. And also since the bug will only happen
+                            // when the required namespace doesn't exist, we should just return
+                            // an empty result when we found the result contains unexpected
+                            // namespace.
                             future.set(Collections.emptyList());
                             return;
                         }
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchSessionImpl.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchSessionImpl.java
index 4d8f2f2..76e6450 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchSessionImpl.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchSessionImpl.java
@@ -31,19 +31,22 @@
 import androidx.appsearch.app.ReportUsageRequest;
 import androidx.appsearch.app.SearchResults;
 import androidx.appsearch.app.SearchSpec;
+import androidx.appsearch.app.SearchSuggestionResult;
+import androidx.appsearch.app.SearchSuggestionSpec;
 import androidx.appsearch.app.SetSchemaRequest;
 import androidx.appsearch.app.SetSchemaResponse;
 import androidx.appsearch.app.StorageInfo;
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.platformstorage.converter.AppSearchResultToPlatformConverter;
 import androidx.appsearch.platformstorage.converter.GenericDocumentToPlatformConverter;
+import androidx.appsearch.platformstorage.converter.GetSchemaResponseToPlatformConverter;
 import androidx.appsearch.platformstorage.converter.RequestToPlatformConverter;
 import androidx.appsearch.platformstorage.converter.ResponseToPlatformConverter;
-import androidx.appsearch.platformstorage.converter.SchemaToPlatformConverter;
 import androidx.appsearch.platformstorage.converter.SearchSpecToPlatformConverter;
 import androidx.appsearch.platformstorage.converter.SetSchemaRequestToPlatformConverter;
 import androidx.appsearch.platformstorage.util.BatchResultCallbackAdapter;
 import androidx.concurrent.futures.ResolvableFuture;
+import androidx.core.os.BuildCompat;
 import androidx.core.util.Preconditions;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -75,71 +78,49 @@
 
     @Override
     @NonNull
-    public ListenableFuture<SetSchemaResponse> setSchema(@NonNull SetSchemaRequest request) {
+    @BuildCompat.PrereleaseSdkCheck
+    public ListenableFuture<SetSchemaResponse> setSchemaAsync(@NonNull SetSchemaRequest request) {
         Preconditions.checkNotNull(request);
         ResolvableFuture<SetSchemaResponse> future = ResolvableFuture.create();
         mPlatformSession.setSchema(
                 SetSchemaRequestToPlatformConverter.toPlatformSetSchemaRequest(request),
                 mExecutor,
                 mExecutor,
-                result -> {
-                    if (result.isSuccess()) {
-                        SetSchemaResponse jetpackResponse =
-                                SetSchemaRequestToPlatformConverter.toJetpackSetSchemaResponse(
-                                        result.getResultValue());
-                        future.set(jetpackResponse);
-                    } else {
-                        handleFailedPlatformResult(result, future);
-                    }
-                });
+                result -> AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+                        result,
+                        future,
+                        SetSchemaRequestToPlatformConverter::toJetpackSetSchemaResponse));
         return future;
     }
 
     @Override
     @NonNull
-    public ListenableFuture<GetSchemaResponse> getSchema() {
+    @BuildCompat.PrereleaseSdkCheck
+    public ListenableFuture<GetSchemaResponse> getSchemaAsync() {
         ResolvableFuture<GetSchemaResponse> future = ResolvableFuture.create();
         mPlatformSession.getSchema(
                 mExecutor,
-                result -> {
-                    if (result.isSuccess()) {
-                        android.app.appsearch.GetSchemaResponse platformGetResponse =
-                                result.getResultValue();
-                        GetSchemaResponse.Builder jetpackResponseBuilder =
-                                new GetSchemaResponse.Builder();
-                        for (android.app.appsearch.AppSearchSchema platformSchema :
-                                platformGetResponse.getSchemas()) {
-                            jetpackResponseBuilder.addSchema(
-                                    SchemaToPlatformConverter.toJetpackSchema(platformSchema));
-                        }
-                        jetpackResponseBuilder.setVersion(platformGetResponse.getVersion());
-                        future.set(jetpackResponseBuilder.build());
-                    } else {
-                        handleFailedPlatformResult(result, future);
-                    }
-                });
+                result -> AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+                        result,
+                        future,
+                        GetSchemaResponseToPlatformConverter::toJetpackGetSchemaResponse));
         return future;
     }
 
     @NonNull
     @Override
-    public ListenableFuture<Set<String>> getNamespaces() {
+    public ListenableFuture<Set<String>> getNamespacesAsync() {
         ResolvableFuture<Set<String>> future = ResolvableFuture.create();
         mPlatformSession.getNamespaces(
                 mExecutor,
-                result -> {
-                    if (result.isSuccess()) {
-                        future.set(result.getResultValue());
-                    } else {
-                        handleFailedPlatformResult(result, future);
-                    }
-                });
+                result -> AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+                        result, future));
         return future;
     }
 
     @Override
     @NonNull
-    public ListenableFuture<AppSearchBatchResult<String, Void>> put(
+    public ListenableFuture<AppSearchBatchResult<String, Void>> putAsync(
             @NonNull PutDocumentsRequest request) {
         Preconditions.checkNotNull(request);
         ResolvableFuture<AppSearchBatchResult<String, Void>> future = ResolvableFuture.create();
@@ -152,7 +133,7 @@
 
     @Override
     @NonNull
-    public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentId(
+    public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
             @NonNull GetByDocumentIdRequest request) {
         Preconditions.checkNotNull(request);
         ResolvableFuture<AppSearchBatchResult<String, GenericDocument>> future =
@@ -179,9 +160,18 @@
         return new SearchResultsImpl(platformSearchResults, searchSpec, mExecutor);
     }
 
+    @NonNull
+    @Override
+    public ListenableFuture<List<SearchSuggestionResult>> searchSuggestionAsync(
+            @NonNull String suggestionQueryExpression, @NonNull SearchSuggestionSpec searchSpec) {
+        // TODO(b/227356108) Implement this after we export to framework.
+        throw new UnsupportedOperationException(
+                "Search Suggestion is not supported on this AppSearch implementation.");
+    }
+
     @Override
     @NonNull
-    public ListenableFuture<Void> reportUsage(@NonNull ReportUsageRequest request) {
+    public ListenableFuture<Void> reportUsageAsync(@NonNull ReportUsageRequest request) {
         Preconditions.checkNotNull(request);
         ResolvableFuture<Void> future = ResolvableFuture.create();
         mPlatformSession.reportUsage(
@@ -194,7 +184,7 @@
 
     @Override
     @NonNull
-    public ListenableFuture<AppSearchBatchResult<String, Void>> remove(
+    public ListenableFuture<AppSearchBatchResult<String, Void>> removeAsync(
             @NonNull RemoveByDocumentIdRequest request) {
         Preconditions.checkNotNull(request);
         ResolvableFuture<AppSearchBatchResult<String, Void>> future = ResolvableFuture.create();
@@ -207,14 +197,14 @@
 
     @Override
     @NonNull
-    public ListenableFuture<Void> remove(
+    @BuildCompat.PrereleaseSdkCheck
+    public ListenableFuture<Void> removeAsync(
             @NonNull String queryExpression, @NonNull SearchSpec searchSpec) {
         Preconditions.checkNotNull(queryExpression);
         Preconditions.checkNotNull(searchSpec);
         ResolvableFuture<Void> future = ResolvableFuture.create();
 
-        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.S
-                && !searchSpec.getFilterNamespaces().isEmpty()) {
+        if (!BuildCompat.isAtLeastT() && !searchSpec.getFilterNamespaces().isEmpty()) {
             // This is a patch for b/197361770, framework-appsearch in Android S will
             // disable the given namespace filter if it is not empty and none of given namespaces
             // exist.
@@ -223,7 +213,15 @@
             mPlatformSession.getNamespaces(
                     mExecutor,
                     namespaceResult -> {
-                        if (namespaceResult.isSuccess()) {
+                        if (!namespaceResult.isSuccess()) {
+                            future.setException(
+                                    new AppSearchException(
+                                            namespaceResult.getResultCode(),
+                                            namespaceResult.getErrorMessage()));
+                            return;
+                        }
+
+                        try {
                             Set<String> existingNamespaces = namespaceResult.getResultValue();
                             List<String> filterNamespaces = searchSpec.getFilterNamespaces();
                             for (int i = 0; i < filterNamespaces.size(); i++) {
@@ -234,17 +232,18 @@
                                             SearchSpecToPlatformConverter
                                                     .toPlatformSearchSpec(searchSpec),
                                             mExecutor,
-                                            removeResult -> AppSearchResultToPlatformConverter
-                                                    .platformAppSearchResultToFuture(removeResult,
-                                                            future));
+                                            removeResult ->
+                                                    AppSearchResultToPlatformConverter
+                                                            .platformAppSearchResultToFuture(
+                                                                    removeResult, future));
                                     return;
                                 }
                             }
                             // None of the namespace in the given namespace filter exists. Return
                             // early.
                             future.set(null);
-                        } else {
-                            handleFailedPlatformResult(namespaceResult, future);
+                        } catch (Throwable t) {
+                            future.setException(t);
                         }
                     });
         } else {
@@ -261,26 +260,19 @@
 
     @Override
     @NonNull
-    public ListenableFuture<StorageInfo> getStorageInfo() {
+    public ListenableFuture<StorageInfo> getStorageInfoAsync() {
         ResolvableFuture<StorageInfo> future = ResolvableFuture.create();
         mPlatformSession.getStorageInfo(
                 mExecutor,
-                result -> {
-                    if (result.isSuccess()) {
-                        StorageInfo jetpackStorageInfo =
-                                ResponseToPlatformConverter.toJetpackStorageInfo(
-                                        result.getResultValue());
-                        future.set(jetpackStorageInfo);
-                    } else {
-                        handleFailedPlatformResult(result, future);
-                    }
-                });
+                result -> AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+                        result, future, ResponseToPlatformConverter::toJetpackStorageInfo)
+        );
         return future;
     }
 
     @NonNull
     @Override
-    public ListenableFuture<Void> requestFlush() {
+    public ListenableFuture<Void> requestFlushAsync() {
         ResolvableFuture<Void> future = ResolvableFuture.create();
         // The data in platform will be flushed by scheduled task. This api won't do anything extra
         // flush.
@@ -298,12 +290,4 @@
     public void close() {
         mPlatformSession.close();
     }
-
-    private void handleFailedPlatformResult(
-            @NonNull android.app.appsearch.AppSearchResult<?> platformResult,
-            @NonNull ResolvableFuture<?> future) {
-        future.setException(
-                new AppSearchException(
-                        platformResult.getResultCode(), platformResult.getErrorMessage()));
-    }
 }
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverter.java
index 30a729f..a7d6401 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverter.java
@@ -47,11 +47,18 @@
      */
     @SuppressLint("WrongConstant")
     @NonNull
-    public static <T> AppSearchResult<T> platformAppSearchResultToJetpack(
-            @NonNull android.app.appsearch.AppSearchResult<T> platformResult) {
+    public static <PlatformType, JetpackType> AppSearchResult<JetpackType>
+            platformAppSearchResultToJetpack(
+            @NonNull android.app.appsearch.AppSearchResult<PlatformType> platformResult,
+            @NonNull Function<PlatformType, JetpackType> valueMapper) {
         Preconditions.checkNotNull(platformResult);
         if (platformResult.isSuccess()) {
-            return AppSearchResult.newSuccessfulResult(platformResult.getResultValue());
+            try {
+                JetpackType jetpackType = valueMapper.apply(platformResult.getResultValue());
+                return AppSearchResult.newSuccessfulResult(jetpackType);
+            } catch (Throwable t) {
+                return AppSearchResult.throwableToFailedResult(t);
+            }
         }
         return AppSearchResult.newFailedResult(
                 // Without the SuppressLint annotation on the method, this line causes a
@@ -62,15 +69,21 @@
 
     /**
      * Uses the given {@link android.app.appsearch.AppSearchResult} to populate the given
-     * {@link ResolvableFuture}.
+     * {@link ResolvableFuture}, transforming it using {@code valueMapper}.
      */
-    public static <T> void platformAppSearchResultToFuture(
-            @NonNull android.app.appsearch.AppSearchResult<T> platformResult,
-            @NonNull ResolvableFuture<T> future) {
+    public static <PlatformType, JetpackType> void platformAppSearchResultToFuture(
+            @NonNull android.app.appsearch.AppSearchResult<PlatformType> platformResult,
+            @NonNull ResolvableFuture<JetpackType> future,
+            @NonNull Function<PlatformType, JetpackType> valueMapper) {
         Preconditions.checkNotNull(platformResult);
         Preconditions.checkNotNull(future);
         if (platformResult.isSuccess()) {
-            future.set(platformResult.getResultValue());
+            try {
+                JetpackType jetpackType = valueMapper.apply(platformResult.getResultValue());
+                future.set(jetpackType);
+            } catch (Throwable t) {
+                future.setException(t);
+            }
         } else {
             future.setException(
                     new AppSearchException(
@@ -79,6 +92,16 @@
     }
 
     /**
+     * Uses the given {@link android.app.appsearch.AppSearchResult} to populate the given
+     * {@link ResolvableFuture}.
+     */
+    public static <T> void platformAppSearchResultToFuture(
+            @NonNull android.app.appsearch.AppSearchResult<T> platformResult,
+            @NonNull ResolvableFuture<T> future) {
+        platformAppSearchResultToFuture(platformResult, future, Function.identity());
+    }
+
+    /**
      * Converts the given platform {@link android.app.appsearch.AppSearchBatchResult} to a Jetpack
      * {@link AppSearchBatchResult}.
      *
@@ -95,8 +118,13 @@
         AppSearchBatchResult.Builder<K, JetpackValue> jetpackResult =
                 new AppSearchBatchResult.Builder<>();
         for (Map.Entry<K, PlatformValue> success : platformResult.getSuccesses().entrySet()) {
-            JetpackValue jetpackValue = valueMapper.apply(success.getValue());
-            jetpackResult.setSuccess(success.getKey(), jetpackValue);
+            try {
+                JetpackValue jetpackValue = valueMapper.apply(success.getValue());
+                jetpackResult.setSuccess(success.getKey(), jetpackValue);
+            } catch (Throwable t) {
+                jetpackResult.setResult(
+                        success.getKey(), AppSearchResult.throwableToFailedResult(t));
+            }
         }
         for (Map.Entry<K, android.app.appsearch.AppSearchResult<PlatformValue>> failure :
                 platformResult.getFailures().entrySet()) {
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java
index 3838191..004fcc4 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java
@@ -61,9 +61,24 @@
             } else if (property instanceof boolean[]) {
                 platformBuilder.setPropertyBoolean(propertyName, (boolean[]) property);
             } else if (property instanceof byte[][]) {
-                platformBuilder.setPropertyBytes(propertyName, (byte[][]) property);
+                byte[][] byteValues = (byte[][]) property;
+                // This is a patch for b/204677124, framework-appsearch in Android S and S_V2 will
+                // crash if the user put a document with empty byte[][] or document[].
+                if ((Build.VERSION.SDK_INT == Build.VERSION_CODES.S
+                        || Build.VERSION.SDK_INT == Build.VERSION_CODES.S_V2)
+                        && byteValues.length == 0) {
+                    continue;
+                }
+                platformBuilder.setPropertyBytes(propertyName, byteValues);
             } else if (property instanceof GenericDocument[]) {
                 GenericDocument[] documentValues = (GenericDocument[]) property;
+                // This is a patch for b/204677124, framework-appsearch in Android S and S_V2 will
+                // crash if the user put a document with empty byte[][] or document[].
+                if ((Build.VERSION.SDK_INT == Build.VERSION_CODES.S
+                        || Build.VERSION.SDK_INT == Build.VERSION_CODES.S_V2)
+                        && documentValues.length == 0) {
+                    continue;
+                }
                 android.app.appsearch.GenericDocument[] platformSubDocuments =
                         new android.app.appsearch.GenericDocument[documentValues.length];
                 for (int j = 0; j < documentValues.length; j++) {
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GetSchemaResponseToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GetSchemaResponseToPlatformConverter.java
new file mode 100644
index 0000000..b69caca
--- /dev/null
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GetSchemaResponseToPlatformConverter.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2022 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.appsearch.platformstorage.converter;
+
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.collection.ArraySet;
+import androidx.core.os.BuildCompat;
+import androidx.core.util.Preconditions;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Translates between Platform and Jetpack versions of {@link GetSchemaResponse}.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+@RequiresApi(Build.VERSION_CODES.S)
+public final class GetSchemaResponseToPlatformConverter {
+    private GetSchemaResponseToPlatformConverter() {}
+
+    /**
+     * Translates a platform {@link android.app.appsearch.GetSchemaResponse} into a jetpack
+     * {@link GetSchemaResponse}.
+     */
+    @NonNull
+    @BuildCompat.PrereleaseSdkCheck
+    public static GetSchemaResponse toJetpackGetSchemaResponse(
+            @NonNull android.app.appsearch.GetSchemaResponse platformResponse) {
+        Preconditions.checkNotNull(platformResponse);
+        GetSchemaResponse.Builder jetpackBuilder;
+        if (!BuildCompat.isAtLeastT()) {
+            // Android API level in S-v2 and lower won't have any supported feature.
+            jetpackBuilder = new GetSchemaResponse.Builder(/*getVisibilitySettingSupported=*/false);
+        } else {
+            // The regular builder has all supported features.
+            jetpackBuilder = new GetSchemaResponse.Builder();
+        }
+        for (android.app.appsearch.AppSearchSchema platformSchema : platformResponse.getSchemas()) {
+            jetpackBuilder.addSchema(SchemaToPlatformConverter.toJetpackSchema(platformSchema));
+        }
+        jetpackBuilder.setVersion(platformResponse.getVersion());
+        if (BuildCompat.isAtLeastT()) {
+            // Convert schemas not displayed by system
+            for (String schemaTypeNotDisplayedBySystem :
+                    platformResponse.getSchemaTypesNotDisplayedBySystem()) {
+                jetpackBuilder.addSchemaTypeNotDisplayedBySystem(schemaTypeNotDisplayedBySystem);
+            }
+            // Convert schemas visible to packages
+            convertSchemasVisibleToPackages(platformResponse, jetpackBuilder);
+            // Convert schemas visible to permissions
+            for (Map.Entry<String, Set<Set<Integer>>> entry :
+                    platformResponse.getRequiredPermissionsForSchemaTypeVisibility().entrySet()) {
+                jetpackBuilder.setRequiredPermissionsForSchemaTypeVisibility(entry.getKey(),
+                        entry.getValue());
+            }
+        }
+        return jetpackBuilder.build();
+    }
+
+    /**
+     * Adds package visibilities in a platform {@link android.app.appsearch.GetSchemaResponse} into
+     * the given jetpack {@link GetSchemaResponse}.
+     */
+    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+    private static void convertSchemasVisibleToPackages(
+            @NonNull android.app.appsearch.GetSchemaResponse platformResponse,
+            @NonNull GetSchemaResponse.Builder jetpackBuilder) {
+        // TODO(b/205749173): If there were no packages, getSchemaTypesVisibleToPackages
+        //  incorrectly returns {@code null} in some prerelease versions of Android T. Remove
+        //  this workaround after the issue is fixed in T.
+        Map<String, Set<android.app.appsearch.PackageIdentifier>> schemaTypesVisibleToPackages =
+                platformResponse.getSchemaTypesVisibleToPackages();
+        if (schemaTypesVisibleToPackages != null) {
+            for (Map.Entry<String, Set<android.app.appsearch.PackageIdentifier>> entry
+                    : schemaTypesVisibleToPackages.entrySet()) {
+                Set<PackageIdentifier> jetpackPackageIdentifiers =
+                        new ArraySet<>(entry.getValue().size());
+                for (android.app.appsearch.PackageIdentifier frameworkPackageIdentifier
+                        : entry.getValue()) {
+                    jetpackPackageIdentifiers.add(new PackageIdentifier(
+                            frameworkPackageIdentifier.getPackageName(),
+                            frameworkPackageIdentifier.getSha256Certificate()));
+                }
+                jetpackBuilder.setSchemaTypeVisibleToPackages(
+                        entry.getKey(), jetpackPackageIdentifiers);
+            }
+        }
+    }
+}
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/ObserverSpecToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/ObserverSpecToPlatformConverter.java
new file mode 100644
index 0000000..41ca827
--- /dev/null
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/ObserverSpecToPlatformConverter.java
@@ -0,0 +1,80 @@
+/*
+ * 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.appsearch.platformstorage.converter;
+
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.observer.DocumentChangeInfo;
+import androidx.appsearch.observer.ObserverSpec;
+import androidx.appsearch.observer.SchemaChangeInfo;
+import androidx.core.util.Preconditions;
+
+/**
+ * Translates between Platform and Jetpack versions of {@link ObserverSpec}.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+public final class ObserverSpecToPlatformConverter {
+    private ObserverSpecToPlatformConverter() {}
+
+    /**
+     * Translates a jetpack {@link ObserverSpec} into a platform
+     * {@link android.app.appsearch.observer.ObserverSpec}.
+     */
+    @NonNull
+    public static android.app.appsearch.observer.ObserverSpec toPlatformObserverSpec(
+            @NonNull ObserverSpec jetpackSpec) {
+        Preconditions.checkNotNull(jetpackSpec);
+        return new android.app.appsearch.observer.ObserverSpec.Builder()
+                .addFilterSchemas(jetpackSpec.getFilterSchemas())
+                .build();
+    }
+
+    /**
+     * Translates a platform {@link androidx.appsearch.observer.SchemaChangeInfo} into a jetpack
+     * {@link SchemaChangeInfo}.
+     */
+    @NonNull
+    public static SchemaChangeInfo toJetpackSchemaChangeInfo(
+            @NonNull android.app.appsearch.observer.SchemaChangeInfo platformInfo) {
+        Preconditions.checkNotNull(platformInfo);
+        return new SchemaChangeInfo(
+                platformInfo.getPackageName(),
+                platformInfo.getDatabaseName(),
+                platformInfo.getChangedSchemaNames());
+    }
+
+    /**
+     * Translates a platform {@link androidx.appsearch.observer.DocumentChangeInfo} into a jetpack
+     * {@link DocumentChangeInfo}.
+     */
+    @NonNull
+    public static DocumentChangeInfo toJetpackDocumentChangeInfo(
+            @NonNull android.app.appsearch.observer.DocumentChangeInfo platformInfo) {
+        Preconditions.checkNotNull(platformInfo);
+        return new DocumentChangeInfo(
+                platformInfo.getPackageName(),
+                platformInfo.getDatabaseName(),
+                platformInfo.getNamespace(),
+                platformInfo.getSchemaName(),
+                platformInfo.getChangedDocumentIds());
+    }
+}
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java
index 841cbe7..707234d 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java
@@ -23,6 +23,7 @@
 import androidx.annotation.RestrictTo;
 import androidx.appsearch.app.GenericDocument;
 import androidx.appsearch.app.SearchResult;
+import androidx.core.os.BuildCompat;
 import androidx.core.util.Preconditions;
 
 import java.util.List;
@@ -37,6 +38,7 @@
     private SearchResultToPlatformConverter() {}
 
     /** Translates from Platform to Jetpack versions of {@link SearchResult}. */
+    @BuildCompat.PrereleaseSdkCheck
     @NonNull
     public static SearchResult toJetpackSearchResult(
             @NonNull android.app.appsearch.SearchResult platformResult) {
@@ -56,13 +58,13 @@
         return builder.build();
     }
 
+    @BuildCompat.PrereleaseSdkCheck
     @NonNull
     private static SearchResult.MatchInfo toJetpackMatchInfo(
             @NonNull android.app.appsearch.SearchResult.MatchInfo platformMatchInfo) {
         Preconditions.checkNotNull(platformMatchInfo);
-        // TODO(b/201316758) : Copy over submatch range info once it is added to
-        //  framework-appsearch.
-        return new SearchResult.MatchInfo.Builder(platformMatchInfo.getPropertyPath())
+        SearchResult.MatchInfo.Builder builder = new SearchResult.MatchInfo.Builder(
+                platformMatchInfo.getPropertyPath())
                 .setExactMatchRange(
                         new SearchResult.MatchRange(
                                 platformMatchInfo.getExactMatchRange().getStart(),
@@ -70,7 +72,13 @@
                 .setSnippetRange(
                         new SearchResult.MatchRange(
                                 platformMatchInfo.getSnippetRange().getStart(),
-                                platformMatchInfo.getSnippetRange().getEnd()))
-                .build();
+                                platformMatchInfo.getSnippetRange().getEnd()));
+        if (BuildCompat.isAtLeastT()) {
+            builder.setSubmatchRange(
+                    new SearchResult.MatchRange(
+                            platformMatchInfo.getSubmatchRange().getStart(),
+                            platformMatchInfo.getSubmatchRange().getEnd()));
+        }
+        return builder.build();
     }
 }
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SetSchemaRequestToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SetSchemaRequestToPlatformConverter.java
index ca52112..6950427 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SetSchemaRequestToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SetSchemaRequestToPlatformConverter.java
@@ -27,10 +27,12 @@
 import androidx.appsearch.app.PackageIdentifier;
 import androidx.appsearch.app.SetSchemaRequest;
 import androidx.appsearch.app.SetSchemaResponse;
+import androidx.core.os.BuildCompat;
 import androidx.core.util.Preconditions;
 
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Function;
 
 /**
  * Translates between Platform and Jetpack versions of {@link SetSchemaRequest}.
@@ -45,6 +47,7 @@
      * Translates a jetpack {@link SetSchemaRequest} into a platform
      * {@link android.app.appsearch.SetSchemaRequest}.
      */
+    @BuildCompat.PrereleaseSdkCheck
     @NonNull
     public static android.app.appsearch.SetSchemaRequest toPlatformSetSchemaRequest(
             @NonNull SetSchemaRequest jetpackRequest) {
@@ -70,6 +73,20 @@
                                 jetpackPackageIdentifier.getSha256Certificate()));
             }
         }
+        if (!jetpackRequest.getRequiredPermissionsForSchemaTypeVisibility().isEmpty()) {
+            if (!BuildCompat.isAtLeastT()) {
+                throw new UnsupportedOperationException(
+                        "Set required permissions for schema type visibility are not supported "
+                                + "with this backend/Android API level combination.");
+            }
+            for (Map.Entry<String, Set<Set<Integer>>> entry :
+                    jetpackRequest.getRequiredPermissionsForSchemaTypeVisibility().entrySet()) {
+                for (Set<Integer> permissionGroup : entry.getValue()) {
+                    platformBuilder.addRequiredPermissionsForSchemaTypeVisibility(
+                            entry.getKey(), permissionGroup);
+                }
+            }
+        }
         for (Map.Entry<String, Migrator> entry : jetpackRequest.getMigrators().entrySet()) {
             Migrator jetpackMigrator = entry.getValue();
             android.app.appsearch.Migrator platformMigrator = new android.app.appsearch.Migrator() {
@@ -141,7 +158,8 @@
                     migrationFailure.getDocumentId(),
                     migrationFailure.getSchemaType(),
                     AppSearchResultToPlatformConverter.platformAppSearchResultToJetpack(
-                            migrationFailure.getAppSearchResult())));
+                            migrationFailure.getAppSearchResult(), Function.identity()))
+            );
         }
         return jetpackBuilder.build();
     }
diff --git a/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/AppSearchTestUtils.java b/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/AppSearchTestUtils.java
index f578822..3c2943e 100644
--- a/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/AppSearchTestUtils.java
+++ b/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/AppSearchTestUtils.java
@@ -27,6 +27,7 @@
 import androidx.appsearch.app.GetByDocumentIdRequest;
 import androidx.appsearch.app.SearchResult;
 import androidx.appsearch.app.SearchResults;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityChecker;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -59,7 +60,7 @@
             @NonNull AppSearchSession session, @NonNull String namespace, @NonNull String... ids)
             throws Exception {
         AppSearchBatchResult<String, GenericDocument> result = checkIsBatchResultSuccess(
-                session.getByDocumentId(
+                session.getByDocumentIdAsync(
                         new GetByDocumentIdRequest.Builder(namespace).addIds(ids).build()));
         assertThat(result.getSuccesses()).hasSize(ids.length);
         assertThat(result.getFailures()).isEmpty();
@@ -76,7 +77,7 @@
             @NonNull AppSearchSession session, @NonNull GetByDocumentIdRequest request)
             throws Exception {
         AppSearchBatchResult<String, GenericDocument> result = checkIsBatchResultSuccess(
-                session.getByDocumentId(request));
+                session.getByDocumentIdAsync(request));
         Set<String> ids = request.getIds();
         assertThat(result.getSuccesses()).hasSize(ids.size());
         assertThat(result.getFailures()).isEmpty();
@@ -104,12 +105,24 @@
     @NonNull
     public static List<SearchResult> retrieveAllSearchResults(@NonNull SearchResults searchResults)
             throws Exception {
-        List<SearchResult> page = searchResults.getNextPage().get();
+        List<SearchResult> page = searchResults.getNextPageAsync().get();
         List<SearchResult> results = new ArrayList<>();
         while (!page.isEmpty()) {
             results.addAll(page);
-            page = searchResults.getNextPage().get();
+            page = searchResults.getNextPageAsync().get();
         }
         return results;
     }
+
+    /**
+     * Creates a mock {@link VisibilityChecker}.
+     * @param visiblePrefixedSchemas Schema types that are accessible to any caller.
+     * @return
+     */
+    @NonNull
+    public static VisibilityChecker createMockVisibilityChecker(
+            @NonNull Set<String> visiblePrefixedSchemas) {
+        return (callerAccess, packageName, prefixedSchema, visibilityStore) ->
+                visiblePrefixedSchemas.contains(prefixedSchema);
+    }
 }
diff --git a/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/TestObserverCallback.java b/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/TestObserverCallback.java
index 93cb2ce..a22d02e 100644
--- a/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/TestObserverCallback.java
+++ b/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/TestObserverCallback.java
@@ -19,15 +19,15 @@
 import androidx.annotation.GuardedBy;
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
-import androidx.appsearch.observer.AppSearchObserverCallback;
 import androidx.appsearch.observer.DocumentChangeInfo;
+import androidx.appsearch.observer.ObserverCallback;
 import androidx.appsearch.observer.SchemaChangeInfo;
 
 import java.util.ArrayList;
 import java.util.List;
 
 /**
- * An implementation of {@link androidx.appsearch.observer.AppSearchObserverCallback} for testing
+ * An implementation of {@link androidx.appsearch.observer.ObserverCallback} for testing
  * that caches its notifications in memory.
  *
  * <p>You should wait for all notifications to be delivered using {@link #waitForNotificationCount}
@@ -36,7 +36,7 @@
  * @hide
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class TestObserverCallback implements AppSearchObserverCallback {
+public class TestObserverCallback implements ObserverCallback {
     private final Object mLock = new Object();
 
     private final List<SchemaChangeInfo> mSchemaChanges = new ArrayList<>();
@@ -81,7 +81,11 @@
                                     + expectedCount
                                     + " notifications but there are"
                                     + " already "
-                                    + actualCount);
+                                    + actualCount
+                                    + ".\n  Schema changes: "
+                                    + mSchemaChanges
+                                    + "\n  Document changes: "
+                                    + mDocumentChanges);
                 } else if (actualCount == expectedCount) {
                     return;
                 } else {
@@ -111,6 +115,16 @@
         return mDocumentChanges;
     }
 
+    /** Removes all notifications captured by this callback and resets the count to 0. */
+    public void clear() {
+        synchronized (mLock) {
+            mSchemaChanges.clear();
+            mDocumentChanges.clear();
+            mNotificationCountLocked = 0;
+            mLock.notifyAll();
+        }
+    }
+
     private void incrementNotificationCountLocked() {
         synchronized (mLock) {
             mNotificationCountLocked++;
diff --git a/appsearch/appsearch/api/api_lint.ignore b/appsearch/appsearch/api/api_lint.ignore
index 36bb389..aa14c59 100644
--- a/appsearch/appsearch/api/api_lint.ignore
+++ b/appsearch/appsearch/api/api_lint.ignore
@@ -19,6 +19,8 @@
     Methods returning com.google.common.util.concurrent.ListenableFuture should have a suffix *Async to reserve unmodified name for a suspend function
 AsyncSuffixFuture: androidx.appsearch.app.AppSearchSession#setSchema(androidx.appsearch.app.SetSchemaRequest):
     Methods returning com.google.common.util.concurrent.ListenableFuture should have a suffix *Async to reserve unmodified name for a suspend function
+AsyncSuffixFuture: androidx.appsearch.app.GlobalSearchSession#getSchema(String, String):
+    Methods returning com.google.common.util.concurrent.ListenableFuture should have a suffix *Async to reserve unmodified name for a suspend function
 AsyncSuffixFuture: androidx.appsearch.app.GlobalSearchSession#reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest):
     Methods returning com.google.common.util.concurrent.ListenableFuture should have a suffix *Async to reserve unmodified name for a suspend function
 AsyncSuffixFuture: androidx.appsearch.app.SearchResults#getNextPage():
diff --git a/appsearch/appsearch/api/current.txt b/appsearch/appsearch/api/current.txt
index 91b14d5..9818d8b 100644
--- a/appsearch/appsearch/api/current.txt
+++ b/appsearch/appsearch/api/current.txt
@@ -177,18 +177,28 @@
 
   public interface AppSearchSession extends java.io.Closeable {
     method public void close();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(androidx.appsearch.app.GetByDocumentIdRequest);
     method public androidx.appsearch.app.Features getFeatures();
-    method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
+    method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespacesAsync();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfoAsync();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> putAsync(androidx.appsearch.app.PutDocumentsRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> removeAsync(androidx.appsearch.app.RemoveByDocumentIdRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> removeAsync(String, androidx.appsearch.app.SearchSpec);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsageAsync(androidx.appsearch.app.ReportUsageRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlushAsync();
     method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchemaAsync(androidx.appsearch.app.SetSchemaRequest);
   }
 
   public interface DocumentClassFactory<T> {
@@ -200,7 +210,10 @@
 
   public interface Features {
     method public boolean isFeatureSupported(String);
-    field public static final String GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER = "GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER";
+    field public static final String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
+    field public static final String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
+    field public static final String GLOBAL_SEARCH_SESSION_GET_SCHEMA = "GLOBAL_SEARCH_SESSION_GET_SCHEMA";
+    field public static final String GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK = "GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK";
     field public static final String SEARCH_RESULT_MATCH_INFO_SUBMATCH = "SEARCH_RESULT_MATCH_INFO_SUBMATCH";
   }
 
@@ -266,6 +279,9 @@
   }
 
   public final class GetSchemaResponse {
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Set<java.lang.String!> getSchemaTypesNotDisplayedBySystem();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemaTypesVisibleToPackages();
     method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
     method @IntRange(from=0) public int getVersion();
   }
@@ -273,17 +289,24 @@
   public static final class GetSchemaResponse.Builder {
     ctor public GetSchemaResponse.Builder();
     method public androidx.appsearch.app.GetSchemaResponse.Builder addSchema(androidx.appsearch.app.AppSearchSchema);
+    method public androidx.appsearch.app.GetSchemaResponse.Builder addSchemaTypeNotDisplayedBySystem(String);
     method public androidx.appsearch.app.GetSchemaResponse build();
+    method public androidx.appsearch.app.GetSchemaResponse.Builder setRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.util.Set<java.lang.Integer!>!>);
+    method public androidx.appsearch.app.GetSchemaResponse.Builder setSchemaTypeVisibleToPackages(String, java.util.Set<androidx.appsearch.app.PackageIdentifier!>);
     method public androidx.appsearch.app.GetSchemaResponse.Builder setVersion(@IntRange(from=0) int);
   }
 
   public interface GlobalSearchSession extends java.io.Closeable {
-    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void addObserver(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.AppSearchObserverCallback);
     method public void close();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_BY_ID) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(String, String, androidx.appsearch.app.GetByDocumentIdRequest);
     method public androidx.appsearch.app.Features getFeatures();
-    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void removeObserver(String, androidx.appsearch.observer.AppSearchObserverCallback);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+    method @Deprecated @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema(String, String);
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync(String, String);
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void registerObserverCallback(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsageAsync(androidx.appsearch.app.ReportSystemUsageRequest);
     method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void unregisterObserverCallback(String, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
   }
 
   public abstract class Migrator {
@@ -299,6 +322,22 @@
     method public byte[] getSha256Certificate();
   }
 
+  public class PropertyPath implements java.lang.Iterable<androidx.appsearch.app.PropertyPath.PathSegment> {
+    ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
+    ctor public PropertyPath(String);
+    method public androidx.appsearch.app.PropertyPath.PathSegment get(int);
+    method public java.util.Iterator<androidx.appsearch.app.PropertyPath.PathSegment!> iterator();
+    method public int size();
+  }
+
+  public static class PropertyPath.PathSegment {
+    method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
+    method public static androidx.appsearch.app.PropertyPath.PathSegment create(String);
+    method public int getPropertyIndex();
+    method public String getPropertyName();
+    field public static final int NON_REPEATED_CARDINALITY = -1; // 0xffffffff
+  }
+
   public final class PutDocumentsRequest {
     method public java.util.List<androidx.appsearch.app.GenericDocument!> getGenericDocuments();
   }
@@ -373,6 +412,7 @@
     method public androidx.appsearch.app.SearchResult.MatchRange getExactMatchRange();
     method public String getFullText();
     method public String getPropertyPath();
+    method public androidx.appsearch.app.PropertyPath getPropertyPathObject();
     method public CharSequence getSnippet();
     method public androidx.appsearch.app.SearchResult.MatchRange getSnippetRange();
     method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH) public CharSequence getSubmatch();
@@ -395,7 +435,8 @@
 
   public interface SearchResults extends java.io.Closeable {
     method public void close();
-    method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+    method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPageAsync();
   }
 
   public final class SearchSpec {
@@ -453,20 +494,31 @@
 
   public final class SetSchemaRequest {
     method public java.util.Map<java.lang.String!,androidx.appsearch.app.Migrator!> getMigrators();
+    method public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
     method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
     method public java.util.Set<java.lang.String!> getSchemasNotDisplayedBySystem();
     method public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemasVisibleToPackages();
     method @IntRange(from=1) public int getVersion();
     method public boolean isForceOverride();
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_ASSISTANT_APP_SEARCH_DATA = 6; // 0x6
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CALENDAR = 2; // 0x2
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CONTACTS = 3; // 0x3
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_EXTERNAL_STORAGE = 4; // 0x4
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_HOME_APP_SEARCH_DATA = 5; // 0x5
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_SMS = 1; // 0x1
   }
 
   public static final class SetSchemaRequest.Builder {
     ctor public SetSchemaRequest.Builder();
     method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(Class<?>!...) throws androidx.appsearch.exceptions.AppSearchException;
     method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForDocumentClassVisibility(Class<?>, java.util.Set<java.lang.Integer!>) throws androidx.appsearch.exceptions.AppSearchException;
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.lang.Integer!>);
     method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(androidx.appsearch.app.AppSearchSchema!...);
     method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(java.util.Collection<androidx.appsearch.app.AppSearchSchema!>);
     method public androidx.appsearch.app.SetSchemaRequest build();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForDocumentClassVisibility(Class<?>) throws androidx.appsearch.exceptions.AppSearchException;
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForSchemaTypeVisibility(String);
     method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassDisplayedBySystem(Class<?>, boolean) throws androidx.appsearch.exceptions.AppSearchException;
     method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassVisibilityForPackage(Class<?>, boolean, androidx.appsearch.app.PackageIdentifier) throws androidx.appsearch.exceptions.AppSearchException;
     method public androidx.appsearch.app.SetSchemaRequest.Builder setForceOverride(boolean);
@@ -535,19 +587,20 @@
 
 package androidx.appsearch.observer {
 
-  public interface AppSearchObserverCallback {
-    method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
-    method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
-  }
-
   public final class DocumentChangeInfo {
-    ctor public DocumentChangeInfo(String, String, String, String);
+    ctor public DocumentChangeInfo(String, String, String, String, java.util.Set<java.lang.String!>);
+    method public java.util.Set<java.lang.String!> getChangedDocumentIds();
     method public String getDatabaseName();
     method public String getNamespace();
     method public String getPackageName();
     method public String getSchemaName();
   }
 
+  public interface ObserverCallback {
+    method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
+    method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
+  }
+
   public final class ObserverSpec {
     method public java.util.Set<java.lang.String!> getFilterSchemas();
   }
@@ -562,7 +615,8 @@
   }
 
   public final class SchemaChangeInfo {
-    ctor public SchemaChangeInfo(String, String);
+    ctor public SchemaChangeInfo(String, String, java.util.Set<java.lang.String!>);
+    method public java.util.Set<java.lang.String!> getChangedSchemaNames();
     method public String getDatabaseName();
     method public String getPackageName();
   }
diff --git a/appsearch/appsearch/api/public_plus_experimental_current.txt b/appsearch/appsearch/api/public_plus_experimental_current.txt
index 91b14d5..9818d8b 100644
--- a/appsearch/appsearch/api/public_plus_experimental_current.txt
+++ b/appsearch/appsearch/api/public_plus_experimental_current.txt
@@ -177,18 +177,28 @@
 
   public interface AppSearchSession extends java.io.Closeable {
     method public void close();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(androidx.appsearch.app.GetByDocumentIdRequest);
     method public androidx.appsearch.app.Features getFeatures();
-    method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
+    method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespacesAsync();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfoAsync();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> putAsync(androidx.appsearch.app.PutDocumentsRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> removeAsync(androidx.appsearch.app.RemoveByDocumentIdRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> removeAsync(String, androidx.appsearch.app.SearchSpec);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsageAsync(androidx.appsearch.app.ReportUsageRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlushAsync();
     method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchemaAsync(androidx.appsearch.app.SetSchemaRequest);
   }
 
   public interface DocumentClassFactory<T> {
@@ -200,7 +210,10 @@
 
   public interface Features {
     method public boolean isFeatureSupported(String);
-    field public static final String GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER = "GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER";
+    field public static final String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
+    field public static final String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
+    field public static final String GLOBAL_SEARCH_SESSION_GET_SCHEMA = "GLOBAL_SEARCH_SESSION_GET_SCHEMA";
+    field public static final String GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK = "GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK";
     field public static final String SEARCH_RESULT_MATCH_INFO_SUBMATCH = "SEARCH_RESULT_MATCH_INFO_SUBMATCH";
   }
 
@@ -266,6 +279,9 @@
   }
 
   public final class GetSchemaResponse {
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Set<java.lang.String!> getSchemaTypesNotDisplayedBySystem();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemaTypesVisibleToPackages();
     method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
     method @IntRange(from=0) public int getVersion();
   }
@@ -273,17 +289,24 @@
   public static final class GetSchemaResponse.Builder {
     ctor public GetSchemaResponse.Builder();
     method public androidx.appsearch.app.GetSchemaResponse.Builder addSchema(androidx.appsearch.app.AppSearchSchema);
+    method public androidx.appsearch.app.GetSchemaResponse.Builder addSchemaTypeNotDisplayedBySystem(String);
     method public androidx.appsearch.app.GetSchemaResponse build();
+    method public androidx.appsearch.app.GetSchemaResponse.Builder setRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.util.Set<java.lang.Integer!>!>);
+    method public androidx.appsearch.app.GetSchemaResponse.Builder setSchemaTypeVisibleToPackages(String, java.util.Set<androidx.appsearch.app.PackageIdentifier!>);
     method public androidx.appsearch.app.GetSchemaResponse.Builder setVersion(@IntRange(from=0) int);
   }
 
   public interface GlobalSearchSession extends java.io.Closeable {
-    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void addObserver(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.AppSearchObserverCallback);
     method public void close();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_BY_ID) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(String, String, androidx.appsearch.app.GetByDocumentIdRequest);
     method public androidx.appsearch.app.Features getFeatures();
-    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void removeObserver(String, androidx.appsearch.observer.AppSearchObserverCallback);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+    method @Deprecated @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema(String, String);
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync(String, String);
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void registerObserverCallback(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsageAsync(androidx.appsearch.app.ReportSystemUsageRequest);
     method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void unregisterObserverCallback(String, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
   }
 
   public abstract class Migrator {
@@ -299,6 +322,22 @@
     method public byte[] getSha256Certificate();
   }
 
+  public class PropertyPath implements java.lang.Iterable<androidx.appsearch.app.PropertyPath.PathSegment> {
+    ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
+    ctor public PropertyPath(String);
+    method public androidx.appsearch.app.PropertyPath.PathSegment get(int);
+    method public java.util.Iterator<androidx.appsearch.app.PropertyPath.PathSegment!> iterator();
+    method public int size();
+  }
+
+  public static class PropertyPath.PathSegment {
+    method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
+    method public static androidx.appsearch.app.PropertyPath.PathSegment create(String);
+    method public int getPropertyIndex();
+    method public String getPropertyName();
+    field public static final int NON_REPEATED_CARDINALITY = -1; // 0xffffffff
+  }
+
   public final class PutDocumentsRequest {
     method public java.util.List<androidx.appsearch.app.GenericDocument!> getGenericDocuments();
   }
@@ -373,6 +412,7 @@
     method public androidx.appsearch.app.SearchResult.MatchRange getExactMatchRange();
     method public String getFullText();
     method public String getPropertyPath();
+    method public androidx.appsearch.app.PropertyPath getPropertyPathObject();
     method public CharSequence getSnippet();
     method public androidx.appsearch.app.SearchResult.MatchRange getSnippetRange();
     method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH) public CharSequence getSubmatch();
@@ -395,7 +435,8 @@
 
   public interface SearchResults extends java.io.Closeable {
     method public void close();
-    method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+    method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPageAsync();
   }
 
   public final class SearchSpec {
@@ -453,20 +494,31 @@
 
   public final class SetSchemaRequest {
     method public java.util.Map<java.lang.String!,androidx.appsearch.app.Migrator!> getMigrators();
+    method public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
     method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
     method public java.util.Set<java.lang.String!> getSchemasNotDisplayedBySystem();
     method public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemasVisibleToPackages();
     method @IntRange(from=1) public int getVersion();
     method public boolean isForceOverride();
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_ASSISTANT_APP_SEARCH_DATA = 6; // 0x6
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CALENDAR = 2; // 0x2
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CONTACTS = 3; // 0x3
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_EXTERNAL_STORAGE = 4; // 0x4
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_HOME_APP_SEARCH_DATA = 5; // 0x5
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_SMS = 1; // 0x1
   }
 
   public static final class SetSchemaRequest.Builder {
     ctor public SetSchemaRequest.Builder();
     method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(Class<?>!...) throws androidx.appsearch.exceptions.AppSearchException;
     method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForDocumentClassVisibility(Class<?>, java.util.Set<java.lang.Integer!>) throws androidx.appsearch.exceptions.AppSearchException;
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.lang.Integer!>);
     method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(androidx.appsearch.app.AppSearchSchema!...);
     method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(java.util.Collection<androidx.appsearch.app.AppSearchSchema!>);
     method public androidx.appsearch.app.SetSchemaRequest build();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForDocumentClassVisibility(Class<?>) throws androidx.appsearch.exceptions.AppSearchException;
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForSchemaTypeVisibility(String);
     method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassDisplayedBySystem(Class<?>, boolean) throws androidx.appsearch.exceptions.AppSearchException;
     method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassVisibilityForPackage(Class<?>, boolean, androidx.appsearch.app.PackageIdentifier) throws androidx.appsearch.exceptions.AppSearchException;
     method public androidx.appsearch.app.SetSchemaRequest.Builder setForceOverride(boolean);
@@ -535,19 +587,20 @@
 
 package androidx.appsearch.observer {
 
-  public interface AppSearchObserverCallback {
-    method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
-    method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
-  }
-
   public final class DocumentChangeInfo {
-    ctor public DocumentChangeInfo(String, String, String, String);
+    ctor public DocumentChangeInfo(String, String, String, String, java.util.Set<java.lang.String!>);
+    method public java.util.Set<java.lang.String!> getChangedDocumentIds();
     method public String getDatabaseName();
     method public String getNamespace();
     method public String getPackageName();
     method public String getSchemaName();
   }
 
+  public interface ObserverCallback {
+    method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
+    method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
+  }
+
   public final class ObserverSpec {
     method public java.util.Set<java.lang.String!> getFilterSchemas();
   }
@@ -562,7 +615,8 @@
   }
 
   public final class SchemaChangeInfo {
-    ctor public SchemaChangeInfo(String, String);
+    ctor public SchemaChangeInfo(String, String, java.util.Set<java.lang.String!>);
+    method public java.util.Set<java.lang.String!> getChangedSchemaNames();
     method public String getDatabaseName();
     method public String getPackageName();
   }
diff --git a/appsearch/appsearch/api/restricted_current.txt b/appsearch/appsearch/api/restricted_current.txt
index 91b14d5..9818d8b 100644
--- a/appsearch/appsearch/api/restricted_current.txt
+++ b/appsearch/appsearch/api/restricted_current.txt
@@ -177,18 +177,28 @@
 
   public interface AppSearchSession extends java.io.Closeable {
     method public void close();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(androidx.appsearch.app.GetByDocumentIdRequest);
     method public androidx.appsearch.app.Features getFeatures();
-    method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
+    method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespacesAsync();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfoAsync();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> putAsync(androidx.appsearch.app.PutDocumentsRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> removeAsync(androidx.appsearch.app.RemoveByDocumentIdRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> removeAsync(String, androidx.appsearch.app.SearchSpec);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsageAsync(androidx.appsearch.app.ReportUsageRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlushAsync();
     method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchemaAsync(androidx.appsearch.app.SetSchemaRequest);
   }
 
   public interface DocumentClassFactory<T> {
@@ -200,7 +210,10 @@
 
   public interface Features {
     method public boolean isFeatureSupported(String);
-    field public static final String GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER = "GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER";
+    field public static final String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
+    field public static final String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
+    field public static final String GLOBAL_SEARCH_SESSION_GET_SCHEMA = "GLOBAL_SEARCH_SESSION_GET_SCHEMA";
+    field public static final String GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK = "GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK";
     field public static final String SEARCH_RESULT_MATCH_INFO_SUBMATCH = "SEARCH_RESULT_MATCH_INFO_SUBMATCH";
   }
 
@@ -266,6 +279,9 @@
   }
 
   public final class GetSchemaResponse {
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Set<java.lang.String!> getSchemaTypesNotDisplayedBySystem();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemaTypesVisibleToPackages();
     method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
     method @IntRange(from=0) public int getVersion();
   }
@@ -273,17 +289,24 @@
   public static final class GetSchemaResponse.Builder {
     ctor public GetSchemaResponse.Builder();
     method public androidx.appsearch.app.GetSchemaResponse.Builder addSchema(androidx.appsearch.app.AppSearchSchema);
+    method public androidx.appsearch.app.GetSchemaResponse.Builder addSchemaTypeNotDisplayedBySystem(String);
     method public androidx.appsearch.app.GetSchemaResponse build();
+    method public androidx.appsearch.app.GetSchemaResponse.Builder setRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.util.Set<java.lang.Integer!>!>);
+    method public androidx.appsearch.app.GetSchemaResponse.Builder setSchemaTypeVisibleToPackages(String, java.util.Set<androidx.appsearch.app.PackageIdentifier!>);
     method public androidx.appsearch.app.GetSchemaResponse.Builder setVersion(@IntRange(from=0) int);
   }
 
   public interface GlobalSearchSession extends java.io.Closeable {
-    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void addObserver(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.AppSearchObserverCallback);
     method public void close();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_BY_ID) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(String, String, androidx.appsearch.app.GetByDocumentIdRequest);
     method public androidx.appsearch.app.Features getFeatures();
-    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void removeObserver(String, androidx.appsearch.observer.AppSearchObserverCallback);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+    method @Deprecated @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema(String, String);
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync(String, String);
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void registerObserverCallback(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsageAsync(androidx.appsearch.app.ReportSystemUsageRequest);
     method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void unregisterObserverCallback(String, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
   }
 
   public abstract class Migrator {
@@ -299,6 +322,22 @@
     method public byte[] getSha256Certificate();
   }
 
+  public class PropertyPath implements java.lang.Iterable<androidx.appsearch.app.PropertyPath.PathSegment> {
+    ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
+    ctor public PropertyPath(String);
+    method public androidx.appsearch.app.PropertyPath.PathSegment get(int);
+    method public java.util.Iterator<androidx.appsearch.app.PropertyPath.PathSegment!> iterator();
+    method public int size();
+  }
+
+  public static class PropertyPath.PathSegment {
+    method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
+    method public static androidx.appsearch.app.PropertyPath.PathSegment create(String);
+    method public int getPropertyIndex();
+    method public String getPropertyName();
+    field public static final int NON_REPEATED_CARDINALITY = -1; // 0xffffffff
+  }
+
   public final class PutDocumentsRequest {
     method public java.util.List<androidx.appsearch.app.GenericDocument!> getGenericDocuments();
   }
@@ -373,6 +412,7 @@
     method public androidx.appsearch.app.SearchResult.MatchRange getExactMatchRange();
     method public String getFullText();
     method public String getPropertyPath();
+    method public androidx.appsearch.app.PropertyPath getPropertyPathObject();
     method public CharSequence getSnippet();
     method public androidx.appsearch.app.SearchResult.MatchRange getSnippetRange();
     method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH) public CharSequence getSubmatch();
@@ -395,7 +435,8 @@
 
   public interface SearchResults extends java.io.Closeable {
     method public void close();
-    method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+    method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+    method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPageAsync();
   }
 
   public final class SearchSpec {
@@ -453,20 +494,31 @@
 
   public final class SetSchemaRequest {
     method public java.util.Map<java.lang.String!,androidx.appsearch.app.Migrator!> getMigrators();
+    method public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
     method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
     method public java.util.Set<java.lang.String!> getSchemasNotDisplayedBySystem();
     method public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemasVisibleToPackages();
     method @IntRange(from=1) public int getVersion();
     method public boolean isForceOverride();
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_ASSISTANT_APP_SEARCH_DATA = 6; // 0x6
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CALENDAR = 2; // 0x2
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CONTACTS = 3; // 0x3
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_EXTERNAL_STORAGE = 4; // 0x4
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_HOME_APP_SEARCH_DATA = 5; // 0x5
+    field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_SMS = 1; // 0x1
   }
 
   public static final class SetSchemaRequest.Builder {
     ctor public SetSchemaRequest.Builder();
     method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(Class<?>!...) throws androidx.appsearch.exceptions.AppSearchException;
     method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForDocumentClassVisibility(Class<?>, java.util.Set<java.lang.Integer!>) throws androidx.appsearch.exceptions.AppSearchException;
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.lang.Integer!>);
     method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(androidx.appsearch.app.AppSearchSchema!...);
     method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(java.util.Collection<androidx.appsearch.app.AppSearchSchema!>);
     method public androidx.appsearch.app.SetSchemaRequest build();
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForDocumentClassVisibility(Class<?>) throws androidx.appsearch.exceptions.AppSearchException;
+    method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForSchemaTypeVisibility(String);
     method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassDisplayedBySystem(Class<?>, boolean) throws androidx.appsearch.exceptions.AppSearchException;
     method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassVisibilityForPackage(Class<?>, boolean, androidx.appsearch.app.PackageIdentifier) throws androidx.appsearch.exceptions.AppSearchException;
     method public androidx.appsearch.app.SetSchemaRequest.Builder setForceOverride(boolean);
@@ -535,19 +587,20 @@
 
 package androidx.appsearch.observer {
 
-  public interface AppSearchObserverCallback {
-    method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
-    method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
-  }
-
   public final class DocumentChangeInfo {
-    ctor public DocumentChangeInfo(String, String, String, String);
+    ctor public DocumentChangeInfo(String, String, String, String, java.util.Set<java.lang.String!>);
+    method public java.util.Set<java.lang.String!> getChangedDocumentIds();
     method public String getDatabaseName();
     method public String getNamespace();
     method public String getPackageName();
     method public String getSchemaName();
   }
 
+  public interface ObserverCallback {
+    method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
+    method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
+  }
+
   public final class ObserverSpec {
     method public java.util.Set<java.lang.String!> getFilterSchemas();
   }
@@ -562,7 +615,8 @@
   }
 
   public final class SchemaChangeInfo {
-    ctor public SchemaChangeInfo(String, String);
+    ctor public SchemaChangeInfo(String, String, java.util.Set<java.lang.String!>);
+    method public java.util.Set<java.lang.String!> getChangedSchemaNames();
     method public String getDatabaseName();
     method public String getPackageName();
   }
diff --git a/appsearch/appsearch/build.gradle b/appsearch/appsearch/build.gradle
index c536467..02e32f9 100644
--- a/appsearch/appsearch/build.gradle
+++ b/appsearch/appsearch/build.gradle
@@ -32,9 +32,9 @@
     api('androidx.annotation:annotation:1.1.0')
     api(libs.guavaListenableFuture)
 
+    implementation('androidx.collection:collection:1.2.0')
     implementation('androidx.concurrent:concurrent-futures:1.0.0')
-    implementation('androidx.core:core:1.2.0')
-    implementation('androidx.collection:collection:1.0.0')
+    implementation('androidx.core:core:1.7.0')
 
     androidTestAnnotationProcessor project(':appsearch:appsearch-compiler')
     androidTestImplementation project(':appsearch:appsearch-local-storage')
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorLocalTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorLocalTest.java
index b22f8d8..6cf35bb 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorLocalTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorLocalTest.java
@@ -26,9 +26,9 @@
 
 public class AnnotationProcessorLocalTest extends AnnotationProcessorTestBase {
     @Override
-    protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
         Context context = ApplicationProvider.getApplicationContext();
-        return LocalStorage.createSearchSession(
+        return LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, dbName).build());
     }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java
index 5dbb8a2..e53c6aa 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java
@@ -29,9 +29,9 @@
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
 public class AnnotationProcessorPlatformTest extends AnnotationProcessorTestBase {
     @Override
-    protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
         Context context = ApplicationProvider.getApplicationContext();
-        return PlatformStorage.createSearchSession(
+        return PlatformStorage.createSearchSessionAsync(
                 new PlatformStorage.SearchContext.Builder(context, dbName).build());
     }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
index 684e51f..2e657eb 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
@@ -27,6 +27,7 @@
 import androidx.appsearch.annotation.Document;
 import androidx.appsearch.testutil.AppSearchEmail;
 
+import com.google.auto.value.AutoValue;
 import com.google.common.util.concurrent.ListenableFuture;
 
 import org.junit.After;
@@ -41,12 +42,12 @@
     private AppSearchSession mSession;
     private static final String DB_NAME_1 = "";
 
-    protected abstract ListenableFuture<AppSearchSession> createSearchSession(
+    protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
             @NonNull String dbName);
 
     @Before
     public void setUp() throws Exception {
-        mSession = createSearchSession(DB_NAME_1).get();
+        mSession = createSearchSessionAsync(DB_NAME_1).get();
 
         // Cleanup whatever documents may still exist in these databases. This is needed in
         // addition to tearDown in case a test exited without completing properly.
@@ -60,7 +61,8 @@
     }
 
     private void cleanup() throws Exception {
-        mSession.setSchema(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+        mSession.setSchemaAsync(new SetSchemaRequest.Builder()
+                .setForceOverride(true).build()).get();
     }
 
     @Document
@@ -297,7 +299,7 @@
     public void testAnnotationProcessor() throws Exception {
         //TODO(b/156296904) add test for int, float, GenericDocument, and class with
         // @Document annotation
-        mSession.setSchema(
+        mSession.setSchemaAsync(
                 new SetSchemaRequest.Builder().addDocumentClasses(Card.class, Gift.class).build())
                 .get();
 
@@ -305,7 +307,7 @@
         Gift inputDocument = Gift.createPopulatedGift();
 
         // Index the Gift document and query it.
-        checkIsBatchResultSuccess(mSession.put(
+        checkIsBatchResultSuccess(mSession.putAsync(
                 new PutDocumentsRequest.Builder().addDocuments(inputDocument).build()));
         SearchResults searchResults = mSession.search("", new SearchSpec.Builder()
                 .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
@@ -320,7 +322,7 @@
 
     @Test
     public void testAnnotationProcessor_queryByType() throws Exception {
-        mSession.setSchema(
+        mSession.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addDocumentClasses(Card.class, Gift.class)
                         .addSchemas(AppSearchEmail.SCHEMA).build())
@@ -340,7 +342,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mSession.put(
+        checkIsBatchResultSuccess(mSession.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addDocuments(inputDocument1, inputDocument2)
                         .addGenericDocuments(email1).build()));
@@ -386,4 +388,88 @@
         assertThat(genericDocument1).isNotSameInstanceAs(genericDocument2);
         assertThat(genericDocument1).isEqualTo(genericDocument2);
     }
+
+    /**
+     * Simple Document to demonstrate use of AutoValue and Document annotations, also nested
+     */
+    @Document
+    @AutoValue
+    public abstract static class SampleAutoValue {
+        @AutoValue.CopyAnnotations
+        @Document.Id
+        abstract String id();
+
+        @AutoValue.CopyAnnotations
+        @Document.Namespace
+        abstract String namespace();
+
+        @AutoValue.CopyAnnotations
+        @Document.StringProperty
+        abstract String property();
+
+        /** AutoValue constructor */
+        public static SampleAutoValue create(String id, String namespace, String property) {
+            return new AutoValue_AnnotationProcessorTestBase_SampleAutoValue(id,
+                    namespace, property);
+        }
+    }
+
+
+    /**
+     * Simple Document to demonstrate use of inheritance with Document annotations
+     */
+    @Document
+    static class Pineapple {
+        @Document.Namespace String mNamespace;
+        @Document.Id String mId;
+    }
+
+    @Document
+    static class CoolPineapple extends Pineapple {
+        @Document.StringProperty String mCool;
+
+        @Document.CreationTimestampMillis long mCreationTimestampMillis;
+    }
+
+    @Test
+    public void testGenericDocumentConversion_AutoValue() throws Exception {
+        SampleAutoValue sampleAutoValue = SampleAutoValue.create("id", "namespace", "property");
+        GenericDocument genericDocument = GenericDocument.fromDocumentClass(sampleAutoValue);
+        assertThat(genericDocument.getId()).isEqualTo("id");
+        assertThat(genericDocument.getNamespace()).isEqualTo("namespace");
+        assertThat(genericDocument.getSchemaType()).isEqualTo("SampleAutoValue");
+        assertThat(genericDocument.getPropertyStringArray("property"))
+                .asList().containsExactly("property");
+    }
+
+    @Test
+    public void testGenericDocumentConversion_Superclass() throws Exception {
+        CoolPineapple inputDoc = new CoolPineapple();
+        inputDoc.mId = "id";
+        inputDoc.mNamespace = "namespace";
+        inputDoc.mCool = "very cool";
+        inputDoc.mCreationTimestampMillis = System.currentTimeMillis();
+        GenericDocument genericDocument = GenericDocument.fromDocumentClass(inputDoc);
+        assertThat(genericDocument.getId()).isEqualTo("id");
+        assertThat(genericDocument.getNamespace()).isEqualTo("namespace");
+        assertThat(genericDocument.getSchemaType()).isEqualTo("Pineapple");
+        assertThat(genericDocument.getPropertyStringArray("cool")).asList()
+                .containsExactly("very cool");
+
+        //also try inserting and querying
+        mSession.setSchemaAsync(new SetSchemaRequest.Builder()
+                .addDocumentClasses(CoolPineapple.class).build()).get();
+
+        checkIsBatchResultSuccess(mSession.putAsync(
+                new PutDocumentsRequest.Builder().addDocuments(inputDoc).build()));
+
+        // Query the documents by it's schema type.
+        SearchResults searchResults = mSession.search("",
+                new SearchSpec.Builder()
+                        .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                        .addFilterSchemas("Pineapple", AppSearchEmail.SCHEMA_TYPE)
+                        .build());
+        List<GenericDocument> documents = convertSearchResultsToDocuments(searchResults);
+        assertThat(documents).containsExactly(genericDocument);
+    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultInternalTest.java
similarity index 93%
rename from appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultTest.java
rename to appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultInternalTest.java
index 125e55f..12393de 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultInternalTest.java
@@ -22,7 +22,8 @@
 
 import org.junit.Test;
 
-public class AppSearchResultTest {
+/** Tests for private APIs of {@link AppSearchResult}. */
+public class AppSearchResultInternalTest {
     @Test
     public void testMapNullPointerException() {
         NullPointerException e = assertThrows(NullPointerException.class, () -> {
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionInternalTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionInternalTestBase.java
new file mode 100644
index 0000000..38fc851
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionInternalTestBase.java
@@ -0,0 +1,373 @@
+/*
+ * Copyright 2022 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.appsearch.app;
+
+import static androidx.appsearch.testutil.AppSearchTestUtils.checkIsBatchResultSuccess;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchSchema.PropertyConfig;
+import androidx.appsearch.app.AppSearchSchema.StringPropertyConfig;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+
+// TODO(b/227356108): move this test to cts test once we un-hide search suggestion API.
+public abstract class AppSearchSessionInternalTestBase {
+
+    static final String DB_NAME_1 = "";
+    static final String DB_NAME_2 = "testDb2";
+
+    private AppSearchSession mDb1;
+    private AppSearchSession mDb2;
+
+    protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
+            @NonNull String dbName);
+
+    protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
+            @NonNull String dbName, @NonNull ExecutorService executor);
+
+    @Before
+    public void setUp() throws Exception {
+        mDb1 = createSearchSessionAsync(DB_NAME_1).get();
+        mDb2 = createSearchSessionAsync(DB_NAME_2).get();
+
+        // Cleanup whatever documents may still exist in these databases. This is needed in
+        // addition to tearDown in case a test exited without completing properly.
+        cleanup();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        // Cleanup whatever documents may still exist in these databases.
+        cleanup();
+    }
+
+    private void cleanup() throws Exception {
+        mDb1.setSchemaAsync(
+                new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+        mDb2.setSchemaAsync(
+                new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+    }
+
+    @Test
+    public void testSearchSuggestion() throws Exception {
+        // Schema registration
+        AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+                        new StringPropertyConfig.Builder("body")
+                                .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .build())
+                .build();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+        // Index documents
+        GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "Type")
+                .setPropertyString("body", "termOne termTwo termThree termFour")
+                .build();
+        GenericDocument doc2 = new GenericDocument.Builder<>("namespace", "id2", "Type")
+                .setPropertyString("body", "termOne termTwo termThree")
+                .build();
+        GenericDocument doc3 = new GenericDocument.Builder<>("namespace", "id3", "Type")
+                .setPropertyString("body", "termOne termTwo")
+                .build();
+        GenericDocument doc4 = new GenericDocument.Builder<>("namespace", "id4", "Type")
+                .setPropertyString("body", "termOne")
+                .build();
+
+        checkIsBatchResultSuccess(mDb1.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(doc1, doc2, doc3, doc4)
+                        .build()));
+
+        SearchSuggestionResult resultOne =
+                new SearchSuggestionResult.Builder().setSuggestedResult("termone").build();
+        SearchSuggestionResult resultTwo =
+                new SearchSuggestionResult.Builder().setSuggestedResult("termtwo").build();
+        SearchSuggestionResult resultThree =
+                new SearchSuggestionResult.Builder().setSuggestedResult("termthree").build();
+        SearchSuggestionResult resultFour =
+                new SearchSuggestionResult.Builder().setSuggestedResult("termfour").build();
+
+        List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+        assertThat(suggestions).containsExactly(resultOne, resultTwo, resultThree, resultFour)
+                .inOrder();
+
+        // Query first 2 suggestions, and they will be ranked.
+        suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/2).build()).get();
+        assertThat(suggestions).containsExactly(resultOne, resultTwo).inOrder();
+    }
+
+    @Test
+    public void testSearchSuggestion_namespaceFilter() throws Exception {
+        // Schema registration
+        AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+                        new StringPropertyConfig.Builder("body")
+                                .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .build())
+                .build();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+        // Index documents
+        GenericDocument doc1 = new GenericDocument.Builder<>("namespace1", "id1", "Type")
+                .setPropertyString("body", "fo foo")
+                .build();
+        GenericDocument doc2 = new GenericDocument.Builder<>("namespace2", "id2", "Type")
+                .setPropertyString("body", "foo")
+                .build();
+        GenericDocument doc3 = new GenericDocument.Builder<>("namespace3", "id3", "Type")
+                .setPropertyString("body", "fool")
+                .build();
+
+        checkIsBatchResultSuccess(mDb1.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(doc1, doc2, doc3).build()));
+
+        SearchSuggestionResult resultFo =
+                new SearchSuggestionResult.Builder().setSuggestedResult("fo").build();
+        SearchSuggestionResult resultFoo =
+                new SearchSuggestionResult.Builder().setSuggestedResult("foo").build();
+        SearchSuggestionResult resultFool =
+                new SearchSuggestionResult.Builder().setSuggestedResult("fool").build();
+
+        // namespace1 has 2 results.
+        List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"f",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+                        .addFilterNamespaces("namespace1").build()).get();
+        assertThat(suggestions).containsExactly(resultFoo, resultFo).inOrder();
+
+        // namespace2 has 1 result.
+        suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"f",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+                        .addFilterNamespaces("namespace2").build()).get();
+        assertThat(suggestions).containsExactly(resultFoo).inOrder();
+
+        // namespace2 and 3 has 2 results.
+        suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"f",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+                        .addFilterNamespaces("namespace2", "namespace3")
+                        .build()).get();
+        assertThat(suggestions).containsExactly(resultFoo, resultFool);
+
+        // non exist namespace has 2 results.
+        suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"f",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+                        .addFilterNamespaces("nonExistNamespace").build()).get();
+        assertThat(suggestions).isEmpty();
+    }
+
+    @Test
+    public void testSearchSuggestion_differentPrefix() throws Exception {
+        // Schema registration
+        AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+                        new StringPropertyConfig.Builder("body")
+                                .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .build())
+                .build();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+        // Index documents
+        GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "Type")
+                .setPropertyString("body", "foo")
+                .build();
+        GenericDocument doc2 = new GenericDocument.Builder<>("namespace", "id2", "Type")
+                .setPropertyString("body", "fool")
+                .build();
+        GenericDocument doc3 = new GenericDocument.Builder<>("namespace", "id3", "Type")
+                .setPropertyString("body", "bar")
+                .build();
+        GenericDocument doc4 = new GenericDocument.Builder<>("namespace", "id4", "Type")
+                .setPropertyString("body", "baz")
+                .build();
+
+        checkIsBatchResultSuccess(mDb1.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(doc1, doc2, doc3, doc4)
+                        .build()));
+
+        SearchSuggestionResult resultFoo =
+                new SearchSuggestionResult.Builder().setSuggestedResult("foo").build();
+        SearchSuggestionResult resultFool =
+                new SearchSuggestionResult.Builder().setSuggestedResult("fool").build();
+        SearchSuggestionResult resultBar =
+                new SearchSuggestionResult.Builder().setSuggestedResult("bar").build();
+        SearchSuggestionResult resultBaz =
+                new SearchSuggestionResult.Builder().setSuggestedResult("baz").build();
+
+        // prefix f has 2 results.
+        List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"f",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+        assertThat(suggestions).containsExactly(resultFoo, resultFool);
+
+        // prefix b has 2 results.
+        suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"b",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+        assertThat(suggestions).containsExactly(resultBar, resultBaz);
+    }
+
+    @Test
+    public void testSearchSuggestion_removeDocument() throws Exception {
+        // Schema registration
+        AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+                        new StringPropertyConfig.Builder("body")
+                                .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .build())
+                .build();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+        // Index documents
+        GenericDocument docTwo = new GenericDocument.Builder<>("namespace", "idTwo", "Type")
+                .setPropertyString("body", "two")
+                .build();
+        GenericDocument docThree = new GenericDocument.Builder<>("namespace", "idThree", "Type")
+                .setPropertyString("body", "three")
+                .build();
+        GenericDocument docTart = new GenericDocument.Builder<>("namespace", "idTart", "Type")
+                .setPropertyString("body", "tart")
+                .build();
+
+        checkIsBatchResultSuccess(mDb1.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(docTwo, docThree, docTart)
+                        .build()));
+
+        SearchSuggestionResult resultTwo =
+                new SearchSuggestionResult.Builder().setSuggestedResult("two").build();
+        SearchSuggestionResult resultThree =
+                new SearchSuggestionResult.Builder().setSuggestedResult("three").build();
+        SearchSuggestionResult resultTart =
+                new SearchSuggestionResult.Builder().setSuggestedResult("tart").build();
+
+        // prefix t has 3 results.
+        List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+        assertThat(suggestions).containsExactly(resultTwo, resultThree, resultTart);
+
+        // Delete the document
+        checkIsBatchResultSuccess(mDb1.removeAsync(
+                new RemoveByDocumentIdRequest.Builder("namespace").addIds(
+                        "idTwo").build()));
+
+        // now prefix t has 2 results.
+        suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+        assertThat(suggestions).containsExactly(resultThree, resultTart);
+    }
+
+    @Test
+    public void testSearchSuggestion_replacementDocument() throws Exception {
+        // Schema registration
+        AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+                        new StringPropertyConfig.Builder("body")
+                                .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .build())
+                .build();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+        // Index documents
+        GenericDocument doc = new GenericDocument.Builder<>("namespace", "id", "Type")
+                .setPropertyString("body", "two three tart")
+                .build();
+
+        checkIsBatchResultSuccess(mDb1.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(doc)
+                        .build()));
+
+        SearchSuggestionResult resultTwo =
+                new SearchSuggestionResult.Builder().setSuggestedResult("two").build();
+        SearchSuggestionResult resultThree =
+                new SearchSuggestionResult.Builder().setSuggestedResult("three").build();
+        SearchSuggestionResult resultTart =
+                new SearchSuggestionResult.Builder().setSuggestedResult("tart").build();
+        SearchSuggestionResult resultTwist =
+                new SearchSuggestionResult.Builder().setSuggestedResult("twist").build();
+
+        // prefix t has 3 results.
+        List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+        assertThat(suggestions).containsExactly(resultTwo, resultThree, resultTart);
+
+        // replace the document
+        GenericDocument replaceDoc = new GenericDocument.Builder<>("namespace", "id", "Type")
+                .setPropertyString("body", "twist three")
+                .build();
+        checkIsBatchResultSuccess(mDb1.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(replaceDoc)
+                        .build()));
+
+        // prefix t has 2 results for now.
+        suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"t",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+        assertThat(suggestions).containsExactly(resultThree, resultTwist);
+    }
+
+    @Test
+    public void testSearchSuggestion_ignoreOperators() throws Exception {
+        // Schema registration
+        AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+                        new StringPropertyConfig.Builder("body")
+                                .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                .build())
+                .build();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+        // Index documents
+        GenericDocument doc = new GenericDocument.Builder<>("namespace", "id", "Type")
+                .setPropertyString("body", "two original")
+                .build();
+
+        checkIsBatchResultSuccess(mDb1.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(doc)
+                        .build()));
+
+        SearchSuggestionResult resultTwoOriginal =
+                new SearchSuggestionResult.Builder().setSuggestedResult("two original").build();
+
+        List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+                /*suggestionQueryExpression=*/"two OR",
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+        assertThat(suggestions).containsExactly(resultTwoOriginal);
+    }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionLocalInternalTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionLocalInternalTest.java
new file mode 100644
index 0000000..6bcc933
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionLocalInternalTest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2020 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.
+ */
+// @exportToFramework:skipFile()
+package androidx.appsearch.app;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.localstorage.LocalStorage;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.concurrent.ExecutorService;
+
+// TODO(b/227356108): move this test to cts test once we un-hide search suggestion API.
+public class AppSearchSessionLocalInternalTest extends AppSearchSessionInternalTestBase {
+    @Override
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
+        Context context = ApplicationProvider.getApplicationContext();
+        return LocalStorage.createSearchSessionAsync(
+                new LocalStorage.SearchContext.Builder(context, dbName).build());
+    }
+
+    @Override
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(
+            @NonNull String dbName, @NonNull ExecutorService executor) {
+        Context context = ApplicationProvider.getApplicationContext();
+        return LocalStorage.createSearchSessionAsync(
+                new LocalStorage.SearchContext.Builder(context, dbName)
+                        .setWorkerExecutor(executor).build());
+    }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionPlatformInternalTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionPlatformInternalTest.java
new file mode 100644
index 0000000..6443c3d
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionPlatformInternalTest.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2020 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.appsearch.app;
+
+import android.content.Context;
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.platformstorage.PlatformStorage;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.filters.SdkSuppress;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+import org.junit.Test;
+
+import java.util.concurrent.ExecutorService;
+
+// TODO(b/227356108): move this test to cts test once we un-hide search suggestion API.
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+public class AppSearchSessionPlatformInternalTest extends AppSearchSessionInternalTestBase {
+    @Override
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
+        Context context = ApplicationProvider.getApplicationContext();
+        return PlatformStorage.createSearchSessionAsync(
+                new PlatformStorage.SearchContext.Builder(context, dbName).build());
+    }
+
+    @Override
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(
+            @NonNull String dbName, @NonNull ExecutorService executor) {
+        Context context = ApplicationProvider.getApplicationContext();
+        return PlatformStorage.createSearchSessionAsync(
+                new PlatformStorage.SearchContext.Builder(context, dbName)
+                        .setWorkerExecutor(executor).build());
+    }
+
+    @Override
+    @Test
+    public void testSearchSuggestion() throws Exception {
+        // TODO(b/227356108) enable the test when suggestion is ready in platform.
+    }
+
+    @Override
+    @Test
+    public void testSearchSuggestion_namespaceFilter() throws Exception {
+        // TODO(b/227356108) enable the test when suggestion is ready in platform.
+    }
+
+    @Override
+    @Test
+    public void testSearchSuggestion_differentPrefix() throws Exception {
+        // TODO(b/227356108) enable the test when suggestion is ready in platform.
+    }
+
+    @Override
+    @Test
+    public void testSearchSuggestion_removeDocument() throws Exception {
+        // TODO(b/227356108) enable the test when suggestion is ready in platform.
+    }
+
+    @Override
+    @Test
+    public void testSearchSuggestion_replacementDocument() throws Exception {
+        // TODO(b/227356108) enable the test when suggestion is ready in platform.
+    }
+
+    @Override
+    @Test
+    public void testSearchSuggestion_ignoreOperators() throws Exception {
+        // TODO(b/227356108) enable the test when suggestion is ready in platform.
+    }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentInternalTest.java
similarity index 95%
rename from appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentTest.java
rename to appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentInternalTest.java
index c15f290..4d5b6c6 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentInternalTest.java
@@ -23,7 +23,8 @@
 
 import org.junit.Test;
 
-public class GenericDocumentTest {
+/** Tests for private APIs of {@link GenericDocument}. */
+public class GenericDocumentInternalTest {
     @Test
     public void testRecreateFromParcel() {
         GenericDocument inDoc = new GenericDocument.Builder<>("namespace", "id1", "schema1")
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GetSchemaResponseInternalTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GetSchemaResponseInternalTest.java
new file mode 100644
index 0000000..f764313
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GetSchemaResponseInternalTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2022 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.appsearch.app;
+
+import static org.junit.Assert.assertThrows;
+
+import org.junit.Test;
+
+/** Tests for private APIs of {@link GetSchemaResponse}. */
+public class GetSchemaResponseInternalTest {
+    // TODO(b/205749173): Expose this API and move this test to CTS. Without this API, clients can't
+    //   write unit tests that check their code in an environment where visibility settings are not
+    //   supported.
+    @Test
+    public void testRebuild_noSupportedException() {
+        AppSearchSchema schema1 = new AppSearchSchema.Builder("Email1")
+                .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("subject")
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setIndexingType(
+                                AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                        .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                        .build()
+                ).build();
+
+        GetSchemaResponse.Builder builder =
+                new GetSchemaResponse.Builder(/*getVisibilitySettingSupported=*/false)
+                        .setVersion(42).addSchema(schema1);
+
+        GetSchemaResponse original = builder.build();
+        assertThrows(
+                UnsupportedOperationException.class,
+                () -> original.getSchemaTypesNotDisplayedBySystem());
+        assertThrows(
+                UnsupportedOperationException.class,
+                () -> original.getSchemaTypesVisibleToPackages());
+        assertThrows(
+                UnsupportedOperationException.class,
+                () -> original.getRequiredPermissionsForSchemaTypeVisibility());
+
+        // rebuild will throw same exception
+        GetSchemaResponse rebuild = builder.setVersion(42).build();
+        assertThrows(
+                UnsupportedOperationException.class,
+                () -> rebuild.getSchemaTypesNotDisplayedBySystem());
+        assertThrows(
+                UnsupportedOperationException.class,
+                () -> rebuild.getSchemaTypesVisibleToPackages());
+        assertThrows(
+                UnsupportedOperationException.class,
+                () -> original.getRequiredPermissionsForSchemaTypeVisibility());
+    }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecInternalTest.java
similarity index 96%
rename from appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecTest.java
rename to appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecInternalTest.java
index 19ccc63..42de090 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecInternalTest.java
@@ -22,7 +22,8 @@
 
 import org.junit.Test;
 
-public class SearchSpecTest {
+/** Tests for private APIs of {@link SearchSpec}. */
+public class SearchSpecInternalTest {
 
     @Test
     public void testGetBundle() {
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionResultTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionResultTest.java
new file mode 100644
index 0000000..d7a827f
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionResultTest.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2022 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.appsearch.app;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import org.junit.Test;
+
+// TODO(b/227356108): move this test to cts test once we un-hide search suggestion API.
+public class SearchSuggestionResultTest {
+    @Test
+    public void testBuildDefaultSearchSuggestionResult() {
+        SearchSuggestionResult searchSuggestionResult =
+                new SearchSuggestionResult.Builder().build();
+        assertThat(searchSuggestionResult.getSuggestedResult()).isEmpty();
+    }
+
+    @Test
+    public void testBuildSearchSuggestionResult() {
+        SearchSuggestionResult searchSuggestionResult =
+                new SearchSuggestionResult.Builder()
+                        .setSuggestedResult("AppSearch")
+                        .build();
+        assertThat(searchSuggestionResult.getSuggestedResult()).isEqualTo("AppSearch");
+    }
+
+    @Test
+    public void testReBuildSearchSuggestionResult() {
+        SearchSuggestionResult.Builder builder =
+                new SearchSuggestionResult.Builder()
+                        .setSuggestedResult("AppSearch");
+        SearchSuggestionResult original = builder.build();
+        SearchSuggestionResult rebuild = builder.setSuggestedResult("IcingLib").build();
+        assertThat(original.getSuggestedResult()).isEqualTo("AppSearch");
+        assertThat(rebuild.getSuggestedResult()).isEqualTo("IcingLib");
+    }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionSpecTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionSpecTest.java
new file mode 100644
index 0000000..0cc45ff
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionSpecTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2022 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.appsearch.app;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.ImmutableList;
+
+import org.junit.Test;
+
+// TODO(b/227356108): move this test to cts test once we un-hide search suggestion API.
+public class SearchSuggestionSpecTest {
+    @Test
+    public void testBuildDefaultSearchSuggestionSpec() {
+        SearchSuggestionSpec searchSuggestionSpec =
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/123).build();
+        assertThat(searchSuggestionSpec.getMaximumResultCount()).isEqualTo(123);
+        assertThat(searchSuggestionSpec.getFilterNamespaces()).isEmpty();
+    }
+
+    @Test
+    public void testBuildSearchSuggestionSpec() {
+        SearchSuggestionSpec searchSuggestionSpec =
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/123)
+                        .addFilterNamespaces("namespace1", "namespace2")
+                        .addFilterNamespaces(ImmutableList.of("namespace3"))
+                        .build();
+
+        assertThat(searchSuggestionSpec.getMaximumResultCount()).isEqualTo(123);
+        assertThat(searchSuggestionSpec.getFilterNamespaces())
+                .containsExactly("namespace1", "namespace2", "namespace3");
+    }
+
+    @Test
+    public void testRebuild() {
+        SearchSuggestionSpec.Builder builder =
+                new SearchSuggestionSpec.Builder(/*totalResultCount=*/123)
+                        .addFilterNamespaces("namespace1", "namespace2");
+
+        SearchSuggestionSpec original = builder.build();
+
+        builder.addFilterNamespaces("namespace3", "namespace4");
+        SearchSuggestionSpec rebuild = builder.build();
+
+        assertThat(original.getMaximumResultCount()).isEqualTo(123);
+        assertThat(original.getFilterNamespaces())
+                .containsExactly("namespace1", "namespace2");
+        assertThat(rebuild.getMaximumResultCount()).isEqualTo(123);
+        assertThat(rebuild.getFilterNamespaces())
+                .containsExactly("namespace1", "namespace2", "namespace3", "namespace4");
+    }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseInternalTest.java
similarity index 96%
rename from appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseTest.java
rename to appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseInternalTest.java
index 8aa6148..799584a 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseInternalTest.java
@@ -20,7 +20,8 @@
 
 import org.junit.Test;
 
-public class SetSchemaResponseTest {
+/** Tests for private APIs of {@link SetSchemaResponse}. */
+public class SetSchemaResponseInternalTest {
     @Test
     public void testRebuild() {
         SetSchemaResponse.MigrationFailure failure1 = new SetSchemaResponse.MigrationFailure(
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchResultCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchResultCtsTest.java
index 91dacdb..80094af 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchResultCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchResultCtsTest.java
@@ -23,6 +23,14 @@
 import org.junit.Test;
 
 public class AppSearchResultCtsTest {
+    @Test
+    public void testNewSuccessfulResult() {
+        AppSearchResult<String> result = AppSearchResult.newSuccessfulResult("String");
+        assertThat(result.getResultCode()).isEqualTo(AppSearchResult.RESULT_OK);
+        assertThat(result.getResultValue()).isEqualTo("String");
+        assertThat(result.isSuccess()).isTrue();
+        assertThat(result.getErrorMessage()).isNull();
+    }
 
     @Test
     public void testResultEquals_identical() {
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationCtsTestBase.java
index a980a60..59c17f5 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationCtsTestBase.java
@@ -118,12 +118,12 @@
 
     private AppSearchSession mDb;
 
-    protected abstract ListenableFuture<AppSearchSession> createSearchSession(
+    protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
             @NonNull String dbName);
 
     @Before
     public void setUp() throws Exception {
-        mDb = createSearchSession(DB_NAME).get();
+        mDb = createSearchSessionAsync(DB_NAME).get();
 
         // Cleanup whatever documents may still exist in these databases. This is needed in
         // addition to tearDown in case a test exited without completing properly.
@@ -135,13 +135,13 @@
                         .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build())
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(schema).setForceOverride(true).build()).get();
         GenericDocument doc = new GenericDocument.Builder<>(
                 "namespace", "id0", "testSchema")
                 .setPropertyString("subject", "testPut example1")
                 .setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
         assertThat(result.getSuccesses()).containsExactly("id0", null);
         assertThat(result.getFailures()).isEmpty();
@@ -150,7 +150,7 @@
     @After
     public void tearDown() throws Exception {
         // Cleanup whatever documents may still exist in these databases.
-        mDb.setSchema(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
     }
 
     @Test
@@ -165,7 +165,7 @@
                         .build())
                 .build();
 
-        mDb.setSchema(
+        mDb.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(B_C_Schema)
                         .setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
                         .setForceOverride(true)
@@ -185,7 +185,7 @@
                         .build())
                 .build();
 
-        mDb.setSchema(
+        mDb.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(B_NC_Schema)
                         .setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
                         .setForceOverride(true)
@@ -198,7 +198,7 @@
         AppSearchSchema NB_C_Schema = new AppSearchSchema.Builder("testSchema")
                 .build();
 
-        mDb.setSchema(
+        mDb.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(NB_C_Schema)
                         .setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
                         .setForceOverride(true)
@@ -212,7 +212,7 @@
         AppSearchSchema NB_C_Schema = new AppSearchSchema.Builder("testSchema")
                 .build();
 
-        mDb.setSchema(
+        mDb.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(NB_C_Schema)
                         .setMigrator("testSchema", INACTIVE_MIGRATOR)  //ND
                         .setForceOverride(true)
@@ -226,7 +226,7 @@
         AppSearchSchema NB_NC_Schema = new AppSearchSchema.Builder("testSchema")
                 .build();
 
-        mDb.setSchema(
+        mDb.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(NB_NC_Schema)
                         .setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
                         .setForceOverride(true)
@@ -239,7 +239,7 @@
         AppSearchSchema $B_$C_Schema = new AppSearchSchema.Builder("testSchema")
                 .build();
 
-        mDb.setSchema(
+        mDb.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas($B_$C_Schema)
                         .setMigrator("testSchema", INACTIVE_MIGRATOR)  //ND
                         .setForceOverride(true)
@@ -258,7 +258,7 @@
                         .build())
                 .build();
 
-        mDb.setSchema(
+        mDb.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(B_C_Schema)
                         .setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
                         .setVersion(2)     // upgrade version
@@ -277,7 +277,7 @@
                         .build())
                 .build();
 
-        mDb.setSchema(
+        mDb.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(B_NC_Schema)
                         .setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
                         .setForceOverride(true)
@@ -290,7 +290,7 @@
         AppSearchSchema NB_C_Schema = new AppSearchSchema.Builder("testSchema")
                 .build();
 
-        mDb.setSchema(
+        mDb.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(NB_C_Schema)
                         .setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
                         .setVersion(2)     // upgrade version
@@ -304,7 +304,7 @@
                 .build();
 
         ExecutionException exception = assertThrows(ExecutionException.class,
-                () -> mDb.setSchema(
+                () -> mDb.setSchemaAsync(
                         new SetSchemaRequest.Builder().addSchemas($B_C_Schema)
                                 .setMigrator("testSchema", INACTIVE_MIGRATOR)  //ND
                                 .setVersion(2)     // upgrade version
@@ -319,7 +319,7 @@
                 .build();
 
         ExecutionException exception = assertThrows(ExecutionException.class,
-                () -> mDb.setSchema(
+                () -> mDb.setSchemaAsync(
                         new SetSchemaRequest.Builder().addSchemas($B_$C_Schema)
                                 .setMigrator("testSchema", INACTIVE_MIGRATOR)  //ND
                                 .build()).get());
@@ -342,7 +342,7 @@
                         .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build())
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(schema).setForceOverride(true).build()).get();
 
         GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
@@ -354,7 +354,7 @@
                 .setPropertyString("To", "testTo example2")
                 .build();
 
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(doc1, doc2).build()));
         assertThat(result.getSuccesses()).containsExactly("id1", null, "id2", null);
         assertThat(result.getFailures()).isEmpty();
@@ -406,13 +406,13 @@
         };
 
         SetSchemaResponse setSchemaResponse =
-                mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+                mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
                         .setMigrator("testSchema", migrator)
                         .setVersion(2)     // upgrade version
                         .build()).get();
 
         // Check the schema has been saved
-        assertThat(mDb.getSchema().get().getSchemas()).containsExactly(newSchema);
+        assertThat(mDb.getSchemaAsync().get().getSchemas()).containsExactly(newSchema);
 
         assertThat(setSchemaResponse.getDeletedTypes()).isEmpty();
         assertThat(setSchemaResponse.getIncompatibleTypes())
@@ -458,7 +458,7 @@
                         .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build())
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(schema).setForceOverride(true).setVersion(3).build()).get();
 
         GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
@@ -466,7 +466,7 @@
                 .setPropertyString("To", "testTo example1")
                 .build();
 
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(doc1).build()));
         assertThat(result.getSuccesses()).containsExactly("id1", null);
         assertThat(result.getFailures()).isEmpty();
@@ -508,13 +508,13 @@
         };
 
         SetSchemaResponse setSchemaResponse =
-                mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+                mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
                         .setMigrator("testSchema", migrator)
                         .setVersion(1)     // downgrade version
                         .build()).get();
 
         // Check the schema has been saved
-        assertThat(mDb.getSchema().get().getSchemas()).containsExactly(newSchema);
+        assertThat(mDb.getSchemaAsync().get().getSchemas()).containsExactly(newSchema);
 
         assertThat(setSchemaResponse.getDeletedTypes()).isEmpty();
         assertThat(setSchemaResponse.getIncompatibleTypes())
@@ -546,7 +546,7 @@
                         .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build())
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(schema).setForceOverride(true).setVersion(3).build()).get();
 
         GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
@@ -554,7 +554,7 @@
                 .setPropertyString("To", "testTo example1")
                 .build();
 
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(doc1).build()));
         assertThat(result.getSuccesses()).containsExactly("id1", null);
         assertThat(result.getFailures()).isEmpty();
@@ -594,7 +594,7 @@
 
         // SetSchema with forceOverride=false
         ExecutionException exception = assertThrows(ExecutionException.class,
-                () -> mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+                () -> mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
                         .setMigrator("testSchema", migrator)
                         .setVersion(3)     // same version
                         .build()).get());
@@ -602,12 +602,12 @@
 
         // SetSchema with forceOverride=true
         SetSchemaResponse setSchemaResponse =
-                mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+                mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
                         .setMigrator("testSchema", migrator)
                         .setVersion(3)     // same version
                         .setForceOverride(true).build()).get();
 
-        assertThat(mDb.getSchema().get().getSchemas()).containsExactly(newSchema);
+        assertThat(mDb.getSchemaAsync().get().getSchemas()).containsExactly(newSchema);
 
         assertThat(setSchemaResponse.getDeletedTypes()).isEmpty();
         assertThat(setSchemaResponse.getIncompatibleTypes())
@@ -632,7 +632,7 @@
                         .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build())
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(schema).setForceOverride(true).setVersion(2).build()).get();
 
         GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
@@ -640,7 +640,7 @@
                 .setPropertyString("To", "testTo example1")
                 .build();
 
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(doc1).build()));
         assertThat(result.getSuccesses()).containsExactly("id1", null);
         assertThat(result.getFailures()).isEmpty();
@@ -680,7 +680,7 @@
 
         // SetSchema with forceOverride=false
         ExecutionException exception = assertThrows(ExecutionException.class,
-                () -> mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+                () -> mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
                         .setMigrator("testSchema", migrator)
                         .setVersion(4)     // upgrade version
                         .build()).get());
@@ -692,14 +692,14 @@
         // set the source schema to AppSearch
         AppSearchSchema schema = new AppSearchSchema.Builder("sourceSchema")
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(schema).setForceOverride(true).build()).get();
 
         // save a doc to the source type
         GenericDocument doc = new GenericDocument.Builder<>(
                 "namespace", "id1", "sourceSchema")
                 .setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
         assertThat(result.getSuccesses()).containsExactly("id1", null);
         assertThat(result.getFailures()).isEmpty();
@@ -730,7 +730,7 @@
         // SetSchema with forceOverride=false
         // Source type exist, destination type doesn't exist.
         ExecutionException exception = assertThrows(ExecutionException.class,
-                () -> mDb.setSchema(new SetSchemaRequest.Builder()
+                () -> mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                         .addSchemas(new AppSearchSchema.Builder("emptySchema").build())
                         .setMigrator("sourceSchema", migrator_sourceToNowhere)
                         .setVersion(2).build())   // upgrade version
@@ -742,7 +742,7 @@
         // SetSchema with forceOverride=true
         // Source type exist, destination type doesn't exist.
         exception = assertThrows(ExecutionException.class,
-                () -> mDb.setSchema(new SetSchemaRequest.Builder()
+                () -> mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                         .addSchemas(new AppSearchSchema.Builder("emptySchema").build())
                         .setMigrator("sourceSchema", migrator_sourceToNowhere)
                         .setForceOverride(true)
@@ -758,7 +758,7 @@
         // set the destination schema to AppSearch
         AppSearchSchema destinationSchema =
                 new AppSearchSchema.Builder("destinationSchema").build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(destinationSchema).setForceOverride(true).build()).get();
 
         Migrator migrator_nowhereToDestination = new Migrator() {
@@ -787,7 +787,7 @@
         // no matter force override or not, the migrator won't be invoked
         // SetSchema with forceOverride=false
         SetSchemaResponse setSchemaResponse =
-                mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(destinationSchema)
+                mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(destinationSchema)
                         .addSchemas(new AppSearchSchema.Builder("emptySchema").build())
                         .setMigrator("nonExistSchema", migrator_nowhereToDestination)
                         .setVersion(2) //  upgrade version
@@ -796,7 +796,7 @@
 
         // SetSchema with forceOverride=true
         setSchemaResponse =
-                mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(destinationSchema)
+                mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(destinationSchema)
                         .addSchemas(new AppSearchSchema.Builder("emptySchema").build())
                         .setMigrator("nonExistSchema", migrator_nowhereToDestination)
                         .setVersion(2) //  upgrade version
@@ -807,7 +807,7 @@
     @Test
     public void testSchemaMigration_nowhereToNowhere() throws Exception {
         // set empty schema
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .setForceOverride(true).build()).get();
         Migrator migrator_nowhereToNowhere = new Migrator() {
             @Override
@@ -835,7 +835,7 @@
         // no matter force override or not, the migrator won't be invoked
         // SetSchema with forceOverride=false
         SetSchemaResponse setSchemaResponse =
-                mDb.setSchema(new SetSchemaRequest.Builder()
+                mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                         .addSchemas(new AppSearchSchema.Builder("emptySchema").build())
                         .setMigrator("nonExistSchema", migrator_nowhereToNowhere)
                         .setVersion(2)  //  upgrade version
@@ -844,7 +844,7 @@
 
         // SetSchema with forceOverride=true
         setSchemaResponse =
-                mDb.setSchema(new SetSchemaRequest.Builder()
+                mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                         .addSchemas(new AppSearchSchema.Builder("emptySchema").build())
                         .setMigrator("nonExistSchema", migrator_nowhereToNowhere)
                         .setVersion(2) //  upgrade version
@@ -857,13 +857,13 @@
         // set the source schema to AppSearch
         AppSearchSchema sourceSchema = new AppSearchSchema.Builder("sourceSchema")
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(sourceSchema).setForceOverride(true).build()).get();
 
         // save a doc to the source type
         GenericDocument doc = new GenericDocument.Builder<>(
                 "namespace", "id1", "sourceSchema").build();
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
         assertThat(result.getSuccesses()).containsExactly("id1", null);
         assertThat(result.getFailures()).isEmpty();
@@ -897,7 +897,7 @@
         };
 
         // SetSchema with forceOverride=false and increase overall version
-        SetSchemaResponse setSchemaResponse = mDb.setSchema(new SetSchemaRequest.Builder()
+        SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(destinationSchema)
                 .setMigrator("sourceSchema", migrator)
                 .setForceOverride(false)
@@ -925,7 +925,7 @@
                         .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
                         .build())
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(sourceSchema).setForceOverride(true).build()).get();
 
         // save a child and an adult to the Person type
@@ -935,7 +935,7 @@
         GenericDocument adultDoc = new GenericDocument.Builder<>(
                 "namespace", "Person2", "Person")
                 .setPropertyLong("Age", 36).build();
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(childDoc, adultDoc).build()));
         assertThat(result.getSuccesses()).containsExactly("Person1", null, "Person2", null);
         assertThat(result.getFailures()).isEmpty();
@@ -987,7 +987,7 @@
                 .build();
 
         // SetSchema with forceOverride=false and increase overall version
-        SetSchemaResponse setSchemaResponse = mDb.setSchema(new SetSchemaRequest.Builder()
+        SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(adultSchema, childSchema)
                 .setMigrator("Person", migrator)
                 .setForceOverride(false)
@@ -1031,7 +1031,7 @@
                         .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
                         .build())
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(sourceSchemaA, sourceSchemaB).setForceOverride(true).build()).get();
 
         // save 100 docs to each type
@@ -1047,7 +1047,7 @@
                     .setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
             putRequestBuilder.addGenericDocuments(docInA, docInB);
         }
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 putRequestBuilder.build()));
         assertThat(result.getFailures()).isEmpty();
 
@@ -1141,7 +1141,7 @@
         };
 
         // SetSchema with forceOverride=false and increase overall version
-        SetSchemaResponse setSchemaResponse = mDb.setSchema(new SetSchemaRequest.Builder()
+        SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(destinationSchemaB, destinationSchemaC, destinationSchemaD)
                 .setMigrator("schemaA", migratorA)
                 .setMigrator("schemaB", migratorB)
@@ -1280,7 +1280,7 @@
                         .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build())
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(typeA).setForceOverride(true).setVersion(1).build()).get();
 
         // save a doc to version 1.
@@ -1288,13 +1288,13 @@
                 "namespace", "id", "TypeA")
                 .setPropertyString("subject", "subject")
                 .setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
         assertThat(result.getSuccesses()).containsExactly("id", null);
         assertThat(result.getFailures()).isEmpty();
 
         // update to version 4.
-        SetSchemaResponse setSchemaResponse = mDb.setSchema(MULTI_STEP_REQUEST).get();
+        SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(MULTI_STEP_REQUEST).get();
         assertThat(setSchemaResponse.getDeletedTypes()).containsExactly("TypeA");
         assertThat(setSchemaResponse.getIncompatibleTypes()).isEmpty();
         assertThat(setSchemaResponse.getMigratedTypes()).containsExactly("TypeA");
@@ -1329,7 +1329,7 @@
                         .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build())
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(typeA).setForceOverride(true).setVersion(2).build()).get();
 
         // save a doc to version 2.
@@ -1338,13 +1338,13 @@
                 .setPropertyString("subject", "subject")
                 .setPropertyString("body", "bodyFromA")
                 .setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
         assertThat(result.getSuccesses()).containsExactly("id", null);
         assertThat(result.getFailures()).isEmpty();
 
         // update to version 4.
-        SetSchemaResponse setSchemaResponse = mDb.setSchema(MULTI_STEP_REQUEST).get();
+        SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(MULTI_STEP_REQUEST).get();
         assertThat(setSchemaResponse.getDeletedTypes()).containsExactly("TypeA");
         assertThat(setSchemaResponse.getIncompatibleTypes()).isEmpty();
         assertThat(setSchemaResponse.getMigratedTypes()).containsExactly("TypeA");
@@ -1375,7 +1375,7 @@
                         .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build())
                 .build();
-        mDb.setSchema(new SetSchemaRequest.Builder()
+        mDb.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(typeA).setForceOverride(true).setVersion(3).build()).get();
 
         // save a doc to version 2.
@@ -1384,13 +1384,13 @@
                 .setPropertyString("subject", "subject")
                 .setPropertyString("body", "bodyFromB")
                 .setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
         assertThat(result.getSuccesses()).containsExactly("id", null);
         assertThat(result.getFailures()).isEmpty();
 
         // update to version 4.
-        SetSchemaResponse setSchemaResponse = mDb.setSchema(MULTI_STEP_REQUEST).get();
+        SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(MULTI_STEP_REQUEST).get();
         assertThat(setSchemaResponse.getDeletedTypes()).isEmpty();
         assertThat(setSchemaResponse.getIncompatibleTypes()).containsExactly("TypeB");
         assertThat(setSchemaResponse.getMigratedTypes()).containsExactly("TypeB");
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationLocalCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationLocalCtsTest.java
index 6525ddd..b6821a0 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationLocalCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationLocalCtsTest.java
@@ -27,9 +27,9 @@
 
 public class AppSearchSchemaMigrationLocalCtsTest extends AppSearchSchemaMigrationCtsTestBase{
     @Override
-    protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
         Context context = ApplicationProvider.getApplicationContext();
-        return LocalStorage.createSearchSession(
+        return LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, dbName).build());
     }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationPlatformCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationPlatformCtsTest.java
index 405d82e..f2b0e7a 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationPlatformCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationPlatformCtsTest.java
@@ -30,9 +30,9 @@
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
 public class AppSearchSchemaMigrationPlatformCtsTest extends AppSearchSchemaMigrationCtsTestBase{
     @Override
-    protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
         Context context = ApplicationProvider.getApplicationContext();
-        return PlatformStorage.createSearchSession(
+        return PlatformStorage.createSearchSessionAsync(
                 new PlatformStorage.SearchContext.Builder(context, dbName).build());
     }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
index 9d817be..bc1e02c 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
@@ -26,6 +26,8 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.junit.Assert.assertThrows;
+import static org.junit.Assume.assumeFalse;
+import static org.junit.Assume.assumeTrue;
 
 import android.content.Context;
 
@@ -40,6 +42,8 @@
 import androidx.appsearch.app.GenericDocument;
 import androidx.appsearch.app.GetByDocumentIdRequest;
 import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.PropertyPath;
 import androidx.appsearch.app.PutDocumentsRequest;
 import androidx.appsearch.app.RemoveByDocumentIdRequest;
 import androidx.appsearch.app.ReportUsageRequest;
@@ -51,9 +55,11 @@
 import androidx.appsearch.cts.app.customer.EmailDocument;
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.testutil.AppSearchEmail;
+import androidx.collection.ArrayMap;
 import androidx.test.core.app.ApplicationProvider;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 
@@ -62,9 +68,11 @@
 import org.junit.Test;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
@@ -78,16 +86,16 @@
     private AppSearchSession mDb1;
     private AppSearchSession mDb2;
 
-    protected abstract ListenableFuture<AppSearchSession> createSearchSession(
+    protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
             @NonNull String dbName);
 
-    protected abstract ListenableFuture<AppSearchSession> createSearchSession(
+    protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
             @NonNull String dbName, @NonNull ExecutorService executor);
 
     @Before
     public void setUp() throws Exception {
-        mDb1 = createSearchSession(DB_NAME_1).get();
-        mDb2 = createSearchSession(DB_NAME_2).get();
+        mDb1 = createSearchSessionAsync(DB_NAME_1).get();
+        mDb2 = createSearchSessionAsync(DB_NAME_2).get();
 
         // Cleanup whatever documents may still exist in these databases. This is needed in
         // addition to tearDown in case a test exited without completing properly.
@@ -101,9 +109,9 @@
     }
 
     private void cleanup() throws Exception {
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
-        mDb2.setSchema(
+        mDb2.setSchemaAsync(
                 new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
     }
 
@@ -121,19 +129,19 @@
                         .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build()
                 ).build();
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
     }
 
     @Test
     public void testSetSchema_Failure() throws Exception {
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
         AppSearchSchema emailSchema1 = new AppSearchSchema.Builder(AppSearchEmail.SCHEMA_TYPE)
                 .build();
 
         Throwable throwable = assertThrows(ExecutionException.class,
-                () -> mDb1.setSchema(new SetSchemaRequest.Builder()
+                () -> mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                         .addSchemas(emailSchema1).build()).get()).getCause();
         assertThat(throwable).isInstanceOf(AppSearchException.class);
         AppSearchException exception = (AppSearchException) throwable;
@@ -142,7 +150,7 @@
         assertThat(exception).hasMessageThat().contains("Incompatible types: {builtin:Email}");
 
         throwable = assertThrows(ExecutionException.class,
-                () -> mDb1.setSchema(new SetSchemaRequest.Builder().build()).get()).getCause();
+                () -> mDb1.setSchemaAsync(new SetSchemaRequest.Builder().build()).get()).getCause();
 
         assertThat(throwable).isInstanceOf(AppSearchException.class);
         exception = (AppSearchException) throwable;
@@ -166,17 +174,17 @@
                         .build()
                 ).build();
 
-        mDb1.setSchema(new SetSchemaRequest.Builder().addSchemas(schema)
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema)
                 .setVersion(1).build()).get();
 
-        Set<AppSearchSchema> actualSchemaTypes = mDb1.getSchema().get().getSchemas();
+        Set<AppSearchSchema> actualSchemaTypes = mDb1.getSchemaAsync().get().getSchemas();
         assertThat(actualSchemaTypes).containsExactly(schema);
 
         // increase version number
-        mDb1.setSchema(new SetSchemaRequest.Builder().addSchemas(schema)
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema)
                 .setVersion(2).build()).get();
 
-        GetSchemaResponse getSchemaResponse = mDb1.getSchema().get();
+        GetSchemaResponse getSchemaResponse = mDb1.getSchemaAsync().get();
         assertThat(getSchemaResponse.getSchemas()).containsExactly(schema);
         assertThat(getSchemaResponse.getVersion()).isEqualTo(2);
     }
@@ -197,18 +205,18 @@
                 ).build();
 
         // set different version number to different database.
-        mDb1.setSchema(new SetSchemaRequest.Builder().addSchemas(schema)
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema)
                 .setVersion(135).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder().addSchemas(schema)
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema)
                 .setVersion(246).build()).get();
 
 
         // check the version has been set correctly.
-        GetSchemaResponse getSchemaResponse = mDb1.getSchema().get();
+        GetSchemaResponse getSchemaResponse = mDb1.getSchemaAsync().get();
         assertThat(getSchemaResponse.getSchemas()).containsExactly(schema);
         assertThat(getSchemaResponse.getVersion()).isEqualTo(135);
 
-        getSchemaResponse = mDb2.getSchema().get();
+        getSchemaResponse = mDb2.getSchemaAsync().get();
         assertThat(getSchemaResponse.getSchemas()).containsExactly(schema);
         assertThat(getSchemaResponse.getVersion()).isEqualTo(246);
     }
@@ -217,7 +225,7 @@
 
     @Test
     public void testSetSchema_addDocumentClasses() throws Exception {
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addDocumentClasses(EmailDocument.class).build()).get();
     }
 // @exportToFramework:endStrip()
@@ -256,13 +264,13 @@
         SetSchemaRequest request2 = new SetSchemaRequest.Builder()
                 .addSchemas(emailSchema2).addDocumentClasses(EmailDocument.class).build();
 
-        mDb1.setSchema(request1).get();
-        mDb2.setSchema(request2).get();
+        mDb1.setSchemaAsync(request1).get();
+        mDb2.setSchemaAsync(request2).get();
 
-        Set<AppSearchSchema> actual1 = mDb1.getSchema().get().getSchemas();
+        Set<AppSearchSchema> actual1 = mDb1.getSchemaAsync().get().getSchemas();
         assertThat(actual1).hasSize(2);
         assertThat(actual1).isEqualTo(request1.getSchemas());
-        Set<AppSearchSchema> actual2 = mDb2.getSchema().get().getSchemas();
+        Set<AppSearchSchema> actual2 = mDb2.getSchemaAsync().get().getSchemas();
         assertThat(actual2).hasSize(2);
         assertThat(actual2).isEqualTo(request2.getSchemas());
     }
@@ -296,9 +304,9 @@
                 .build();
 
         // Add it to AppSearch and then obtain it again
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(inSchema, AppSearchEmail.SCHEMA).build()).get();
-        GetSchemaResponse response = mDb1.getSchema().get();
+        GetSchemaResponse response = mDb1.getSchemaAsync().get();
         List<AppSearchSchema> schemas = new ArrayList<>(response.getSchemas());
         assertThat(schemas).containsExactly(inSchema, AppSearchEmail.SCHEMA);
         AppSearchSchema outSchema;
@@ -351,87 +359,213 @@
     }
 
     @Test
+    public void testGetSchema_visibilitySetting() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(
+                Features.ADD_PERMISSIONS_AND_GET_VISIBILITY));
+        AppSearchSchema emailSchema = new AppSearchSchema.Builder("Email1")
+                .addProperty(new StringPropertyConfig.Builder("subject")
+                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                        .build()
+                ).addProperty(new StringPropertyConfig.Builder("body")
+                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                        .build()
+                ).build();
+
+        byte[] shar256Cert1 = new byte[32];
+        Arrays.fill(shar256Cert1, (byte) 1);
+        byte[] shar256Cert2 = new byte[32];
+        Arrays.fill(shar256Cert2, (byte) 2);
+        PackageIdentifier packageIdentifier1 =
+                new PackageIdentifier("pkgFoo", shar256Cert1);
+        PackageIdentifier packageIdentifier2 =
+                new PackageIdentifier("pkgBar", shar256Cert2);
+        SetSchemaRequest request = new SetSchemaRequest.Builder()
+                .addSchemas(emailSchema)
+                .setSchemaTypeDisplayedBySystem("Email1", /*displayed=*/false)
+                .setSchemaTypeVisibilityForPackage("Email1", /*visible=*/true,
+                        packageIdentifier1)
+                .setSchemaTypeVisibilityForPackage("Email1", /*visible=*/true,
+                        packageIdentifier2)
+                .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+                .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA))
+                .build();
+
+        mDb1.setSchemaAsync(request).get();
+
+        GetSchemaResponse getSchemaResponse = mDb1.getSchemaAsync().get();
+        Set<AppSearchSchema> actual = getSchemaResponse.getSchemas();
+        assertThat(actual).hasSize(1);
+        assertThat(actual).isEqualTo(request.getSchemas());
+        assertThat(getSchemaResponse.getSchemaTypesNotDisplayedBySystem())
+                .containsExactly("Email1");
+        assertThat(getSchemaResponse.getSchemaTypesVisibleToPackages())
+                .containsExactly("Email1", ImmutableSet.of(
+                        packageIdentifier1, packageIdentifier2));
+        assertThat(getSchemaResponse.getRequiredPermissionsForSchemaTypeVisibility())
+                .containsExactly("Email1", ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS,
+                                SetSchemaRequest.READ_CALENDAR),
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)));
+    }
+
+    @Test
+    public void testGetSchema_visibilitySetting_notSupported() throws Exception {
+        assumeFalse(mDb1.getFeatures().isFeatureSupported(
+                Features.ADD_PERMISSIONS_AND_GET_VISIBILITY));
+        AppSearchSchema emailSchema = new AppSearchSchema.Builder("Email1")
+                .addProperty(new StringPropertyConfig.Builder("subject")
+                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                        .build()
+                ).addProperty(new StringPropertyConfig.Builder("body")
+                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                        .build()
+                ).build();
+
+        byte[] shar256Cert1 = new byte[32];
+        Arrays.fill(shar256Cert1, (byte) 1);
+        byte[] shar256Cert2 = new byte[32];
+        Arrays.fill(shar256Cert2, (byte) 2);
+        PackageIdentifier packageIdentifier1 =
+                new PackageIdentifier("pkgFoo", shar256Cert1);
+        PackageIdentifier packageIdentifier2 =
+                new PackageIdentifier("pkgBar", shar256Cert2);
+        SetSchemaRequest request = new SetSchemaRequest.Builder()
+                .addSchemas(emailSchema)
+                .setSchemaTypeDisplayedBySystem("Email1", /*displayed=*/false)
+                .setSchemaTypeVisibilityForPackage("Email1", /*visible=*/true,
+                        packageIdentifier1)
+                .setSchemaTypeVisibilityForPackage("Email1", /*visible=*/true,
+                        packageIdentifier2)
+                .build();
+
+        mDb1.setSchemaAsync(request).get();
+
+        GetSchemaResponse getSchemaResponse = mDb1.getSchemaAsync().get();
+        Set<AppSearchSchema> actual = getSchemaResponse.getSchemas();
+        assertThat(actual).hasSize(1);
+        assertThat(actual).isEqualTo(request.getSchemas());
+        assertThrows(
+                UnsupportedOperationException.class,
+                () -> getSchemaResponse.getSchemaTypesNotDisplayedBySystem());
+        assertThrows(
+                UnsupportedOperationException.class,
+                () -> getSchemaResponse.getSchemaTypesVisibleToPackages());
+        assertThrows(
+                UnsupportedOperationException.class,
+                () -> getSchemaResponse.getRequiredPermissionsForSchemaTypeVisibility());
+    }
+
+    @Test
+    public void testSetSchema_visibilitySettingPermission_notSupported() {
+        assumeFalse(mDb1.getFeatures().isFeatureSupported(
+                Features.ADD_PERMISSIONS_AND_GET_VISIBILITY));
+        AppSearchSchema emailSchema = new AppSearchSchema.Builder("Email1").build();
+
+        SetSchemaRequest request = new SetSchemaRequest.Builder()
+                .addSchemas(emailSchema)
+                .setSchemaTypeDisplayedBySystem("Email1", /*displayed=*/false)
+                .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS))
+                .build();
+
+        assertThrows(UnsupportedOperationException.class, () ->
+                mDb1.setSchemaAsync(request).get());
+    }
+
+    @Test
     public void testGetNamespaces() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        assertThat(mDb1.getNamespaces().get()).isEmpty();
+        assertThat(mDb1.getNamespacesAsync().get()).isEmpty();
 
         // Index a document
-        checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder()
+        checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
                 .addGenericDocuments(new AppSearchEmail.Builder("namespace1", "id1").build())
                 .build()));
-        assertThat(mDb1.getNamespaces().get()).containsExactly("namespace1");
+        assertThat(mDb1.getNamespacesAsync().get()).containsExactly("namespace1");
 
         // Index additional data
-        checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder()
+        checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
                 .addGenericDocuments(
                         new AppSearchEmail.Builder("namespace2", "id1").build(),
                         new AppSearchEmail.Builder("namespace2", "id2").build(),
                         new AppSearchEmail.Builder("namespace3", "id1").build())
                 .build()));
-        assertThat(mDb1.getNamespaces().get()).containsExactly(
+        assertThat(mDb1.getNamespacesAsync().get()).containsExactly(
                 "namespace1", "namespace2", "namespace3");
 
         // Remove namespace2/id2 -- namespace2 should still exist because of namespace2/id1
         checkIsBatchResultSuccess(
-                mDb1.remove(new RemoveByDocumentIdRequest.Builder("namespace2").addIds(
+                mDb1.removeAsync(new RemoveByDocumentIdRequest.Builder("namespace2").addIds(
                         "id2").build()));
-        assertThat(mDb1.getNamespaces().get()).containsExactly(
+        assertThat(mDb1.getNamespacesAsync().get()).containsExactly(
                 "namespace1", "namespace2", "namespace3");
 
         // Remove namespace2/id1 -- namespace2 should now be gone
         checkIsBatchResultSuccess(
-                mDb1.remove(new RemoveByDocumentIdRequest.Builder("namespace2").addIds(
+                mDb1.removeAsync(new RemoveByDocumentIdRequest.Builder("namespace2").addIds(
                         "id1").build()));
-        assertThat(mDb1.getNamespaces().get()).containsExactly("namespace1", "namespace3");
+        assertThat(mDb1.getNamespacesAsync().get()).containsExactly("namespace1", "namespace3");
 
         // Make sure the list of namespaces is preserved after restart
         mDb1.close();
-        mDb1 = createSearchSession(DB_NAME_1).get();
-        assertThat(mDb1.getNamespaces().get()).containsExactly("namespace1", "namespace3");
+        mDb1 = createSearchSessionAsync(DB_NAME_1).get();
+        assertThat(mDb1.getNamespacesAsync().get()).containsExactly("namespace1", "namespace3");
     }
 
     @Test
     public void testGetNamespaces_dbIsolation() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        mDb2.setSchema(
+        mDb2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        assertThat(mDb1.getNamespaces().get()).isEmpty();
-        assertThat(mDb2.getNamespaces().get()).isEmpty();
+        assertThat(mDb1.getNamespacesAsync().get()).isEmpty();
+        assertThat(mDb2.getNamespacesAsync().get()).isEmpty();
 
         // Index documents
-        checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder()
+        checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
                 .addGenericDocuments(new AppSearchEmail.Builder("namespace1_db1", "id1").build())
                 .build()));
-        checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder()
+        checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
                 .addGenericDocuments(new AppSearchEmail.Builder("namespace2_db1", "id1").build())
                 .build()));
-        checkIsBatchResultSuccess(mDb2.put(new PutDocumentsRequest.Builder()
+        checkIsBatchResultSuccess(mDb2.putAsync(new PutDocumentsRequest.Builder()
                 .addGenericDocuments(new AppSearchEmail.Builder("namespace_db2", "id1").build())
                 .build()));
-        assertThat(mDb1.getNamespaces().get()).containsExactly("namespace1_db1", "namespace2_db1");
-        assertThat(mDb2.getNamespaces().get()).containsExactly("namespace_db2");
+        assertThat(mDb1.getNamespacesAsync().get())
+                .containsExactly("namespace1_db1", "namespace2_db1");
+        assertThat(mDb2.getNamespacesAsync().get()).containsExactly("namespace_db2");
 
         // Make sure the list of namespaces is preserved after restart
         mDb1.close();
-        mDb1 = createSearchSession(DB_NAME_1).get();
-        assertThat(mDb1.getNamespaces().get()).containsExactly("namespace1_db1", "namespace2_db1");
-        assertThat(mDb2.getNamespaces().get()).containsExactly("namespace_db2");
+        mDb1 = createSearchSessionAsync(DB_NAME_1).get();
+        assertThat(mDb1.getNamespacesAsync().get())
+                .containsExactly("namespace1_db1", "namespace2_db1");
+        assertThat(mDb2.getNamespacesAsync().get()).containsExactly("namespace_db2");
     }
 
     @Test
     public void testGetSchema_emptyDB() throws Exception {
-        GetSchemaResponse getSchemaResponse = mDb1.getSchema().get();
+        GetSchemaResponse getSchemaResponse = mDb1.getSchemaAsync().get();
         assertThat(getSchemaResponse.getVersion()).isEqualTo(0);
     }
 
     @Test
     public void testPutDocuments() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a document
@@ -442,18 +576,135 @@
                 .setBody("This is the body of the testPut email")
                 .build();
 
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
         assertThat(result.getSuccesses()).containsExactly("id1", null);
         assertThat(result.getFailures()).isEmpty();
     }
 
+    @Test
+    public void testPutDocuments_emptyProperties() throws Exception {
+        // Schema registration. Due to b/204677124 is fixed in Android T. We have different
+        // behaviour when set empty array to bytes and documents between local and platform storage.
+        // This test only test String, long, boolean and double, for byte array and Document will be
+        // test in backend's specific test.
+        AppSearchSchema schema = new AppSearchSchema.Builder("testSchema")
+                .addProperty(new StringPropertyConfig.Builder("string")
+                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+                        .setIndexingType(StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                        .build())
+                .addProperty(new AppSearchSchema.LongPropertyConfig.Builder("long")
+                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+                        .build())
+                .addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("double")
+                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+                        .build())
+                .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder("boolean")
+                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+                        .build())
+                .build();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
+                .addSchemas(schema, AppSearchEmail.SCHEMA).build()).get();
+
+        // Index a document
+        GenericDocument document = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
+                .setPropertyBoolean("boolean")
+                .setPropertyString("string")
+                .setPropertyDouble("double")
+                .setPropertyLong("long")
+                .build();
+
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(document).build()));
+        assertThat(result.getSuccesses()).containsExactly("id1", null);
+        assertThat(result.getFailures()).isEmpty();
+
+        GetByDocumentIdRequest request = new GetByDocumentIdRequest.Builder("namespace")
+                .addIds("id1")
+                .build();
+        List<GenericDocument> outDocuments = doGet(mDb1, request);
+        assertThat(outDocuments).hasSize(1);
+        GenericDocument outDocument = outDocuments.get(0);
+        assertThat(outDocument.getPropertyBooleanArray("boolean")).isEmpty();
+        assertThat(outDocument.getPropertyStringArray("string")).isEmpty();
+        assertThat(outDocument.getPropertyDoubleArray("double")).isEmpty();
+        assertThat(outDocument.getPropertyLongArray("long")).isEmpty();
+    }
+
+    @Test
+    public void testPutLargeDocumentBatch() throws Exception {
+        // Schema registration
+        AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+                new StringPropertyConfig.Builder("body")
+                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                        .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                        .build())
+                .build();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+        // Creates a large batch of Documents, since we have max document size in Framework which is
+        // 512KiB, we will create 1KiB * 4000 docs = 4MiB total size > 1MiB binder transaction limit
+        char[] chars = new char[1024];  // 1KiB
+        Arrays.fill(chars, ' ');
+        String body = String.valueOf(chars) + "the end.";
+        List<GenericDocument> inDocuments = new ArrayList<>();
+        GetByDocumentIdRequest.Builder getByDocumentIdRequestBuilder =
+                new GetByDocumentIdRequest.Builder("namespace");
+        for (int i = 0; i < 4000; i++) {
+            GenericDocument inDocument = new GenericDocument.Builder<>(
+                    "namespace", "id" + i, "Type")
+                    .setPropertyString("body", body)
+                    .build();
+            inDocuments.add(inDocument);
+            getByDocumentIdRequestBuilder.addIds("id" + i);
+        }
+
+        // Index documents.
+        AppSearchBatchResult<String, Void> result =
+                mDb1.putAsync(new PutDocumentsRequest.Builder().addGenericDocuments(inDocuments)
+                        .build()).get();
+        assertThat(result.isSuccess()).isTrue();
+
+        // Query those documents and verify they are same with the input. This also verify
+        // AppSearchResult could handle large batch.
+        SearchResults searchResults = mDb1.search("end", new SearchSpec.Builder()
+                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                .setResultCountPerPage(4000)
+                .build());
+        List<GenericDocument> outDocuments = convertSearchResultsToDocuments(searchResults);
+
+        // Create a map to assert the output is same to the input in O(n).
+        // containsExactlyElementsIn will create two iterators and the complexity is O(n^2).
+        Map<String, GenericDocument> outMap = new ArrayMap<>(outDocuments.size());
+        for (int i = 0; i < outDocuments.size(); i++) {
+            outMap.put(outDocuments.get(i).getId(), outDocuments.get(i));
+        }
+        for (int i = 0; i < inDocuments.size(); i++) {
+            GenericDocument inDocument = inDocuments.get(i);
+            assertThat(inDocument).isEqualTo(outMap.get(inDocument.getId()));
+            outMap.remove(inDocument.getId());
+        }
+        assertThat(outMap).isEmpty();
+
+        // Get by document ID and verify they are same with the input. This also verify
+        // AppSearchBatchResult could handle large batch.
+        AppSearchBatchResult<String, GenericDocument> batchResult = mDb1.getByDocumentIdAsync(
+                getByDocumentIdRequestBuilder.build()).get();
+        assertThat(batchResult.isSuccess()).isTrue();
+        for (int i = 0; i < inDocuments.size(); i++) {
+            GenericDocument inDocument = inDocuments.get(i);
+            assertThat(batchResult.getSuccesses().get(inDocument.getId())).isEqualTo(inDocument);
+        }
+    }
+
 // @exportToFramework:startStrip()
 
     @Test
     public void testPut_addDocumentClasses() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addDocumentClasses(EmailDocument.class).build()).get();
 
         // Index a document
@@ -463,7 +714,7 @@
         email.subject = "testPut example";
         email.body = "This is the body of the testPut email";
 
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addDocuments(email).build()));
         assertThat(result.getSuccesses()).containsExactly("id1", null);
         assertThat(result.getFailures()).isEmpty();
@@ -497,7 +748,7 @@
                         .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
                         .build())
                 .build();
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(oldEmailSchema).build()).get();
 
         // Try to index a gift. This should fail as it's not in the schema.
@@ -505,19 +756,19 @@
                 new GenericDocument.Builder<>("namespace", "gift1", "Gift").setPropertyLong("price",
                         5).build();
         AppSearchBatchResult<String, Void> result =
-                mDb1.put(
+                mDb1.putAsync(
                         new PutDocumentsRequest.Builder().addGenericDocuments(gift).build()).get();
         assertThat(result.isSuccess()).isFalse();
         assertThat(result.getFailures().get("gift1").getResultCode())
                 .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
 
         // Update the schema to include the gift and update email with a new field
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(newEmailSchema, giftSchema).build()).get();
 
         // Try to index the document again, which should now work
         checkIsBatchResultSuccess(
-                mDb1.put(
+                mDb1.putAsync(
                         new PutDocumentsRequest.Builder().addGenericDocuments(gift).build()));
 
         // Indexing an email with a body should also work
@@ -526,7 +777,7 @@
                 .setBody("This is the body of the testPut email")
                 .build();
         checkIsBatchResultSuccess(
-                mDb1.put(
+                mDb1.putAsync(
                         new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
     }
 
@@ -540,14 +791,14 @@
                         .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build())
                 .build();
-        mDb1.setSchema(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
 
         // Index an email and check it present.
         AppSearchEmail email = new AppSearchEmail.Builder("namespace", "email1")
                 .setSubject("testPut example")
                 .build();
         checkIsBatchResultSuccess(
-                mDb1.put(
+                mDb1.putAsync(
                         new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
         List<GenericDocument> outDocuments =
                 doGet(mDb1, "namespace", "email1");
@@ -558,7 +809,7 @@
         // Try to remove the email schema. This should fail as it's an incompatible change.
         Throwable failResult1 = assertThrows(
                 ExecutionException.class,
-                () -> mDb1.setSchema(new SetSchemaRequest.Builder().build()).get()).getCause();
+                () -> mDb1.setSchemaAsync(new SetSchemaRequest.Builder().build()).get()).getCause();
         assertThat(failResult1).isInstanceOf(AppSearchException.class);
         assertThat(failResult1).hasMessageThat().contains("Schema is incompatible");
         assertThat(failResult1).hasMessageThat().contains(
@@ -566,10 +817,10 @@
 
         // Try to remove the email schema again, which should now work as we set forceOverride to
         // be true.
-        mDb1.setSchema(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
 
         // Make sure the indexed email is gone.
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace")
                         .addIds("email1")
                         .build()).get();
@@ -581,7 +832,7 @@
         AppSearchEmail email2 = new AppSearchEmail.Builder("namespace", "email2")
                 .setSubject("testPut example")
                 .build();
-        AppSearchBatchResult<String, Void> failResult2 = mDb1.put(
+        AppSearchBatchResult<String, Void> failResult2 = mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()).get();
         assertThat(failResult2.isSuccess()).isFalse();
         assertThat(failResult2.getFailures().get("email2").getErrorMessage())
@@ -599,15 +850,15 @@
                         .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
                         .build())
                 .build();
-        mDb1.setSchema(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
 
         // Index an email and check it present in database1.
         AppSearchEmail email1 = new AppSearchEmail.Builder("namespace", "email1")
                 .setSubject("testPut example")
                 .build();
         checkIsBatchResultSuccess(
-                mDb1.put(
+                mDb1.putAsync(
                         new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
         List<GenericDocument> outDocuments =
                 doGet(mDb1, "namespace", "email1");
@@ -620,7 +871,7 @@
                 .setSubject("testPut example")
                 .build();
         checkIsBatchResultSuccess(
-                mDb2.put(
+                mDb2.putAsync(
                         new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()));
         outDocuments = doGet(mDb2, "namespace", "email2");
         assertThat(outDocuments).hasSize(1);
@@ -631,7 +882,7 @@
         // change.
         Throwable failResult1 = assertThrows(
                 ExecutionException.class,
-                () -> mDb1.setSchema(new SetSchemaRequest.Builder().build()).get()).getCause();
+                () -> mDb1.setSchemaAsync(new SetSchemaRequest.Builder().build()).get()).getCause();
         assertThat(failResult1).isInstanceOf(AppSearchException.class);
         assertThat(failResult1).hasMessageThat().contains("Schema is incompatible");
         assertThat(failResult1).hasMessageThat().contains(
@@ -639,10 +890,10 @@
 
         // Try to remove the email schema again, which should now work as we set forceOverride to
         // be true.
-        mDb1.setSchema(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
 
         // Make sure the indexed email is gone in database 1.
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace")
                         .addIds("email1").build()).get();
         assertThat(getResult.isSuccess()).isFalse();
@@ -653,7 +904,7 @@
         AppSearchEmail email3 = new AppSearchEmail.Builder("namespace", "email3")
                 .setSubject("testPut example")
                 .build();
-        AppSearchBatchResult<String, Void> failResult2 = mDb1.put(
+        AppSearchBatchResult<String, Void> failResult2 = mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email3).build()).get();
         assertThat(failResult2.isSuccess()).isFalse();
         assertThat(failResult2.getFailures().get("email3").getErrorMessage())
@@ -668,14 +919,14 @@
 
         // Make sure email could still be indexed in database 2.
         checkIsBatchResultSuccess(
-                mDb2.put(
+                mDb2.putAsync(
                         new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()));
     }
 
     @Test
     public void testGetDocuments() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a document
@@ -686,7 +937,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
 
         // Get the document
@@ -696,7 +947,7 @@
         assertThat(outEmail).isEqualTo(inEmail);
 
         // Can't get the document in the other instance.
-        AppSearchBatchResult<String, GenericDocument> failResult = mDb2.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> failResult = mDb2.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace").addIds(
                         "id1").build()).get();
         assertThat(failResult.isSuccess()).isFalse();
@@ -709,7 +960,7 @@
     @Test
     public void testGet_addDocumentClasses() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addDocumentClasses(EmailDocument.class).build()).get();
 
         // Index a document
@@ -718,7 +969,7 @@
         inEmail.id = "id1";
         inEmail.subject = "testPut example";
         inEmail.body = "This is the body of the testPut inEmail";
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addDocuments(inEmail).build()));
 
         // Get the document
@@ -735,7 +986,7 @@
     @Test
     public void testGetDocuments_projection() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
@@ -757,7 +1008,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, email2).build()));
 
@@ -789,7 +1040,7 @@
     @Test
     public void testGetDocuments_projectionEmpty() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
@@ -811,7 +1062,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, email2).build()));
 
@@ -836,7 +1087,7 @@
     @Test
     public void testGetDocuments_projectionNonExistentType() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
@@ -858,7 +1109,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, email2).build()));
 
@@ -890,7 +1141,7 @@
     @Test
     public void testGetDocuments_wildcardProjection() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
@@ -912,7 +1163,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, email2).build()));
 
@@ -945,7 +1196,7 @@
     @Test
     public void testGetDocuments_wildcardProjectionEmpty() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
@@ -967,7 +1218,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, email2).build()));
 
@@ -993,7 +1244,7 @@
     @Test
     public void testGetDocuments_wildcardProjectionNonExistentType() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
@@ -1015,7 +1266,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, email2).build()));
 
@@ -1049,7 +1300,7 @@
     @Test
     public void testQuery() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a document
@@ -1060,7 +1311,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
 
         // Query for the document
@@ -1083,7 +1334,7 @@
     @Test
     public void testQuery_getNextPage() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
         Set<AppSearchEmail> emailSet = new HashSet<>();
         PutDocumentsRequest.Builder putDocumentsRequestBuilder = new PutDocumentsRequest.Builder();
@@ -1099,7 +1350,7 @@
             emailSet.add(inEmail);
             putDocumentsRequestBuilder.addGenericDocuments(inEmail);
         }
-        checkIsBatchResultSuccess(mDb1.put(putDocumentsRequestBuilder.build()));
+        checkIsBatchResultSuccess(mDb1.putAsync(putDocumentsRequestBuilder.build()));
 
         // Set number of results per page is 7.
         SearchResults searchResults = mDb1.search("body",
@@ -1114,7 +1365,7 @@
 
         // keep loading next page until it's empty.
         do {
-            results = searchResults.getNextPage().get();
+            results = searchResults.getNextPageAsync().get();
             ++pageNumber;
             for (SearchResult result : results) {
                 documents.add(result.getGenericDocument());
@@ -1129,7 +1380,7 @@
     @Test
     public void testQuery_relevanceScoring() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
@@ -1151,7 +1402,7 @@
                         .setSubject("I'm a little teapot")
                         .setBody("short and stout. Here is my handle, here is my spout.")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, email2).build()));
 
@@ -1198,7 +1449,7 @@
                         .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
                         .build()
                 ).build();
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .addSchemas(genericSchema)
@@ -1214,7 +1465,7 @@
                         .build();
         GenericDocument inDoc = new GenericDocument.Builder<>("namespace", "id2", "Generic")
                 .setPropertyString("foo", "body").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail, inDoc).build()));
 
         // Query for the documents
@@ -1246,7 +1497,7 @@
     @Test
     public void testQuery_packageFilter() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -1257,7 +1508,7 @@
                         .setSubject("foo")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
 
         // Query for the document within our package
@@ -1273,14 +1524,14 @@
                 .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
                 .addFilterPackageNames("some.other.package")
                 .build());
-        List<SearchResult> results = searchResults.getNextPage().get();
+        List<SearchResult> results = searchResults.getNextPageAsync().get();
         assertThat(results).isEmpty();
     }
 
     @Test
     public void testQuery_namespaceFilter() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index two documents
@@ -1298,7 +1549,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(expectedEmail, unexpectedEmail).build()));
 
@@ -1333,7 +1584,7 @@
     @Test
     public void testQuery_getPackageName() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a document
@@ -1344,7 +1595,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
 
         // Query for the document
@@ -1356,7 +1607,7 @@
         List<GenericDocument> documents = new ArrayList<>();
         // keep loading next page until it's empty.
         do {
-            results = searchResults.getNextPage().get();
+            results = searchResults.getNextPageAsync().get();
             for (SearchResult result : results) {
                 assertThat(result.getGenericDocument()).isEqualTo(inEmail);
                 assertThat(result.getPackageName()).isEqualTo(
@@ -1370,7 +1621,7 @@
     @Test
     public void testQuery_getDatabaseName() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a document
@@ -1381,7 +1632,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
 
         // Query for the document
@@ -1393,7 +1644,7 @@
         List<GenericDocument> documents = new ArrayList<>();
         // keep loading next page until it's empty.
         do {
-            results = searchResults.getNextPage().get();
+            results = searchResults.getNextPageAsync().get();
             for (SearchResult result : results) {
                 assertThat(result.getGenericDocument()).isEqualTo(inEmail);
                 assertThat(result.getDatabaseName()).isEqualTo(DB_NAME_1);
@@ -1403,10 +1654,10 @@
         assertThat(documents).hasSize(1);
 
         // Schema registration for another database
-        mDb2.setSchema(
+        mDb2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
 
         // Query for the document
@@ -1417,7 +1668,7 @@
         documents = new ArrayList<>();
         // keep loading next page until it's empty.
         do {
-            results = searchResults.getNextPage().get();
+            results = searchResults.getNextPageAsync().get();
             for (SearchResult result : results) {
                 assertThat(result.getGenericDocument()).isEqualTo(inEmail);
                 assertThat(result.getDatabaseName()).isEqualTo(DB_NAME_2);
@@ -1430,7 +1681,7 @@
     @Test
     public void testQuery_projection() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .addSchemas(new AppSearchSchema.Builder("Note")
@@ -1465,7 +1716,7 @@
                         .setCreationTimestampMillis(1000)
                         .setPropertyString("title", "Note title")
                         .setPropertyString("body", "Note body").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email, note).build()));
 
@@ -1495,7 +1746,7 @@
     @Test
     public void testQuery_projectionEmpty() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .addSchemas(new AppSearchSchema.Builder("Note")
@@ -1530,7 +1781,7 @@
                         .setCreationTimestampMillis(1000)
                         .setPropertyString("title", "Note title")
                         .setPropertyString("body", "Note body").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email, note).build()));
 
@@ -1558,7 +1809,7 @@
     @Test
     public void testQuery_projectionNonExistentType() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .addSchemas(new AppSearchSchema.Builder("Note")
@@ -1593,7 +1844,7 @@
                         .setCreationTimestampMillis(1000)
                         .setPropertyString("title", "Note title")
                         .setPropertyString("body", "Note body").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email, note).build()));
 
@@ -1624,7 +1875,7 @@
     @Test
     public void testQuery_wildcardProjection() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .addSchemas(new AppSearchSchema.Builder("Note")
@@ -1658,7 +1909,7 @@
                         .setCreationTimestampMillis(1000)
                         .setPropertyString("title", "Note title")
                         .setPropertyString("body", "Note body").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email, note).build()));
 
@@ -1688,7 +1939,7 @@
     @Test
     public void testQuery_wildcardProjectionEmpty() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .addSchemas(new AppSearchSchema.Builder("Note")
@@ -1720,7 +1971,7 @@
                         .setCreationTimestampMillis(1000)
                         .setPropertyString("title", "Note title")
                         .setPropertyString("body", "Note body").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email, note).build()));
 
@@ -1745,7 +1996,7 @@
     @Test
     public void testQuery_wildcardProjectionNonExistentType() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .addSchemas(new AppSearchSchema.Builder("Note")
@@ -1780,7 +2031,7 @@
                         .setCreationTimestampMillis(1000)
                         .setPropertyString("title", "Note title")
                         .setPropertyString("body", "Note body").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email, note).build()));
 
@@ -1811,9 +2062,9 @@
     @Test
     public void testQuery_twoInstances() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder()
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a document to instance 1.
@@ -1824,7 +2075,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
 
         // Index a document to instance 2.
@@ -1835,7 +2086,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail2).build()));
 
         // Query for instance 1.
@@ -1865,7 +2116,7 @@
                         .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
                         .build()
                 ).build();
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(genericSchema).build()).get();
 
         // Index a document
@@ -1874,7 +2125,7 @@
                         .setPropertyString("subject", "A commonly used fake word is foo. "
                                 + "Another nonsense word that’s used a lot is bar")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(document).build()));
 
         // Query for the document
@@ -1886,7 +2137,7 @@
                         .setMaxSnippetSize(10)
                         .setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
                         .build());
-        List<SearchResult> results = searchResults.getNextPage().get();
+        List<SearchResult> results = searchResults.getNextPageAsync().get();
         assertThat(results).hasSize(1);
 
         List<SearchResult.MatchInfo> matchInfos = results.get(0).getMatchInfos();
@@ -1923,32 +2174,36 @@
                         .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
                         .build()
                 ).build();
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(genericSchema).build()).get();
 
         // Index documents
-        checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(
-                new GenericDocument.Builder<>("namespace", "id1", "Generic")
-                        .setPropertyString(
-                                "subject",
-                                "I like cats", "I like dogs", "I like birds", "I like fish")
-                        .setScore(10)
-                        .build(),
-                new GenericDocument.Builder<>("namespace", "id2", "Generic")
-                        .setPropertyString(
-                                "subject",
-                                "I like red", "I like green", "I like blue", "I like yellow")
-                        .setScore(20)
-                        .build(),
-                new GenericDocument.Builder<>("namespace", "id3", "Generic")
-                        .setPropertyString(
-                                "subject",
-                                "I like cupcakes",
-                                "I like donuts",
-                                "I like eclairs",
-                                "I like froyo")
-                        .setScore(5)
-                        .build())
+        checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
+                .addGenericDocuments(
+                        new GenericDocument.Builder<>("namespace", "id1", "Generic")
+                                .setPropertyString(
+                                        "subject",
+                                        "I like cats", "I like dogs", "I like birds", "I like fish")
+                                .setScore(10)
+                                .build(),
+                        new GenericDocument.Builder<>("namespace", "id2", "Generic")
+                                .setPropertyString(
+                                        "subject",
+                                        "I like red",
+                                        "I like green",
+                                        "I like blue",
+                                        "I like yellow")
+                                .setScore(20)
+                                .build(),
+                        new GenericDocument.Builder<>("namespace", "id3", "Generic")
+                                .setPropertyString(
+                                        "subject",
+                                        "I like cupcakes",
+                                        "I like donuts",
+                                        "I like eclairs",
+                                        "I like froyo")
+                                .setScore(5)
+                                .build())
                 .build()));
 
         // Query for the document
@@ -1964,7 +2219,7 @@
                         .build());
 
         // Check result 1
-        List<SearchResult> results = searchResults.getNextPage().get();
+        List<SearchResult> results = searchResults.getNextPageAsync().get();
         assertThat(results).hasSize(3);
 
         assertThat(results.get(0).getGenericDocument().getId()).isEqualTo("id2");
@@ -1998,7 +2253,7 @@
                         .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
                         .build()
                 ).build();
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(genericSchema).build()).get();
 
         String japanese =
@@ -2011,7 +2266,7 @@
                 new GenericDocument.Builder<>("namespace", "id", "Generic")
                         .setPropertyString("subject", japanese)
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(document).build()));
 
         // Query for the document
@@ -2022,7 +2277,7 @@
                         .setSnippetCountPerProperty(1)
                         .setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
                         .build());
-        List<SearchResult> results = searchResults.getNextPage().get();
+        List<SearchResult> results = searchResults.getNextPageAsync().get();
         assertThat(results).hasSize(1);
 
         List<SearchResult.MatchInfo> matchInfos = results.get(0).getMatchInfos();
@@ -2048,7 +2303,7 @@
     @Test
     public void testRemove() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -2066,7 +2321,7 @@
                         .setSubject("testPut example 2")
                         .setBody("This is the body of the testPut second email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
 
         // Check the presence of the documents
@@ -2074,12 +2329,12 @@
         assertThat(doGet(mDb1, "namespace", "id2")).hasSize(1);
 
         // Delete the document
-        checkIsBatchResultSuccess(mDb1.remove(
+        checkIsBatchResultSuccess(mDb1.removeAsync(
                 new RemoveByDocumentIdRequest.Builder("namespace").addIds(
                         "id1").build()));
 
         // Make sure it's really gone
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace").addIds("id1",
                         "id2").build())
                 .get();
@@ -2089,7 +2344,7 @@
         assertThat(getResult.getSuccesses().get("id2")).isEqualTo(email2);
 
         // Test if we delete a nonexistent id.
-        AppSearchBatchResult<String, Void> deleteResult = mDb1.remove(
+        AppSearchBatchResult<String, Void> deleteResult = mDb1.removeAsync(
                 new RemoveByDocumentIdRequest.Builder("namespace").addIds(
                         "id1").build()).get();
 
@@ -2100,7 +2355,7 @@
     @Test
     public void testRemove_multipleIds() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -2118,7 +2373,7 @@
                         .setSubject("testPut example 2")
                         .setBody("This is the body of the testPut second email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
 
         // Check the presence of the documents
@@ -2126,13 +2381,13 @@
         assertThat(doGet(mDb1, "namespace", "id2")).hasSize(1);
 
         // Delete the document
-        checkIsBatchResultSuccess(mDb1.remove(
+        checkIsBatchResultSuccess(mDb1.removeAsync(
                 new RemoveByDocumentIdRequest.Builder("namespace").addIds("id1", "id2").build()));
 
         // Make sure it's really gone
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
-                new GetByDocumentIdRequest.Builder("namespace").addIds("id1",
-                        "id2").build())
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
+                        new GetByDocumentIdRequest.Builder("namespace").addIds("id1",
+                                "id2").build())
                 .get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id1").getResultCode())
@@ -2144,7 +2399,7 @@
     @Test
     public void testRemoveByQuery() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -2162,7 +2417,7 @@
                         .setSubject("bar")
                         .setBody("This is the body of the testPut second email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
 
         // Check the presence of the documents
@@ -2170,10 +2425,11 @@
         assertThat(doGet(mDb1, "namespace", "id2")).hasSize(1);
 
         // Delete the email 1 by query "foo"
-        mDb1.remove("foo",
+        mDb1.removeAsync("foo",
                 new SearchSpec.Builder().setTermMatch(SearchSpec.TERM_MATCH_PREFIX).build()).get();
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
-                new GetByDocumentIdRequest.Builder("namespace").addIds("id1", "id2").build())
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
+                        new GetByDocumentIdRequest.Builder("namespace")
+                                .addIds("id1", "id2").build())
                 .get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id1").getResultCode())
@@ -2181,10 +2437,10 @@
         assertThat(getResult.getSuccesses().get("id2")).isEqualTo(email2);
 
         // Delete the email 2 by query "bar"
-        mDb1.remove("bar",
+        mDb1.removeAsync("bar",
                 new SearchSpec.Builder().setTermMatch(SearchSpec.TERM_MATCH_PREFIX).build()).get();
-        getResult = mDb1.getByDocumentId(
-                new GetByDocumentIdRequest.Builder("namespace").addIds("id2").build())
+        getResult = mDb1.getByDocumentIdAsync(
+                        new GetByDocumentIdRequest.Builder("namespace").addIds("id2").build())
                 .get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id2").getResultCode())
@@ -2195,7 +2451,7 @@
     @Test
     public void testRemoveByQuery_nonExistNamespace() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -2213,7 +2469,7 @@
                         .setSubject("bar")
                         .setBody("This is the body of the testPut second email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
 
         // Check the presence of the documents
@@ -2221,7 +2477,7 @@
         assertThat(doGet(mDb1, "namespace2", "id2")).hasSize(1);
 
         // Delete the email by nonExist namespace.
-        mDb1.remove("",
+        mDb1.removeAsync("",
                 new SearchSpec.Builder().setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
                         .addFilterNamespaces("nonExistNamespace").build()).get();
         // None of these emails will be deleted.
@@ -2232,7 +2488,7 @@
     @Test
     public void testRemoveByQuery_packageFilter() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -2243,7 +2499,7 @@
                         .setSubject("foo")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
 
         // Check the presence of the documents
@@ -2251,17 +2507,17 @@
 
         // Try to delete email with query "foo", but restricted to a different package name.
         // Won't work and email will still exist.
-        mDb1.remove("foo",
+        mDb1.removeAsync("foo",
                 new SearchSpec.Builder().setTermMatch(
                         SearchSpec.TERM_MATCH_PREFIX).addFilterPackageNames(
                         "some.other.package").build()).get();
         assertThat(doGet(mDb1, "namespace", "id1")).hasSize(1);
 
         // Delete the email by query "foo", restricted to the correct package this time.
-        mDb1.remove("foo", new SearchSpec.Builder().setTermMatch(
+        mDb1.removeAsync("foo", new SearchSpec.Builder().setTermMatch(
                 SearchSpec.TERM_MATCH_PREFIX).addFilterPackageNames(
                 ApplicationProvider.getApplicationContext().getPackageName()).build()).get();
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace").addIds("id1", "id2").build())
                 .get();
         assertThat(getResult.isSuccess()).isFalse();
@@ -2272,7 +2528,7 @@
     @Test
     public void testRemove_twoInstances() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -2283,32 +2539,32 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
 
         // Check the presence of the documents
         assertThat(doGet(mDb1, "namespace", "id1")).hasSize(1);
 
         // Can't delete in the other instance.
-        AppSearchBatchResult<String, Void> deleteResult = mDb2.remove(
+        AppSearchBatchResult<String, Void> deleteResult = mDb2.removeAsync(
                 new RemoveByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
         assertThat(deleteResult.getFailures().get("id1").getResultCode()).isEqualTo(
                 AppSearchResult.RESULT_NOT_FOUND);
         assertThat(doGet(mDb1, "namespace", "id1")).hasSize(1);
 
         // Delete the document
-        checkIsBatchResultSuccess(mDb1.remove(
+        checkIsBatchResultSuccess(mDb1.removeAsync(
                 new RemoveByDocumentIdRequest.Builder("namespace").addIds("id1").build()));
 
         // Make sure it's really gone
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id1").getResultCode())
                 .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
 
         // Test if we delete a nonexistent id.
-        deleteResult = mDb1.remove(
+        deleteResult = mDb1.removeAsync(
                 new RemoveByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
         assertThat(deleteResult.getFailures().get("id1").getResultCode()).isEqualTo(
                 AppSearchResult.RESULT_NOT_FOUND);
@@ -2318,7 +2574,7 @@
     public void testRemoveByTypes() throws Exception {
         // Schema registration
         AppSearchSchema genericSchema = new AppSearchSchema.Builder("Generic").build();
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).addSchemas(
                         genericSchema).build()).get();
 
@@ -2339,7 +2595,7 @@
                         .build();
         GenericDocument document1 =
                 new GenericDocument.Builder<>("namespace", "id3", "Generic").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2, document1)
                         .build()));
 
@@ -2347,7 +2603,7 @@
         assertThat(doGet(mDb1, "namespace", "id1", "id2", "id3")).hasSize(3);
 
         // Delete the email type
-        mDb1.remove("",
+        mDb1.removeAsync("",
                 new SearchSpec.Builder()
                         .setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
                         .addFilterSchemas(AppSearchEmail.SCHEMA_TYPE)
@@ -2355,7 +2611,7 @@
                 .get();
 
         // Make sure it's really gone
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace").addIds("id1", "id2", "id3").build())
                 .get();
         assertThat(getResult.isSuccess()).isFalse();
@@ -2369,9 +2625,9 @@
     @Test
     public void testRemoveByTypes_twoInstances() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder()
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -2389,9 +2645,9 @@
                         .setSubject("testPut example 2")
                         .setBody("This is the body of the testPut second email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()));
 
         // Check the presence of the documents
@@ -2399,7 +2655,7 @@
         assertThat(doGet(mDb2, "namespace", "id2")).hasSize(1);
 
         // Delete the email type in instance 1
-        mDb1.remove("",
+        mDb1.removeAsync("",
                 new SearchSpec.Builder()
                         .setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
                         .addFilterSchemas(AppSearchEmail.SCHEMA_TYPE)
@@ -2407,14 +2663,14 @@
                 .get();
 
         // Make sure it's really gone in instance 1
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id1").getResultCode())
                 .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
 
         // Make sure it's still in instance 2.
-        getResult = mDb2.getByDocumentId(
+        getResult = mDb2.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace").addIds("id2").build()).get();
         assertThat(getResult.isSuccess()).isTrue();
         assertThat(getResult.getSuccesses().get("id2")).isEqualTo(email2);
@@ -2430,7 +2686,7 @@
                         .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
                         .build()
                 ).build();
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).addSchemas(
                         genericSchema).build()).get();
 
@@ -2452,7 +2708,7 @@
         GenericDocument document1 =
                 new GenericDocument.Builder<>("document", "id3", "Generic")
                         .setPropertyString("foo", "bar").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2, document1)
                         .build()));
 
@@ -2461,7 +2717,7 @@
         assertThat(doGet(mDb1, /*namespace=*/"document", "id3")).hasSize(1);
 
         // Delete the email namespace
-        mDb1.remove("",
+        mDb1.removeAsync("",
                 new SearchSpec.Builder()
                         .setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
                         .addFilterNamespaces("email")
@@ -2469,7 +2725,7 @@
                 .get();
 
         // Make sure it's really gone
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("email")
                         .addIds("id1", "id2").build()).get();
         assertThat(getResult.isSuccess()).isFalse();
@@ -2477,7 +2733,7 @@
                 .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
         assertThat(getResult.getFailures().get("id2").getResultCode())
                 .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
-        getResult = mDb1.getByDocumentId(
+        getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("document")
                         .addIds("id3").build()).get();
         assertThat(getResult.isSuccess()).isTrue();
@@ -2487,9 +2743,9 @@
     @Test
     public void testRemoveByNamespaces_twoInstances() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder()
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -2507,9 +2763,9 @@
                         .setSubject("testPut example 2")
                         .setBody("This is the body of the testPut second email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()));
 
         // Check the presence of the documents
@@ -2517,7 +2773,7 @@
         assertThat(doGet(mDb2, /*namespace=*/"email", "id2")).hasSize(1);
 
         // Delete the email namespace in instance 1
-        mDb1.remove("",
+        mDb1.removeAsync("",
                 new SearchSpec.Builder()
                         .setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
                         .addFilterNamespaces("email")
@@ -2525,7 +2781,7 @@
                 .get();
 
         // Make sure it's really gone in instance 1
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("email")
                         .addIds("id1").build()).get();
         assertThat(getResult.isSuccess()).isFalse();
@@ -2533,7 +2789,7 @@
                 .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
 
         // Make sure it's still in instance 2.
-        getResult = mDb2.getByDocumentId(
+        getResult = mDb2.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("email")
                         .addIds("id2").build()).get();
         assertThat(getResult.isSuccess()).isTrue();
@@ -2543,9 +2799,9 @@
     @Test
     public void testRemoveAll_twoInstances() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder()
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -2563,9 +2819,9 @@
                         .setSubject("testPut example 2")
                         .setBody("This is the body of the testPut second email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()));
 
         // Check the presence of the documents
@@ -2573,21 +2829,21 @@
         assertThat(doGet(mDb2, "namespace", "id2")).hasSize(1);
 
         // Delete the all document in instance 1
-        mDb1.remove("",
+        mDb1.removeAsync("",
                 new SearchSpec.Builder()
                         .setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
                         .build())
                 .get();
 
         // Make sure it's really gone in instance 1
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id1").getResultCode())
                 .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
 
         // Make sure it's still in instance 2.
-        getResult = mDb2.getByDocumentId(
+        getResult = mDb2.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace").addIds("id2").build()).get();
         assertThat(getResult.isSuccess()).isTrue();
         assertThat(getResult.getSuccesses().get("id2")).isEqualTo(email2);
@@ -2596,9 +2852,9 @@
     @Test
     public void testRemoveAll_termMatchType() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder()
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -2630,9 +2886,9 @@
                         .setSubject("testPut example 4")
                         .setBody("This is the body of the testPut second email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email3, email4).build()));
 
         // Check the presence of the documents
@@ -2648,7 +2904,7 @@
         assertThat(documents).hasSize(2);
 
         // Delete the all document in instance 1 with TERM_MATCH_PREFIX
-        mDb1.remove("",
+        mDb1.removeAsync("",
                 new SearchSpec.Builder()
                         .setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
                         .build())
@@ -2660,7 +2916,7 @@
         assertThat(documents).isEmpty();
 
         // Delete the all document in instance 2 with TERM_MATCH_EXACT_ONLY
-        mDb2.remove("",
+        mDb2.removeAsync("",
                 new SearchSpec.Builder()
                         .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
                         .build())
@@ -2675,7 +2931,7 @@
     @Test
     public void testRemoveAllAfterEmpty() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -2686,7 +2942,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
 
         // Check the presence of the documents
@@ -2694,23 +2950,22 @@
 
         // Remove the document
         checkIsBatchResultSuccess(
-                mDb1.remove(new RemoveByDocumentIdRequest.Builder("namespace").addIds(
+                mDb1.removeAsync(new RemoveByDocumentIdRequest.Builder("namespace").addIds(
                         "id1").build()));
 
         // Make sure it's really gone
-        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+        AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id1").getResultCode())
                 .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
 
         // Delete the all documents
-        mDb1.remove(
-                "", new SearchSpec.Builder().setTermMatch(SearchSpec.TERM_MATCH_PREFIX).build())
-                .get();
+        mDb1.removeAsync("", new SearchSpec.Builder()
+                        .setTermMatch(SearchSpec.TERM_MATCH_PREFIX).build()).get();
 
         // Make sure it's still gone
-        getResult = mDb1.getByDocumentId(
+        getResult = mDb1.getByDocumentIdAsync(
                 new GetByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
         assertThat(getResult.isSuccess()).isFalse();
         assertThat(getResult.getFailures().get("id1").getResultCode())
@@ -2720,7 +2975,7 @@
     @Test
     public void testCloseAndReopen() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a document
@@ -2731,12 +2986,12 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
 
         // close and re-open the appSearchSession
         mDb1.close();
-        mDb1 = createSearchSession(DB_NAME_1).get();
+        mDb1 = createSearchSessionAsync(DB_NAME_1).get();
 
         // Query for the document
         SearchResults searchResults = mDb1.search("body", new SearchSpec.Builder()
@@ -2752,12 +3007,12 @@
         // Create a same-thread database by inject an executor which could help us maintain the
         // execution order of those async tasks.
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession sameThreadDb = createSearchSession(
+        AppSearchSession sameThreadDb = createSearchSessionAsync(
                 "sameThreadDb", MoreExecutors.newDirectExecutorService()).get();
 
         try {
             // Schema registration -- just mutate something
-            sameThreadDb.setSchema(
+            sameThreadDb.setSchemaAsync(
                     new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
             // Close the database. No further call will be allowed.
@@ -2773,15 +3028,16 @@
         } finally {
             // To clean the data that has been added in the test, need to re-open the session and
             // set an empty schema.
-            AppSearchSession reopen = createSearchSession(
+            AppSearchSession reopen = createSearchSessionAsync(
                     "sameThreadDb", MoreExecutors.newDirectExecutorService()).get();
-            reopen.setSchema(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+            reopen.setSchemaAsync(new SetSchemaRequest.Builder()
+                    .setForceOverride(true).build()).get();
         }
     }
 
     @Test
     public void testReportUsage() throws Exception {
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index two documents.
@@ -2789,19 +3045,19 @@
                 new AppSearchEmail.Builder("namespace", "id1").build();
         AppSearchEmail email2 =
                 new AppSearchEmail.Builder("namespace", "id2").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
 
         // Email 1 has more usages, but email 2 has more recent usages.
-        mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id1")
+        mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id1")
                 .setUsageTimestampMillis(1000).build()).get();
-        mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id1")
+        mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id1")
                 .setUsageTimestampMillis(2000).build()).get();
-        mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id1")
+        mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id1")
                 .setUsageTimestampMillis(3000).build()).get();
-        mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id2")
+        mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id2")
                 .setUsageTimestampMillis(10000).build()).get();
-        mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id2")
+        mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id2")
                 .setUsageTimestampMillis(20000).build()).get();
 
         // Query by number of usages
@@ -2832,19 +3088,19 @@
 
     @Test
     public void testReportUsage_invalidNamespace() throws Exception {
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
         AppSearchEmail email1 = new AppSearchEmail.Builder("namespace", "id1").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
 
         // Use the correct namespace; it works
-        mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id1").build()).get();
+        mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id1").build()).get();
 
         // Use an incorrect namespace; it fails
         ExecutionException e = assertThrows(
                 ExecutionException.class,
-                () -> mDb1.reportUsage(
+                () -> mDb1.reportUsageAsync(
                         new ReportUsageRequest.Builder("namespace2", "id1").build()).get());
         assertThat(e).hasCauseThat().isInstanceOf(AppSearchException.class);
         AppSearchException cause = (AppSearchException) e.getCause();
@@ -2853,26 +3109,26 @@
 
     @Test
     public void testGetStorageInfo() throws Exception {
-        StorageInfo storageInfo = mDb1.getStorageInfo().get();
+        StorageInfo storageInfo = mDb1.getStorageInfoAsync().get();
         assertThat(storageInfo.getSizeBytes()).isEqualTo(0);
 
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Still no storage space attributed with just a schema
-        storageInfo = mDb1.getStorageInfo().get();
+        storageInfo = mDb1.getStorageInfoAsync().get();
         assertThat(storageInfo.getSizeBytes()).isEqualTo(0);
 
         // Index two documents.
         AppSearchEmail email1 = new AppSearchEmail.Builder("namespace1", "id1").build();
         AppSearchEmail email2 = new AppSearchEmail.Builder("namespace1", "id2").build();
         AppSearchEmail email3 = new AppSearchEmail.Builder("namespace2", "id1").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2,
                         email3).build()));
 
         // Non-zero size now
-        storageInfo = mDb1.getStorageInfo().get();
+        storageInfo = mDb1.getStorageInfoAsync().get();
         assertThat(storageInfo.getSizeBytes()).isGreaterThan(0);
         assertThat(storageInfo.getAliveDocumentsCount()).isEqualTo(3);
         assertThat(storageInfo.getAliveNamespacesCount()).isEqualTo(2);
@@ -2881,7 +3137,7 @@
     @Test
     public void testFlush() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a document
@@ -2892,19 +3148,19 @@
                 .setBody("This is the body of the testPut email")
                 .build();
 
-        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.put(
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
         assertThat(result.getSuccesses()).containsExactly("id1", null);
         assertThat(result.getFailures()).isEmpty();
 
         // The future returned from requestFlush will be set as a void or an Exception on error.
-        mDb1.requestFlush().get();
+        mDb1.requestFlushAsync().get();
     }
 
     @Test
     public void testQuery_ResultGroupingLimits() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index four documents.
@@ -2915,7 +3171,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
         AppSearchEmail inEmail2 =
                 new AppSearchEmail.Builder("namespace1", "id2")
@@ -2924,7 +3180,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail2).build()));
         AppSearchEmail inEmail3 =
                 new AppSearchEmail.Builder("namespace2", "id3")
@@ -2933,7 +3189,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail3).build()));
         AppSearchEmail inEmail4 =
                 new AppSearchEmail.Builder("namespace2", "id4")
@@ -2942,7 +3198,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail4).build()));
 
         // Query with per package result grouping. Only the last document 'email4' should be
@@ -2979,7 +3235,7 @@
     @Test
     public void testIndexNestedDocuments() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA)
                 .addSchemas(new AppSearchSchema.Builder("YesNestedIndex")
                         .addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(
@@ -3008,7 +3264,7 @@
                 new GenericDocument.Builder<>("namespace", "noNestedIndex", "NoNestedIndex")
                         .setPropertyDocument("prop", email)
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder()
+        checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
                 .addGenericDocuments(yesNestedIndex, noNestedIndex).build()));
 
         // Query.
@@ -3017,12 +3273,14 @@
                 .setSnippetCount(10)
                 .setSnippetCountPerProperty(10)
                 .build());
-        List<SearchResult> page = searchResults.getNextPage().get();
+        List<SearchResult> page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(1);
         assertThat(page.get(0).getGenericDocument()).isEqualTo(yesNestedIndex);
         List<SearchResult.MatchInfo> matches = page.get(0).getMatchInfos();
         assertThat(matches).hasSize(1);
         assertThat(matches.get(0).getPropertyPath()).isEqualTo("prop.subject");
+        assertThat(matches.get(0).getPropertyPathObject())
+                .isEqualTo(new PropertyPath("prop.subject"));
         assertThat(matches.get(0).getFullText()).isEqualTo("This is the body");
         assertThat(matches.get(0).getExactMatch()).isEqualTo("body");
     }
@@ -3030,7 +3288,7 @@
     @Test
     public void testCJKTQuery() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a document to instance 1.
@@ -3038,7 +3296,7 @@
                 new AppSearchEmail.Builder("namespace", "uri1")
                         .setBody("他是個男孩 is a boy")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
 
         // Query for "他" (He)
@@ -3062,4 +3320,90 @@
         documents = convertSearchResultsToDocuments(searchResults);
         assertThat(documents).containsExactly(inEmail1);
     }
+
+    @Test
+    public void testSetSchemaWithIncompatibleNestedSchema() throws Exception {
+        // 1. Set the original schema. This should succeed without any problems.
+        AppSearchSchema originalNestedSchema =
+                new AppSearchSchema.Builder("TypeA").addProperty(new StringPropertyConfig.Builder(
+                        "prop1").setCardinality(
+                        PropertyConfig.CARDINALITY_OPTIONAL).build()).build();
+        SetSchemaRequest originalRequest =
+                new SetSchemaRequest.Builder().addSchemas(originalNestedSchema).build();
+        mDb1.setSchemaAsync(originalRequest).get();
+
+        // 2. Set a new schema with a new type that refers to "TypeA" and an incompatible change to
+        // "TypeA". This should fail.
+        AppSearchSchema newNestedSchema =
+                new AppSearchSchema.Builder("TypeA").addProperty(new StringPropertyConfig.Builder(
+                        "prop1").setCardinality(
+                        PropertyConfig.CARDINALITY_REQUIRED).build()).build();
+        AppSearchSchema newSchema =
+                new AppSearchSchema.Builder("TypeB").addProperty(
+                        new AppSearchSchema.DocumentPropertyConfig.Builder("prop2",
+                                "TypeA").build()).build();
+        final SetSchemaRequest newRequest =
+                new SetSchemaRequest.Builder().addSchemas(newNestedSchema,
+                        newSchema).build();
+        Throwable throwable = assertThrows(ExecutionException.class,
+                () -> mDb1.setSchemaAsync(newRequest).get()).getCause();
+        assertThat(throwable).isInstanceOf(AppSearchException.class);
+        AppSearchException exception = (AppSearchException) throwable;
+        assertThat(exception.getResultCode()).isEqualTo(RESULT_INVALID_SCHEMA);
+        assertThat(exception).hasMessageThat().contains("Schema is incompatible.");
+        assertThat(exception).hasMessageThat().contains("Incompatible types: {TypeA}");
+
+        // 3. Now set that same set of schemas but with forceOverride=true. This should succeed.
+        SetSchemaRequest newRequestForced =
+                new SetSchemaRequest.Builder().addSchemas(newNestedSchema,
+                        newSchema).setForceOverride(true).build();
+        mDb1.setSchemaAsync(newRequestForced).get();
+    }
+
+    @Test
+    public void testEmojiSnippet() throws Exception {
+        // Schema registration
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
+                .addSchemas(AppSearchEmail.SCHEMA).build()).get();
+
+        // String:     "Luca Brasi sleeps with the 🐟🐟🐟."
+        //              ^    ^     ^      ^    ^   ^ ^  ^ ^
+        // UTF8 idx:    0    5     11     18   23 27 3135 39
+        // UTF16 idx:   0    5     11     18   23 27 2931 33
+        // Breaks into segments: "Luca", "Brasi", "sleeps", "with", "the", "🐟", "🐟"
+        // and "🐟".
+        // Index a document to instance 1.
+        String sicilianMessage = "Luca Brasi sleeps with the 🐟🐟🐟.";
+        AppSearchEmail inEmail1 =
+                new AppSearchEmail.Builder("namespace", "uri1")
+                        .setBody(sicilianMessage)
+                        .build();
+        checkIsBatchResultSuccess(mDb1.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
+
+        AppSearchEmail inEmail2 =
+                new AppSearchEmail.Builder("namespace", "uri2")
+                        .setBody("Some other content.")
+                        .build();
+        checkIsBatchResultSuccess(mDb1.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(inEmail2).build()));
+
+        // Query for "🐟"
+        SearchResults searchResults = mDb1.search("🐟", new SearchSpec.Builder()
+                .setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
+                .setSnippetCount(1)
+                .setSnippetCountPerProperty(1)
+                .build());
+        List<SearchResult> page = searchResults.getNextPageAsync().get();
+        assertThat(page).hasSize(1);
+        assertThat(page.get(0).getGenericDocument()).isEqualTo(inEmail1);
+        List<SearchResult.MatchInfo> matches = page.get(0).getMatchInfos();
+        assertThat(matches).hasSize(1);
+        assertThat(matches.get(0).getPropertyPath()).isEqualTo("body");
+        assertThat(matches.get(0).getFullText()).isEqualTo(sicilianMessage);
+        assertThat(matches.get(0).getExactMatch()).isEqualTo("🐟");
+        if (mDb1.getFeatures().isFeatureSupported(Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH)) {
+            assertThat(matches.get(0).getSubmatch()).isEqualTo("🐟");
+        }
+    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java
index 8d45573..51745dd 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java
@@ -18,6 +18,7 @@
 
 import static androidx.appsearch.testutil.AppSearchTestUtils.checkIsBatchResultSuccess;
 import static androidx.appsearch.testutil.AppSearchTestUtils.convertSearchResultsToDocuments;
+import static androidx.appsearch.testutil.AppSearchTestUtils.doGet;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -30,6 +31,7 @@
 import androidx.appsearch.app.AppSearchSession;
 import androidx.appsearch.app.Features;
 import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetByDocumentIdRequest;
 import androidx.appsearch.app.Migrator;
 import androidx.appsearch.app.PutDocumentsRequest;
 import androidx.appsearch.app.SearchResult;
@@ -53,33 +55,51 @@
 
 public class AppSearchSessionLocalCtsTest extends AppSearchSessionCtsTestBase {
     @Override
-    protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
         Context context = ApplicationProvider.getApplicationContext();
-        return LocalStorage.createSearchSession(
+        return LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, dbName).build());
     }
 
     @Override
-    protected ListenableFuture<AppSearchSession> createSearchSession(
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(
             @NonNull String dbName, @NonNull ExecutorService executor) {
         Context context = ApplicationProvider.getApplicationContext();
-        return LocalStorage.createSearchSession(
+        return LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, dbName)
                         .setWorkerExecutor(executor).build());
     }
 
+    @Test
+    public void testFeaturesSupported() throws Exception {
+        Context context = ApplicationProvider.getApplicationContext();
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
+                new LocalStorage.SearchContext.Builder(context, DB_NAME_2).build()).get();
+
+        assertThat(db2.getFeatures().isFeatureSupported(
+                Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH)).isTrue();
+        assertThat(db2.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK)).isTrue();
+        assertThat(db2.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA)).isTrue();
+        assertThat(db2.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_GET_BY_ID)).isTrue();
+        assertThat(db2.getFeatures().isFeatureSupported(
+                Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)).isTrue();
+    }
+
     // TODO(b/194207451) This test can be moved to CtsTestBase if customized logger is
     //  supported for platform backend.
     @Test
     public void testLogger_searchStatsLogged_forEmptyFirstPage() throws Exception {
         SimpleTestLogger logger = new SimpleTestLogger();
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
                         .setLogger(logger).build()).get();
 
         // Schema registration
-        db2.setSchema(
+        db2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -97,7 +117,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(db2.put(
+        checkIsBatchResultSuccess(db2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
 
         assertThat(logger.mSearchStats).isNull();
@@ -111,7 +131,7 @@
                 .build());
 
         // Get first page
-        List<SearchResult> page = searchResults.getNextPage().get();
+        List<SearchResult> page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(0);
 
         // Check searchStats has been set. We won't check all the fields here.
@@ -133,12 +153,12 @@
     public void testLogger_searchStatsLogged_forNonEmptyFirstPage() throws Exception {
         SimpleTestLogger logger = new SimpleTestLogger();
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
                         .setLogger(logger).build()).get();
 
         // Schema registration
-        db2.setSchema(
+        db2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -156,7 +176,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(db2.put(
+        checkIsBatchResultSuccess(db2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
 
         assertThat(logger.mSearchStats).isNull();
@@ -170,7 +190,7 @@
                 .build());
 
         // Get first page
-        List<SearchResult> page = searchResults.getNextPage().get();
+        List<SearchResult> page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(2);
 
         // Check searchStats has been set. We won't check all the fields here.
@@ -192,12 +212,12 @@
     public void testLogger_searchStatsLogged_forEmptySecondPage() throws Exception {
         SimpleTestLogger logger = new SimpleTestLogger();
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
                         .setLogger(logger).build()).get();
 
         // Schema registration
-        db2.setSchema(
+        db2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -215,7 +235,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(db2.put(
+        checkIsBatchResultSuccess(db2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
 
         // Query for the document
@@ -228,12 +248,12 @@
                 .build());
 
         // Get first page
-        List<SearchResult> page = searchResults.getNextPage().get();
+        List<SearchResult> page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(2);
 
         // Get second(empty) page
         logger.mSearchStats = null;
-        page = searchResults.getNextPage().get();
+        page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(0);
 
         // Check searchStats has been set. We won't check all the fields here.
@@ -255,12 +275,12 @@
     public void testLogger_searchStatsLogged_forNonEmptySecondPage() throws Exception {
         SimpleTestLogger logger = new SimpleTestLogger();
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
                         .setLogger(logger).build()).get();
 
         // Schema registration
-        db2.setSchema(
+        db2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -278,7 +298,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(db2.put(
+        checkIsBatchResultSuccess(db2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
 
         // Query for the document
@@ -291,12 +311,12 @@
                 .build());
 
         // Get first page
-        List<SearchResult> page = searchResults.getNextPage().get();
+        List<SearchResult> page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(1);
 
         // Get second page
         logger.mSearchStats = null;
-        page = searchResults.getNextPage().get();
+        page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(1);
 
         // Check searchStats has been set. We won't check all the fields here.
@@ -318,7 +338,7 @@
     public void testSetSchemaStats_withoutSchemaMigration() throws Exception {
         SimpleTestLogger logger = new SimpleTestLogger();
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
                         .setLogger(logger).build()).get();
         AppSearchSchema appSearchSchema = new AppSearchSchema.Builder("testSchema")
@@ -330,7 +350,7 @@
                         .build())
                 .build();
 
-        db2.setSchema(
+        db2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(appSearchSchema).build()).get();
 
         assertThat(logger.mSetSchemaStats).isNotNull();
@@ -352,7 +372,7 @@
     public void testSetSchemaStats_withSchemaMigration() throws Exception {
         SimpleTestLogger logger = new SimpleTestLogger();
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
                         .setLogger(logger).build()).get();
         AppSearchSchema schema = new AppSearchSchema.Builder("testSchema")
@@ -407,11 +427,11 @@
             }
         };
 
-        db2.setSchema(new SetSchemaRequest.Builder().addSchemas(
+        db2.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(
                 schema).setForceOverride(true).build()).get();
-        checkIsBatchResultSuccess(db2.put(
+        checkIsBatchResultSuccess(db2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
-        db2.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+        db2.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
                 .setMigrator("testSchema", migrator)
                 .setVersion(2)     // upgrade version
                 .build()).get();
@@ -424,16 +444,15 @@
         assertThat(schemaMigrationStats.getSavedDocumentCount()).isEqualTo(1);
     }
 
-    // TODO(b/185441119) Following test can be moved to CtsTestBase if we fix the binder
-    //  transaction limit in framework.
+    // Framework has max Document size which is 512KiB, this test should only exists in Jetpack.
     @Test
-    public void testPutLargeDocument() throws Exception {
+    public void testPutLargeDocumentToIcing() throws Exception {
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2).build()).get();
 
         // Schema registration
-        db2.setSchema(
+        db2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         char[] chars = new char[16_000_000];
@@ -447,7 +466,7 @@
                 .setSubject("testPut example")
                 .setBody(body)
                 .build();
-        AppSearchBatchResult<String, Void> result = db2.put(
+        AppSearchBatchResult<String, Void> result = db2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email).build()).get();
         assertThat(result.isSuccess()).isTrue();
 
@@ -460,16 +479,15 @@
         assertThat(outEmail).isEqualTo(email);
     }
 
-    // TODO(b/185441119) Following test can be moved to CtsTestBase if we fix the binder
-    //  transaction limit in framework.
+    // Framework has max Document size which is 512KiB, this test should only exists in Jetpack.
     @Test
-    public void testPutLargeDocument_exceedLimit() throws Exception {
+    public void testPutLargeDocumentToIcing_exceedLimit() throws Exception {
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2).build()).get();
 
         // Schema registration
-        db2.setSchema(
+        db2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Create a String property that make the document exceed the total size limit.
@@ -483,7 +501,7 @@
                 .setSubject("testPut example")
                 .setBody(body)
                 .build();
-        AppSearchBatchResult<String, Void> result = db2.put(
+        AppSearchBatchResult<String, Void> result = db2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email).build()).get();
         assertThat(result.getFailures()).containsKey("id1");
         assertThat(result.getFailures().get("id1").getErrorMessage())
@@ -491,12 +509,42 @@
     }
 
     @Test
-    public void testCapabilities() throws Exception {
+    public void testPutDocuments_emptyBytesAndDocuments() throws Exception {
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
-                new LocalStorage.SearchContext.Builder(context, DB_NAME_2).build()).get();
+        AppSearchSession db = LocalStorage.createSearchSessionAsync(
+                new LocalStorage.SearchContext.Builder(context, DB_NAME_1).build()).get();
+        // Schema registration
+        AppSearchSchema schema = new AppSearchSchema.Builder("testSchema")
+                .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder("bytes")
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                        .build())
+                .addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(
+                        "document", AppSearchEmail.SCHEMA_TYPE)
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                        .setShouldIndexNestedProperties(true)
+                        .build())
+                .build();
+        db.setSchemaAsync(new SetSchemaRequest.Builder()
+                .addSchemas(schema, AppSearchEmail.SCHEMA).build()).get();
 
-        assertThat(db2.getFeatures().isFeatureSupported(
-                Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH)).isTrue();
+        // Index a document
+        GenericDocument document = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
+                .setPropertyBytes("bytes")
+                .setPropertyDocument("document")
+                .build();
+
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(db.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(document).build()));
+        assertThat(result.getSuccesses()).containsExactly("id1", null);
+        assertThat(result.getFailures()).isEmpty();
+
+        GetByDocumentIdRequest request = new GetByDocumentIdRequest.Builder("namespace")
+                .addIds("id1")
+                .build();
+        List<GenericDocument> outDocuments = doGet(db, request);
+        assertThat(outDocuments).hasSize(1);
+        GenericDocument outDocument = outDocuments.get(0);
+        assertThat(outDocument.getPropertyBytesArray("bytes")).isEmpty();
+        assertThat(outDocument.getPropertyDocumentArray("document")).isEmpty();
     }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java
index a0cd21a..ac08790 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java
@@ -16,15 +16,28 @@
 // @exportToFramework:skipFile()
 package androidx.appsearch.cts.app;
 
+import static androidx.appsearch.testutil.AppSearchTestUtils.checkIsBatchResultSuccess;
+import static androidx.appsearch.testutil.AppSearchTestUtils.doGet;
+
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.junit.Assume.assumeTrue;
+
 import android.content.Context;
 import android.os.Build;
 
 import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchBatchResult;
+import androidx.appsearch.app.AppSearchSchema;
 import androidx.appsearch.app.AppSearchSession;
 import androidx.appsearch.app.Features;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetByDocumentIdRequest;
+import androidx.appsearch.app.PutDocumentsRequest;
+import androidx.appsearch.app.SetSchemaRequest;
 import androidx.appsearch.platformstorage.PlatformStorage;
+import androidx.appsearch.testutil.AppSearchEmail;
+import androidx.core.os.BuildCompat;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.filters.SdkSuppress;
 
@@ -32,35 +45,120 @@
 
 import org.junit.Test;
 
+import java.util.List;
 import java.util.concurrent.ExecutorService;
 
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
 public class AppSearchSessionPlatformCtsTest extends AppSearchSessionCtsTestBase {
     @Override
-    protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
         Context context = ApplicationProvider.getApplicationContext();
-        return PlatformStorage.createSearchSession(
+        return PlatformStorage.createSearchSessionAsync(
                 new PlatformStorage.SearchContext.Builder(context, dbName).build());
     }
 
     @Override
-    protected ListenableFuture<AppSearchSession> createSearchSession(
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(
             @NonNull String dbName, @NonNull ExecutorService executor) {
         Context context = ApplicationProvider.getApplicationContext();
-        return PlatformStorage.createSearchSession(
+        return PlatformStorage.createSearchSessionAsync(
                 new PlatformStorage.SearchContext.Builder(context, dbName)
                         .setWorkerExecutor(executor).build());
     }
 
     @Test
-    public void testCapabilities() throws Exception {
+    public void testFeaturesSupported() throws Exception {
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = PlatformStorage.createSearchSession(
+        AppSearchSession db2 = PlatformStorage.createSearchSessionAsync(
                 new PlatformStorage.SearchContext.Builder(context, DB_NAME_2).build()).get();
-
-        // TODO(b/201316758) Update to reflect support in Android T+ once this feature is synced
-        // over into service-appsearch.
         assertThat(db2.getFeatures().isFeatureSupported(
-                Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH)).isFalse();
+                Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH))
+                .isEqualTo(BuildCompat.isAtLeastT());
+        assertThat(db2.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK))
+                .isEqualTo(BuildCompat.isAtLeastT());
+        assertThat(db2.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA))
+                .isEqualTo(BuildCompat.isAtLeastT());
+        assertThat(db2.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_GET_BY_ID))
+                .isEqualTo(BuildCompat.isAtLeastT());
+        assertThat(db2.getFeatures().isFeatureSupported(
+                Features.ADD_PERMISSIONS_AND_GET_VISIBILITY))
+                .isEqualTo(BuildCompat.isAtLeastT());
+    }
+
+    @Test
+    public void testPutDocuments_emptyBytesAndDocuments() throws Exception {
+        Context context = ApplicationProvider.getApplicationContext();
+        AppSearchSession db = PlatformStorage.createSearchSessionAsync(
+                new PlatformStorage.SearchContext.Builder(context, DB_NAME_1).build()).get();
+        // Schema registration
+        AppSearchSchema schema = new AppSearchSchema.Builder("testSchema")
+                .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder("bytes")
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                        .build())
+                .addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(
+                        "document", AppSearchEmail.SCHEMA_TYPE)
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                        .setShouldIndexNestedProperties(true)
+                        .build())
+                .build();
+        db.setSchemaAsync(new SetSchemaRequest.Builder()
+                .addSchemas(schema, AppSearchEmail.SCHEMA).build()).get();
+
+        // Index a document
+        GenericDocument document = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
+                .setPropertyBytes("bytes")
+                .setPropertyDocument("document")
+                .build();
+
+        AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(db.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(document).build()));
+        assertThat(result.getSuccesses()).containsExactly("id1", null);
+        assertThat(result.getFailures()).isEmpty();
+
+        GetByDocumentIdRequest request = new GetByDocumentIdRequest.Builder("namespace")
+                .addIds("id1")
+                .build();
+        List<GenericDocument> outDocuments = doGet(db, request);
+        assertThat(outDocuments).hasSize(1);
+        GenericDocument outDocument = outDocuments.get(0);
+        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.S
+                || Build.VERSION.SDK_INT == Build.VERSION_CODES.S_V2) {
+            // We fixed b/204677124 in Android T, so in S and S_V2, getByteArray and
+            // getDocumentArray will return null if we set empty properties.
+            assertThat(outDocument.getPropertyBytesArray("bytes")).isNull();
+            assertThat(outDocument.getPropertyDocumentArray("document")).isNull();
+        } else {
+            assertThat(outDocument.getPropertyBytesArray("bytes")).isEmpty();
+            assertThat(outDocument.getPropertyDocumentArray("document")).isEmpty();
+        }
+    }
+
+    @Override
+    @Test
+    public void testPutLargeDocumentBatch() throws Exception {
+        // b/185441119 was fixed in Android T, this test will fail on S_V2 devices and below.
+        assumeTrue(BuildCompat.isAtLeastT());
+        super.testPutLargeDocumentBatch();
+    }
+
+    @Override
+    @Test
+    public void testSetSchemaWithIncompatibleNestedSchema() throws Exception {
+        // TODO(b/230879098) This bug was fixed in Android T, but will currently fail on S_V2
+        // devices and below. However, we could implement a workaround in platform-storage.
+        // Implement that workaround and enable on S and S_V2.
+        assumeTrue(BuildCompat.isAtLeastT());
+        super.testSetSchemaWithIncompatibleNestedSchema();
+    }
+
+    @Override
+    @Test
+    public void testEmojiSnippet() throws Exception {
+        // b/229770338 was fixed in Android T, this test will fail on S_V2 devices and below.
+        assumeTrue(BuildCompat.isAtLeastT());
+        super.testEmojiSnippet();
     }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
index 88c579d..6a82e79 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
@@ -558,37 +558,19 @@
     }
 
     @Test
-    public void testNestedProperties_unusualPaths() {
-        GenericDocument doc = new GenericDocument.Builder<>("namespace", "id1", "schema1")
-                .setPropertyString("propString", "Hello", "Goodbye")
-                .setPropertyDocument("propDocs1", new GenericDocument.Builder<>("", "", "schema1")
-                        .setPropertyString("", "Cat", "Dog")
-                        .build())
-                .setPropertyDocument("propDocs2", new GenericDocument.Builder<>("", "", "schema1")
-                        .setPropertyDocument("", new GenericDocument.Builder<>("", "", "schema1")
-                                .setPropertyString("", "Red", "Blue")
-                                .setPropertyString("propString", "Bat", "Hawk")
-                                .build())
-                        .build())
-                .setPropertyDocument("", new GenericDocument.Builder<>("", "", "schema1")
-                        .setPropertyDocument("", new GenericDocument.Builder<>("", "", "schema1")
-                                .setPropertyString("", "Orange", "Green")
-                                .setPropertyString("propString", "Toad", "Bird")
-                                .build())
-                        .build())
-                .build();
-        assertThat(doc.getPropertyString("propString")).isEqualTo("Hello");
-        assertThat(doc.getPropertyString("propString[1]")).isEqualTo("Goodbye");
-        assertThat(doc.getPropertyString("propDocs1.")).isEqualTo("Cat");
-        assertThat(doc.getPropertyString("propDocs1.[1]")).isEqualTo("Dog");
-        assertThat(doc.getPropertyStringArray("propDocs1[0].")).asList()
-                .containsExactly("Cat", "Dog").inOrder();
-        assertThat(doc.getPropertyString("propDocs2..propString")).isEqualTo("Bat");
-        assertThat(doc.getPropertyString("propDocs2..propString[1]")).isEqualTo("Hawk");
-        assertThat(doc.getPropertyString("propDocs2..")).isEqualTo("Red");
-        assertThat(doc.getPropertyString("propDocs2..[1]")).isEqualTo("Blue");
-        assertThat(doc.getPropertyString("[0]..propString[1]")).isEqualTo("Bird");
-        assertThat(doc.getPropertyString("[0]..[1]")).isEqualTo("Green");
+    public void testNestedProperties_buildBlankPaths() {
+        Exception e = assertThrows(IllegalArgumentException.class,
+                () -> new GenericDocument.Builder<>("namespace", "id1", "schema1")
+                        .setPropertyString("", "foo"));
+        assertThat(e.getMessage()).isEqualTo("Property name cannot be blank.");
+
+        e = assertThrows(IllegalArgumentException.class,
+                () -> new GenericDocument.Builder<>("namespace", "id1", "schema1")
+                        .setPropertyDocument("propDoc",
+                                new GenericDocument.Builder<>("namespace", "id2", "schema1")
+                                        .setPropertyString("", "Bat", "Hawk")
+                                        .build()));
+        assertThat(e.getMessage()).isEqualTo("Property name cannot be blank.");
     }
 
     @Test
@@ -600,37 +582,34 @@
                 .setPropertyDouble("propDoubles", 3.14, 0.42)
                 .setPropertyBoolean("propBools", false)
                 .setPropertyBytes("propBytes", new byte[][]{{3, 4}})
-                .setPropertyDocument("propDocs", new GenericDocument.Builder<>("", "", "schema1")
-                        .setPropertyString("", "Cat")
-                        .build())
+                .setPropertyDocument("propDocs",
+                        new GenericDocument.Builder<>("namespace", "id2", "schema1")
+                                .setPropertyString("propString", "Cat")
+                                .build())
                 .build();
 
-        // Some paths are invalid because they don't apply to the given document --- these should
+        // These paths are invalid because they don't apply to the given document --- these should
         // return null. It's not the querier's fault.
         assertThat(doc.getPropertyStringArray("propString.propInts")).isNull();
         assertThat(doc.getPropertyStringArray("propDocs.propFoo")).isNull();
         assertThat(doc.getPropertyStringArray("propDocs.propNestedString.propFoo")).isNull();
+    }
 
-        // Some paths are invalid because they are malformed. These throw an exception --- the
-        // querier shouldn't provide such paths.
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> doc.getPropertyStringArray("propDocs.[0]propInts"));
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> doc.getPropertyStringArray("propString[0"));
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> doc.getPropertyStringArray("propString[0.]"));
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> doc.getPropertyStringArray("propString[banana]"));
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> doc.getPropertyStringArray("propString[-1]"));
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> doc.getPropertyStringArray("propDocs[0]cat"));
+    @Test
+    public void testNestedProperties_arrayTypesInvalidPath() {
+        GenericDocument doc = new GenericDocument.Builder<>("namespace", "id1", "schema1").build();
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyString("."));
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyDocument("."));
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyBoolean("."));
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyDouble("."));
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyLong("."));
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyBytes("."));
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyStringArray("."));
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyDocumentArray("."));
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyBooleanArray("."));
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyDoubleArray("."));
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyLongArray("."));
+        assertThrows(IllegalArgumentException.class, () -> doc.getPropertyBytesArray("."));
     }
 
     @Test
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GetSchemaResponseCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GetSchemaResponseCtsTest.java
index 1220731..72faaef 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GetSchemaResponseCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GetSchemaResponseCtsTest.java
@@ -20,12 +20,24 @@
 
 import androidx.appsearch.app.AppSearchSchema;
 import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.SetSchemaRequest;
+
+import com.google.common.collect.ImmutableSet;
 
 import org.junit.Test;
 
+import java.util.Arrays;
+
 public class GetSchemaResponseCtsTest {
     @Test
     public void testRebuild() {
+        byte[] sha256cert1 = new byte[32];
+        byte[] sha256cert2 = new byte[32];
+        Arrays.fill(sha256cert1, (byte) 1);
+        Arrays.fill(sha256cert2, (byte) 2);
+        PackageIdentifier packageIdentifier1 = new PackageIdentifier("Email", sha256cert1);
+        PackageIdentifier packageIdentifier2 = new PackageIdentifier("Email", sha256cert2);
         AppSearchSchema schema1 = new AppSearchSchema.Builder("Email1")
                 .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("subject")
                         .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
@@ -44,16 +56,111 @@
                 ).build();
 
         GetSchemaResponse.Builder builder =
-                new GetSchemaResponse.Builder().setVersion(42).addSchema(schema1);
+                new GetSchemaResponse.Builder().setVersion(42).addSchema(schema1)
+                        .addSchemaTypeNotDisplayedBySystem("Email1")
+                        .setSchemaTypeVisibleToPackages("Email1",
+                                ImmutableSet.of(packageIdentifier1))
+                        .setRequiredPermissionsForSchemaTypeVisibility("Email1",
+                                ImmutableSet.of(
+                                        ImmutableSet.of(SetSchemaRequest.READ_SMS,
+                                                SetSchemaRequest.READ_CALENDAR),
+                                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA))
+                        );
 
         GetSchemaResponse original = builder.build();
-        GetSchemaResponse rebuild = builder.setVersion(37).addSchema(schema2).build();
+        GetSchemaResponse rebuild = builder.setVersion(37).addSchema(schema2)
+                .addSchemaTypeNotDisplayedBySystem("Email2")
+                .setSchemaTypeVisibleToPackages("Email2",
+                        ImmutableSet.of(packageIdentifier2))
+                .setRequiredPermissionsForSchemaTypeVisibility("Email2",
+                        ImmutableSet.of(
+                                        ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+                                                SetSchemaRequest.READ_EXTERNAL_STORAGE),
+                                        ImmutableSet.of(SetSchemaRequest
+                                                .READ_ASSISTANT_APP_SEARCH_DATA))
+                ).build();
 
         // rebuild won't effect the original object
         assertThat(original.getVersion()).isEqualTo(42);
         assertThat(original.getSchemas()).containsExactly(schema1);
+        assertThat(original.getSchemaTypesNotDisplayedBySystem())
+                .containsExactly("Email1");
+        assertThat(original.getSchemaTypesVisibleToPackages()).hasSize(1);
+        assertThat(original.getSchemaTypesVisibleToPackages().get("Email1"))
+                .containsExactly(packageIdentifier1);
+        assertThat(original.getRequiredPermissionsForSchemaTypeVisibility()).containsExactly(
+                "Email1",
+                ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS,
+                                SetSchemaRequest.READ_CALENDAR),
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)));
 
         assertThat(rebuild.getVersion()).isEqualTo(37);
         assertThat(rebuild.getSchemas()).containsExactly(schema1, schema2);
+        assertThat(rebuild.getSchemaTypesNotDisplayedBySystem())
+                .containsExactly("Email1", "Email2");
+        assertThat(rebuild.getSchemaTypesVisibleToPackages()).hasSize(2);
+        assertThat(rebuild.getSchemaTypesVisibleToPackages().get("Email1"))
+                .containsExactly(packageIdentifier1);
+        assertThat(rebuild.getSchemaTypesVisibleToPackages().get("Email2"))
+                .containsExactly(packageIdentifier2);
+        assertThat(rebuild.getRequiredPermissionsForSchemaTypeVisibility()).containsExactly(
+                "Email1",
+                ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS,
+                                SetSchemaRequest.READ_CALENDAR),
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+                "Email2",
+                ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+                                SetSchemaRequest.READ_EXTERNAL_STORAGE),
+                        ImmutableSet.of(SetSchemaRequest
+                                .READ_ASSISTANT_APP_SEARCH_DATA)));
+    }
+
+    @Test
+    public void setVisibility() {
+        byte[] sha256cert1 = new byte[32];
+        byte[] sha256cert2 = new byte[32];
+        Arrays.fill(sha256cert1, (byte) 1);
+        Arrays.fill(sha256cert2, (byte) 2);
+        PackageIdentifier packageIdentifier1 = new PackageIdentifier("Email", sha256cert1);
+        PackageIdentifier packageIdentifier2 = new PackageIdentifier("Email", sha256cert2);
+
+        GetSchemaResponse getSchemaResponse =
+                new GetSchemaResponse.Builder().setVersion(42)
+                        .addSchemaTypeNotDisplayedBySystem("Email")
+                        .addSchemaTypeNotDisplayedBySystem("Text")
+                        .setSchemaTypeVisibleToPackages("Email",
+                                ImmutableSet.of(packageIdentifier1, packageIdentifier2))
+                        .setRequiredPermissionsForSchemaTypeVisibility("Email",
+                                ImmutableSet.of(
+                                                ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+                                                        SetSchemaRequest.READ_EXTERNAL_STORAGE),
+                                                ImmutableSet.of(SetSchemaRequest
+                                                        .READ_ASSISTANT_APP_SEARCH_DATA)))
+                        .build();
+
+        assertThat(getSchemaResponse.getSchemaTypesNotDisplayedBySystem())
+                .containsExactly("Email", "Text");
+        assertThat(getSchemaResponse.getSchemaTypesVisibleToPackages()).hasSize(1);
+        assertThat(getSchemaResponse.getSchemaTypesVisibleToPackages().get("Email"))
+                .containsExactly(packageIdentifier1, packageIdentifier2);
+        assertThat(getSchemaResponse.getRequiredPermissionsForSchemaTypeVisibility().get("Email"))
+                .containsExactlyElementsIn(ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+                                SetSchemaRequest.READ_EXTERNAL_STORAGE),
+                        ImmutableSet.of(SetSchemaRequest
+                                .READ_ASSISTANT_APP_SEARCH_DATA)));
+    }
+
+    @Test
+    public void getEmptyVisibility() {
+        GetSchemaResponse getSchemaResponse =
+                new GetSchemaResponse.Builder().setVersion(42)
+                        .build();
+        assertThat(getSchemaResponse.getSchemaTypesNotDisplayedBySystem()).isEmpty();
+        assertThat(getSchemaResponse.getSchemaTypesVisibleToPackages()).isEmpty();
+        assertThat(getSchemaResponse.getRequiredPermissionsForSchemaTypeVisibility()).isEmpty();
     }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionCtsTestBase.java
index 1e03d4e..98fa981 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionCtsTestBase.java
@@ -28,13 +28,17 @@
 import android.content.Context;
 
 import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchBatchResult;
 import androidx.appsearch.app.AppSearchResult;
 import androidx.appsearch.app.AppSearchSchema;
 import androidx.appsearch.app.AppSearchSchema.PropertyConfig;
 import androidx.appsearch.app.AppSearchSession;
 import androidx.appsearch.app.Features;
 import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetByDocumentIdRequest;
+import androidx.appsearch.app.GetSchemaResponse;
 import androidx.appsearch.app.GlobalSearchSession;
+import androidx.appsearch.app.Migrator;
 import androidx.appsearch.app.PutDocumentsRequest;
 import androidx.appsearch.app.RemoveByDocumentIdRequest;
 import androidx.appsearch.app.ReportSystemUsageRequest;
@@ -45,11 +49,13 @@
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.observer.DocumentChangeInfo;
 import androidx.appsearch.observer.ObserverSpec;
+import androidx.appsearch.observer.SchemaChangeInfo;
 import androidx.appsearch.testutil.AppSearchEmail;
 import androidx.appsearch.testutil.TestObserverCallback;
 import androidx.test.core.app.ApplicationProvider;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.util.concurrent.ListenableFuture;
 
 import org.junit.After;
@@ -75,21 +81,21 @@
 
     protected GlobalSearchSession mGlobalSearchSession;
 
-    protected abstract ListenableFuture<AppSearchSession> createSearchSession(
+    protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
             @NonNull String dbName);
 
-    protected abstract ListenableFuture<GlobalSearchSession> createGlobalSearchSession();
+    protected abstract ListenableFuture<GlobalSearchSession> createGlobalSearchSessionAsync();
 
     @Before
     public void setUp() throws Exception {
-        mDb1 = createSearchSession(DB_NAME_1).get();
-        mDb2 = createSearchSession(DB_NAME_2).get();
+        mDb1 = createSearchSessionAsync(DB_NAME_1).get();
+        mDb2 = createSearchSessionAsync(DB_NAME_2).get();
 
         // Cleanup whatever documents may still exist in these databases. This is needed in
         // addition to tearDown in case a test exited without completing properly.
         cleanup();
 
-        mGlobalSearchSession = createGlobalSearchSession().get();
+        mGlobalSearchSession = createGlobalSearchSessionAsync().get();
     }
 
     @After
@@ -99,9 +105,9 @@
     }
 
     private void cleanup() throws Exception {
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
-        mDb2.setSchema(
+        mDb2.setSchemaAsync(
                 new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
     }
 
@@ -128,6 +134,61 @@
     }
 
     @Test
+    public void testGlobalGetById() throws Exception {
+        assumeTrue(mGlobalSearchSession.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_GET_BY_ID));
+        SearchSpec exactSearchSpec = new SearchSpec.Builder()
+                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                .build();
+
+        // Schema registration
+        mDb1.setSchemaAsync(
+                new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
+
+        AppSearchBatchResult<String, GenericDocument> nonExistent =
+                mGlobalSearchSession.getByDocumentIdAsync(mContext.getPackageName(), DB_NAME_1,
+                        new GetByDocumentIdRequest.Builder("namespace").addIds("id1")
+                                .build()).get();
+
+        assertThat(nonExistent.isSuccess()).isFalse();
+        assertThat(nonExistent.getSuccesses()).isEmpty();
+        assertThat(nonExistent.getFailures()).containsKey("id1");
+        assertThat(nonExistent.getFailures().get("id1").getResultCode())
+                .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
+
+        // Index a document
+        AppSearchEmail inEmail =
+                new AppSearchEmail.Builder("namespace", "id1")
+                        .setFrom("from@example.com")
+                        .setTo("to1@example.com", "to2@example.com")
+                        .setSubject("testPut example")
+                        .setBody("This is the body of the testPut email")
+                        .build();
+        checkIsBatchResultSuccess(mDb1.putAsync(
+                new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
+
+        // Query for the document
+        AppSearchBatchResult<String, GenericDocument> afterPutDocuments =
+                mGlobalSearchSession.getByDocumentIdAsync(mContext.getPackageName(), DB_NAME_1,
+                        new GetByDocumentIdRequest.Builder("namespace").addIds("id1")
+                                .build()).get();
+        assertThat(afterPutDocuments.getSuccesses()).containsExactly("id1", inEmail);
+    }
+
+    @Test
+    public void testGlobalGetById_nonExistentPackage() throws Exception {
+        assumeTrue(mGlobalSearchSession.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_GET_BY_ID));
+        AppSearchBatchResult<String, GenericDocument> fakePackage =
+                mGlobalSearchSession.getByDocumentIdAsync("fake", DB_NAME_1,
+                        new GetByDocumentIdRequest.Builder("namespace").addIds("id1")
+                                .build()).get();
+        assertThat(fakePackage.getFailures()).hasSize(1);
+        assertThat(fakePackage.getFailures().get("id1").getResultCode())
+                .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
+    }
+
+    @Test
     public void testGlobalQuery_oneInstance() throws Exception {
         // Snapshot what documents may already exist on the device.
         SearchSpec exactSearchSpec = new SearchSpec.Builder()
@@ -138,7 +199,7 @@
                 exactSearchSpec);
 
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a document
@@ -149,7 +210,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
 
         // Query for the document
@@ -173,9 +234,9 @@
         List<GenericDocument> beforeBodyDocuments = snapshotResults("body", exactSearchSpec);
 
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        mDb2.setSchema(
+        mDb2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a document to instance 1.
@@ -186,7 +247,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
 
         // Index a document to instance 2.
@@ -197,7 +258,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail2).build()));
 
         // Query across all instances
@@ -215,7 +276,7 @@
         List<GenericDocument> beforeBodyDocuments = snapshotResults("body", exactSearchSpec);
 
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
         List<AppSearchEmail> emailList = new ArrayList<>();
         PutDocumentsRequest.Builder putDocumentsRequestBuilder = new PutDocumentsRequest.Builder();
@@ -232,7 +293,7 @@
             emailList.add(inEmail);
             putDocumentsRequestBuilder.addGenericDocuments(inEmail);
         }
-        checkIsBatchResultSuccess(mDb1.put(putDocumentsRequestBuilder.build()));
+        checkIsBatchResultSuccess(mDb1.putAsync(putDocumentsRequestBuilder.build()));
 
         // Set number of results per page is 7.
         int pageSize = 7;
@@ -248,7 +309,7 @@
 
         // keep loading next page until it's empty.
         do {
-            results = searchResults.getNextPage().get();
+            results = searchResults.getNextPageAsync().get();
             ++pageNumber;
             for (SearchResult result : results) {
                 documents.add(result.getGenericDocument());
@@ -293,19 +354,19 @@
                 ).build();
 
         // db1 has both "Generic" and "builtin:Email"
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(genericSchema).addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // db2 only has "builtin:Email"
-        mDb2.setSchema(
+        mDb2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index a generic document into db1
         GenericDocument genericDocument = new GenericDocument.Builder<>("namespace", "id2",
                 "Generic")
                 .setPropertyString("foo", "body").build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(genericDocument).build()));
 
@@ -318,9 +379,9 @@
                         .build();
 
         // Put the email in both databases
-        checkIsBatchResultSuccess((mDb1.put(
+        checkIsBatchResultSuccess((mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email).build())));
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
 
         // Query for all documents across types
@@ -352,9 +413,9 @@
                 exactNamespace1SearchSpec);
 
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        mDb2.setSchema(
+        mDb2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index two documents
@@ -365,7 +426,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(document1).build()));
 
@@ -376,7 +437,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(document2).build()));
 
         // Query for all namespaces
@@ -410,9 +471,9 @@
                 testPackageSearchSpec);
 
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        mDb2.setSchema(
+        mDb2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index two documents
@@ -423,7 +484,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(document1).build()));
 
@@ -434,7 +495,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(document2).build()));
 
         // Query in some other package
@@ -454,11 +515,11 @@
     @Test
     public void testGlobalQuery_projectionTwoInstances() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
-        mDb2.setSchema(
+        mDb2.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
@@ -472,7 +533,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1).build()));
 
@@ -484,7 +545,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email2).build()));
 
@@ -516,11 +577,11 @@
     @Test
     public void testGlobalQuery_projectionEmptyTwoInstances() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
-        mDb2.setSchema(
+        mDb2.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
@@ -534,7 +595,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1).build()));
 
@@ -546,7 +607,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email2).build()));
 
@@ -573,11 +634,11 @@
     @Test
     public void testGlobalQuery_projectionNonExistentTypeTwoInstances() throws Exception {
         // Schema registration
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
-        mDb2.setSchema(
+        mDb2.setSchemaAsync(
                 new SetSchemaRequest.Builder()
                         .addSchemas(AppSearchEmail.SCHEMA)
                         .build()).get();
@@ -591,7 +652,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1).build()));
 
@@ -603,7 +664,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email2).build()));
 
@@ -636,9 +697,9 @@
     @Test
     public void testQuery_ResultGroupingLimits() throws Exception {
         // Schema registration
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder()
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index one document in 'namespace1' and one document in 'namespace2' into db1.
@@ -649,7 +710,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
         AppSearchEmail inEmail2 =
                 new AppSearchEmail.Builder("namespace2", "id2")
@@ -658,7 +719,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb1.put(
+        checkIsBatchResultSuccess(mDb1.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail2).build()));
 
         // Index one document in 'namespace1' and one document in 'namespace2' into db2.
@@ -669,7 +730,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail3).build()));
         AppSearchEmail inEmail4 =
                 new AppSearchEmail.Builder("namespace2", "id4")
@@ -678,7 +739,7 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(mDb2.put(
+        checkIsBatchResultSuccess(mDb2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail4).build()));
 
         // Query with per package result grouping. Only the last document 'email4' should be
@@ -716,7 +777,7 @@
     @Test
     public void testReportSystemUsage_ForbiddenFromNonSystem() throws Exception {
         // Index a document
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
         AppSearchEmail email1 =
                 new AppSearchEmail.Builder("namespace", "id1")
@@ -727,7 +788,8 @@
                         .setBody("This is the body of the testPut email")
                         .build();
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
+                        .addGenericDocuments(email1).build()));
 
         // Query
         List<SearchResult> page;
@@ -735,13 +797,13 @@
                 .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
                 .addFilterSchemas(AppSearchEmail.SCHEMA_TYPE)
                 .build())) {
-            page = results.getNextPage().get();
+            page = results.getNextPageAsync().get();
         }
         assertThat(page).isNotEmpty();
         SearchResult firstResult = page.get(0);
 
         ExecutionException exception = assertThrows(
-                ExecutionException.class, () -> mGlobalSearchSession.reportSystemUsage(
+                ExecutionException.class, () -> mGlobalSearchSession.reportSystemUsageAsync(
                         new ReportSystemUsageRequest.Builder(
                                 firstResult.getPackageName(),
                                 firstResult.getDatabaseName(),
@@ -758,56 +820,63 @@
     @Test
     public void testAddObserver_notSupported() {
         assumeFalse(mGlobalSearchSession.getFeatures()
-                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
         assertThrows(
                 UnsupportedOperationException.class,
-                () -> mGlobalSearchSession.addObserver(
+                () -> mGlobalSearchSession.registerObserverCallback(
                         mContext.getPackageName(),
                         new ObserverSpec.Builder().build(),
                         EXECUTOR,
                         new TestObserverCallback()));
         assertThrows(
                 UnsupportedOperationException.class,
-                () -> mGlobalSearchSession.removeObserver(
+                () -> mGlobalSearchSession.unregisterObserverCallback(
                         mContext.getPackageName(), new TestObserverCallback()));
     }
 
     @Test
     public void testAddObserver() throws Exception {
         assumeTrue(mGlobalSearchSession.getFeatures()
-                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
 
         TestObserverCallback observer = new TestObserverCallback();
 
         // Register observer. Note: the type does NOT exist yet!
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
                 EXECUTOR,
                 observer);
 
         // Index a document
-        mDb1.setSchema(
+        mDb1.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
         AppSearchEmail email1 = new AppSearchEmail.Builder("namespace", "id1").build();
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
+                        .addGenericDocuments(email1).build()));
 
         // Make sure the notification was received.
-        observer.waitForNotificationCount(1);
-        assertThat(observer.getSchemaChanges()).isEmpty();
+        observer.waitForNotificationCount(2);
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(),
+                        DB_NAME_1,
+                        /*changedSchemaNames=*/ImmutableSet.of(AppSearchEmail.SCHEMA_TYPE)));
         assertThat(observer.getDocumentChanges()).containsExactly(
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE));
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1"))
+        );
     }
 
     @Test
     public void testRegisterObserver_MultiType() throws Exception {
         assumeTrue(mGlobalSearchSession.getFeatures()
-                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
 
         TestObserverCallback unfilteredObserver = new TestObserverCallback();
         TestObserverCallback emailObserver = new TestObserverCallback();
@@ -816,18 +885,18 @@
         AppSearchSchema giftSchema = new AppSearchSchema.Builder("Gift")
                 .addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("price").build())
                 .build();
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder()
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Register two observers. One has no filters, the other filters on email.
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().build(),
                 EXECUTOR,
                 unfilteredObserver);
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
                 EXECUTOR,
@@ -845,14 +914,17 @@
                 "namespace2", "id2", "Gift").build();
 
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
+                        .addGenericDocuments(email1).build()));
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder()
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, gift1).build()));
         checkIsBatchResultSuccess(
-                mDb2.put(new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
+                mDb2.putAsync(new PutDocumentsRequest.Builder()
+                        .addGenericDocuments(email1).build()));
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(gift1).build()));
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
+                        .addGenericDocuments(gift1).build()));
 
         // Make sure the notification was received.
         unfilteredObserver.waitForNotificationCount(5);
@@ -864,27 +936,32 @@
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace2",
-                        "Gift"),
+                        "Gift",
+                        /*changedDocumentIds=*/ImmutableSet.of("id2")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_2,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace2",
-                        "Gift")
+                        "Gift",
+                        /*changedDocumentIds=*/ImmutableSet.of("id2"))
         );
 
         // Check the filtered observer
@@ -894,24 +971,27 @@
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_2,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE)
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1"))
         );
     }
 
     @Test
     public void testRegisterObserver_removeById() throws Exception {
         assumeTrue(mGlobalSearchSession.getFeatures()
-                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
 
         TestObserverCallback unfilteredObserver = new TestObserverCallback();
         TestObserverCallback emailObserver = new TestObserverCallback();
@@ -920,14 +1000,14 @@
         AppSearchSchema giftSchema = new AppSearchSchema.Builder("Gift")
                 .addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("price").build())
                 .build();
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder()
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
 
         // Register two observers. One, registered later, has no filters. The other, registered
         // now, filters on email.
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
                 EXECUTOR,
@@ -945,27 +1025,29 @@
                 "namespace2", "id2", "Gift").build();
 
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
+                        .addGenericDocuments(email1).build()));
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder()
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, gift1).build()));
         checkIsBatchResultSuccess(
-                mDb2.put(new PutDocumentsRequest.Builder()
+                mDb2.putAsync(new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, gift1).build()));
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(gift1).build()));
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
+                        .addGenericDocuments(gift1).build()));
 
         // Register the second observer
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().build(),
                 EXECUTOR,
                 unfilteredObserver);
 
         // Remove some of the documents.
-        checkIsBatchResultSuccess(mDb1.remove(
+        checkIsBatchResultSuccess(mDb1.removeAsync(
                 new RemoveByDocumentIdRequest.Builder("namespace").addIds("id1").build()));
-        checkIsBatchResultSuccess(mDb2.remove(
+        checkIsBatchResultSuccess(mDb2.removeAsync(
                 new RemoveByDocumentIdRequest.Builder("namespace2").addIds("id2").build()));
 
         // Make sure the notification was received. emailObserver should have seen:
@@ -981,22 +1063,26 @@
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_2,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE)
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1"))
         );
 
         // Check unfilteredObserver
@@ -1006,19 +1092,21 @@
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_2,
                         "namespace2",
-                        "Gift")
+                        "Gift",
+                        /*changedDocumentIds=*/ImmutableSet.of("id2"))
         );
     }
 
     @Test
     public void testRegisterObserver_removeByQuery() throws Exception {
         assumeTrue(mGlobalSearchSession.getFeatures()
-                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
 
         TestObserverCallback unfilteredObserver = new TestObserverCallback();
         TestObserverCallback emailObserver = new TestObserverCallback();
@@ -1027,9 +1115,9 @@
         AppSearchSchema giftSchema = new AppSearchSchema.Builder("Gift")
                 .addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("price").build())
                 .build();
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder()
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
 
         // Index some documents
@@ -1040,19 +1128,19 @@
                 "namespace2", "id3", "Gift").build();
 
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder()
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, email2, gift1).build()));
         checkIsBatchResultSuccess(
-                mDb2.put(new PutDocumentsRequest.Builder().addGenericDocuments(
+                mDb2.putAsync(new PutDocumentsRequest.Builder().addGenericDocuments(
                         email1, email2, gift1).build()));
 
         // Register observers
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().build(),
                 EXECUTOR,
                 unfilteredObserver);
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
                 EXECUTOR,
@@ -1065,20 +1153,16 @@
         assertThat(emailObserver.getDocumentChanges()).isEmpty();
 
         // Remove "cat" emails in db1 and all types in db2
-        mDb1.remove(
-                "cat",
-                new SearchSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build())
+        mDb1.removeAsync("cat",
+                        new SearchSpec.Builder()
+                                .addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build())
                 .get();
-        mDb2.remove("", new SearchSpec.Builder().build()).get();
+        mDb2.removeAsync("", new SearchSpec.Builder().build()).get();
 
         // Make sure the notification was received. UnfilteredObserver should have seen:
         //   -db1:id2, -db2:id1, -db2:id2, -db2:id3
         // emailObserver should have seen:
         //   -db1:id2, -db2:id1, -db2:id2
-        // TODO(b/193494000): Notifications are currently grouped by
-        //  (package, database, namespace, schema). This causes -db2:id1 and -db2:id2 to be combined
-        //  into one notification. Once notifications have IDs, we need to check to make sure all
-        //  the individual IDs are reported in the combined notification.
         unfilteredObserver.waitForNotificationCount(3);
         emailObserver.waitForNotificationCount(2);
 
@@ -1088,17 +1172,20 @@
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id2")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_2,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1", "id2")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_2,
                         "namespace2",
-                        "Gift")
+                        "Gift",
+                        /*changedDocumentIds=*/ImmutableSet.of("id3"))
         );
 
         // Check emailObserver
@@ -1108,19 +1195,21 @@
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id2")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_2,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE)
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1", "id2"))
         );
     }
 
     @Test
     public void testRegisterObserver_sameCallback_differentSpecs() throws Exception {
         assumeTrue(mGlobalSearchSession.getFeatures()
-                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
 
         TestObserverCallback observer = new TestObserverCallback();
 
@@ -1128,16 +1217,16 @@
         AppSearchSchema giftSchema = new AppSearchSchema.Builder("Gift")
                 .addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("price").build())
                 .build();
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
 
         // Register the same observer twice: once for gift, once for email
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().addFilterSchemas("Gift").build(),
                 EXECUTOR,
                 observer);
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
                 EXECUTOR,
@@ -1149,7 +1238,7 @@
                 "namespace2", "id3", "Gift").build();
 
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder()
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, gift1).build()));
 
         // Make sure the same observer received both values
@@ -1160,19 +1249,21 @@
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace2",
-                        "Gift")
+                        "Gift",
+                        /*changedDocumentIds=*/ImmutableSet.of("id3"))
         );
     }
 
     @Test
     public void testRemoveObserver() throws Exception {
         assumeTrue(mGlobalSearchSession.getFeatures()
-                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
 
         TestObserverCallback temporaryObserver = new TestObserverCallback();
         TestObserverCallback permanentObserver = new TestObserverCallback();
@@ -1181,24 +1272,24 @@
         AppSearchSchema giftSchema = new AppSearchSchema.Builder("Gift")
                 .addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("price").build())
                 .build();
-        mDb1.setSchema(new SetSchemaRequest.Builder()
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
-        mDb2.setSchema(new SetSchemaRequest.Builder()
+        mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
                 .addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
 
         // Register both observers. temporaryObserver is registered twice to ensure both instances
         // get removed.
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
                 EXECUTOR,
                 temporaryObserver);
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().addFilterSchemas("Gift").build(),
                 EXECUTOR,
                 temporaryObserver);
-        mGlobalSearchSession.addObserver(
+        mGlobalSearchSession.registerObserverCallback(
                 mContext.getPackageName(),
                 new ObserverSpec.Builder().build(),
                 EXECUTOR,
@@ -1220,7 +1311,7 @@
                 "namespace3", "id4", "Gift").build();
 
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder()
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email1, gift1).build()));
 
         // Make sure the notifications were received.
@@ -1232,12 +1323,14 @@
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace2",
-                        "Gift"));
+                        "Gift",
+                        /*changedDocumentIds=*/ImmutableSet.of("id3")));
         assertThat(temporaryObserver.getSchemaChanges()).isEmpty();
         assertThat(temporaryObserver.getDocumentChanges())
                 .containsExactlyElementsIn(expectedChangesOrig);
@@ -1246,11 +1339,12 @@
                 .containsExactlyElementsIn(expectedChangesOrig);
 
         // Unregister temporaryObserver
-        mGlobalSearchSession.removeObserver(mContext.getPackageName(), temporaryObserver);
+        mGlobalSearchSession.unregisterObserverCallback(
+                mContext.getPackageName(), temporaryObserver);
 
         // Index some more documents
         checkIsBatchResultSuccess(
-                mDb1.put(new PutDocumentsRequest.Builder()
+                mDb1.putAsync(new PutDocumentsRequest.Builder()
                         .addGenericDocuments(email2, gift2).build()));
 
         // Only the permanent observer should have received this
@@ -1263,25 +1357,477 @@
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id1")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace2",
-                        "Gift"),
+                        "Gift",
+                        /*changedDocumentIds=*/ImmutableSet.of("id3")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace",
-                        AppSearchEmail.SCHEMA_TYPE),
+                        AppSearchEmail.SCHEMA_TYPE,
+                        /*changedDocumentIds=*/ImmutableSet.of("id2")),
                 new DocumentChangeInfo(
                         mContext.getPackageName(),
                         DB_NAME_1,
                         "namespace3",
-                        "Gift")
+                        "Gift",
+                        /*changedDocumentIds=*/ImmutableSet.of("id4"))
         );
         assertThat(temporaryObserver.getSchemaChanges()).isEmpty();
         assertThat(temporaryObserver.getDocumentChanges())
                 .containsExactlyElementsIn(expectedChangesOrig);
     }
+
+    @Test
+    public void testGlobalGetSchema() throws Exception {
+        assumeTrue(mGlobalSearchSession.getFeatures()
+                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA));
+
+        // One schema should be set with global access and the other should be set with local
+        // access.
+        mDb1.setSchemaAsync(
+                new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
+        mDb2.setSchemaAsync(
+                new SetSchemaRequest.Builder().addSchemas(
+                        AppSearchEmail.SCHEMA).setSchemaTypeDisplayedBySystem(
+                        AppSearchEmail.SCHEMA_TYPE, /*displayed=*/false).build()).get();
+
+        GetSchemaResponse response = mGlobalSearchSession.getSchemaAsync(mContext.getPackageName(),
+                DB_NAME_1).get();
+        assertThat(response.getSchemas()).containsExactly(AppSearchEmail.SCHEMA);
+
+        response = mGlobalSearchSession.getSchemaAsync(mContext.getPackageName(), DB_NAME_2).get();
+        assertThat(response.getSchemas()).containsExactly(AppSearchEmail.SCHEMA);
+
+        // A request for a db that doesn't exist should return a response with no schemas.
+        response = mGlobalSearchSession.getSchemaAsync(
+                mContext.getPackageName(), "NonexistentDb").get();
+        assertThat(response.getSchemas()).isEmpty();
+    }
+
+    @Test
+    public void testGlobalGetSchema_notSupported() throws Exception {
+        assumeFalse(mGlobalSearchSession.getFeatures()
+                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA));
+
+        // One schema should be set with global access and the other should be set with local
+        // access.
+        mDb1.setSchemaAsync(
+                new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
+
+        UnsupportedOperationException e = assertThrows(UnsupportedOperationException.class,
+                () -> mGlobalSearchSession.getSchemaAsync(mContext.getPackageName(), DB_NAME_1));
+        assertThat(e).hasMessageThat().isEqualTo(Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA
+                + " is not supported on this AppSearch implementation.");
+    }
+
+    @Test
+    public void testGlobalGetByDocumentId_notSupported() throws Exception {
+        assumeFalse(mGlobalSearchSession.getFeatures()
+                .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_GET_BY_ID));
+
+        Context context = ApplicationProvider.getApplicationContext();
+
+        UnsupportedOperationException e = assertThrows(UnsupportedOperationException.class,
+                () -> mGlobalSearchSession.getByDocumentIdAsync(context.getPackageName(), DB_NAME_1,
+                        new GetByDocumentIdRequest.Builder("namespace")
+                                .addIds("id").build()));
+
+        assertThat(e).hasMessageThat().isEqualTo(Features.GLOBAL_SEARCH_SESSION_GET_BY_ID
+                + " is not supported on this AppSearch implementation.");
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_added() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mGlobalSearchSession.registerObserverCallback(
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                EXECUTOR,
+                observer);
+
+        // Add a schema type
+        assertThat(observer.getSchemaChanges()).isEmpty();
+        assertThat(observer.getDocumentChanges()).isEmpty();
+        mDb1.setSchemaAsync(
+                        new SetSchemaRequest.Builder()
+                                .addSchemas(new AppSearchSchema.Builder("Type1").build())
+                                .build())
+                .get();
+
+        observer.waitForNotificationCount(1);
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(),
+                        DB_NAME_1,
+                        ImmutableSet.of("Type1")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+
+        // Add two more schema types without touching the existing one
+        observer.clear();
+        mDb1.setSchemaAsync(
+                        new SetSchemaRequest.Builder()
+                                .addSchemas(
+                                        new AppSearchSchema.Builder("Type1").build(),
+                                        new AppSearchSchema.Builder("Type2").build(),
+                                        new AppSearchSchema.Builder("Type3").build())
+                                .build())
+                .get();
+
+        observer.waitForNotificationCount(1);
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), DB_NAME_1, ImmutableSet.of("Type2", "Type3")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_removed() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
+
+        // Add a schema type
+        mDb1.setSchemaAsync(
+                        new SetSchemaRequest.Builder()
+                                .addSchemas(
+                                        new AppSearchSchema.Builder("Type1").build(),
+                                        new AppSearchSchema.Builder("Type2").build())
+                                .build())
+                .get();
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mGlobalSearchSession.registerObserverCallback(
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                EXECUTOR,
+                observer);
+
+        // Remove Type2
+        mDb1.setSchemaAsync(
+                        new SetSchemaRequest.Builder()
+                                .addSchemas(new AppSearchSchema.Builder("Type1").build())
+                                .setForceOverride(true)
+                                .build())
+                .get();
+
+        observer.waitForNotificationCount(1);
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), DB_NAME_1, ImmutableSet.of("Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_contents() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
+
+        // Add a schema
+        mDb1.setSchemaAsync(
+            new SetSchemaRequest.Builder()
+                    .addSchemas(
+                            new AppSearchSchema.Builder("Type1").build(),
+                            new AppSearchSchema.Builder("Type2")
+                                    .addProperty(
+                                            new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                                    "booleanProp")
+                                                    .setCardinality(
+                                                            PropertyConfig.CARDINALITY_REQUIRED)
+                                                    .build())
+                                    .build())
+                    .build())
+            .get();
+
+        // Register an observer
+        TestObserverCallback observer = new TestObserverCallback();
+        mGlobalSearchSession.registerObserverCallback(
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().build(),
+                EXECUTOR,
+                observer);
+
+        // Update the schema, but don't make any actual changes
+        mDb1.setSchemaAsync(
+            new SetSchemaRequest.Builder()
+                    .addSchemas(
+                            new AppSearchSchema.Builder("Type1").build(),
+                            new AppSearchSchema.Builder("Type2")
+                                    .addProperty(
+                                            new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                                    "booleanProp")
+                                                    .setCardinality(
+                                                            PropertyConfig.CARDINALITY_REQUIRED)
+                                                    .build())
+                                    .build())
+                    .build())
+            .get();
+
+        // Now update the schema again, but this time actually make a change (cardinality of the
+        // property)
+        mDb1.setSchemaAsync(
+            new SetSchemaRequest.Builder()
+                    .addSchemas(
+                            new AppSearchSchema.Builder("Type1").build(),
+                            new AppSearchSchema.Builder("Type2")
+                                    .addProperty(
+                                            new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                                    "booleanProp")
+                                                    .setCardinality(
+                                                            PropertyConfig.CARDINALITY_OPTIONAL)
+                                                    .build())
+                                    .build())
+                    .build())
+            .get();
+
+        // Dispatch notifications
+        observer.waitForNotificationCount(1);
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), DB_NAME_1, ImmutableSet.of("Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testAddObserver_schemaChange_contents_skipBySpec() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
+
+        // Add a schema
+        mDb1.setSchemaAsync(
+                new SetSchemaRequest.Builder()
+                        .addSchemas(
+                                new AppSearchSchema.Builder("Type1")
+                                        .addProperty(
+                                                new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                                        "booleanProp")
+                                                        .setCardinality(
+                                                                PropertyConfig.CARDINALITY_REQUIRED)
+                                                        .build())
+                                        .build(),
+                                new AppSearchSchema.Builder("Type2")
+                                        .addProperty(
+                                                new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                                        "booleanProp")
+                                                        .setCardinality(
+                                                                PropertyConfig.CARDINALITY_REQUIRED)
+                                                        .build())
+                                        .build())
+                        .build())
+                .get();
+
+        // Register an observer that only listens for Type2
+        TestObserverCallback observer = new TestObserverCallback();
+        mGlobalSearchSession.registerObserverCallback(
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().addFilterSchemas("Type2").build(),
+                EXECUTOR,
+                observer);
+
+        // Update both types of the schema (changed cardinalities)
+        mDb1.setSchemaAsync(
+                new SetSchemaRequest.Builder()
+                        .addSchemas(
+                                new AppSearchSchema.Builder("Type1")
+                                        .addProperty(
+                                                new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                                        "booleanProp")
+                                                        .setCardinality(
+                                                                PropertyConfig.CARDINALITY_OPTIONAL)
+                                                        .build())
+                                        .build(),
+                                new AppSearchSchema.Builder("Type2")
+                                        .addProperty(
+                                                new AppSearchSchema.BooleanPropertyConfig.Builder(
+                                                        "booleanProp")
+                                                        .setCardinality(
+                                                                PropertyConfig.CARDINALITY_OPTIONAL)
+                                                        .build())
+                                        .build())
+                        .build())
+                .get();
+
+        observer.waitForNotificationCount(1);
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), DB_NAME_1, ImmutableSet.of("Type2")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
+
+    @Test
+    public void testRegisterObserver_schemaMigration() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(
+                Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
+
+        // Add a schema with two types
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
+                .setVersion(1)
+                .addSchemas(
+                        new AppSearchSchema.Builder("Type1")
+                                .addProperty(
+                                        new AppSearchSchema.StringPropertyConfig.Builder("strProp1")
+                                                .build()
+                                ).build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(
+                                        new AppSearchSchema.LongPropertyConfig.Builder("longProp1")
+                                                .build()
+                                ).build()
+                        ).build()
+        ).get();
+
+        // Index some documents
+        GenericDocument type1doc1 = new GenericDocument.Builder<GenericDocument.Builder<?>>(
+                "namespace", "t1id1", "Type1")
+                .setPropertyString("strProp1", "t1id1 prop value")
+                .build();
+        GenericDocument type1doc2 = new GenericDocument.Builder<GenericDocument.Builder<?>>(
+                "namespace", "t1id2", "Type1")
+                .setPropertyString("strProp1", "t1id2 prop value")
+                .build();
+        GenericDocument type2doc1 = new GenericDocument.Builder<GenericDocument.Builder<?>>(
+                "namespace", "t2id1", "Type2")
+                .setPropertyLong("longProp1", 41)
+                .build();
+        GenericDocument type2doc2 = new GenericDocument.Builder<GenericDocument.Builder<?>>(
+                "namespace", "t2id2", "Type2")
+                .setPropertyLong("longProp1", 42)
+                .build();
+        mDb1.putAsync(new PutDocumentsRequest.Builder()
+                .addGenericDocuments(type1doc1, type1doc2, type2doc1, type2doc2)
+                .build())
+                .get();
+
+        // Register an observer that only listens for Type1
+        TestObserverCallback observer = new TestObserverCallback();
+        mGlobalSearchSession.registerObserverCallback(
+                /*targetPackageName=*/mContext.getPackageName(),
+                new ObserverSpec.Builder().addFilterSchemas("Type1").build(),
+                EXECUTOR,
+                observer);
+
+        // Update both types of the schema with migration to a new property name
+        mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
+                .setVersion(2)
+                .addSchemas(
+                        new AppSearchSchema.Builder("Type1")
+                                .addProperty(
+                                        new AppSearchSchema.StringPropertyConfig.Builder("strProp2")
+                                                .build()
+                                ).build(),
+                        new AppSearchSchema.Builder("Type2")
+                                .addProperty(
+                                        new AppSearchSchema.LongPropertyConfig.Builder("longProp2")
+                                                .build()
+                                ).build()
+                        )
+                .setMigrator("Type1", new Migrator() {
+                    @Override
+                    public boolean shouldMigrate(int currentVersion, int finalVersion) {
+                        assertThat(currentVersion).isEqualTo(1);
+                        assertThat(finalVersion).isEqualTo(2);
+                        return true;
+                    }
+
+                    @NonNull
+                    @Override
+                    public GenericDocument onUpgrade(
+                            int currentVersion,
+                            int finalVersion,
+                            @NonNull GenericDocument document) {
+                        assertThat(currentVersion).isEqualTo(1);
+                        assertThat(finalVersion).isEqualTo(2);
+                        assertThat(document.getSchemaType()).isEqualTo("Type1");
+                        String[] prop = document.getPropertyStringArray("strProp1");
+                        assertThat(prop).isNotNull();
+                        return new GenericDocument.Builder<GenericDocument.Builder<?>>(
+                                document.getNamespace(),
+                                document.getId(),
+                                document.getSchemaType())
+                                .setPropertyString("strProp2", prop)
+                        .build();
+                    }
+
+                    @NonNull
+                    @Override
+                    public GenericDocument onDowngrade(
+                            int currentVersion,
+                            int finalVersion,
+                            @NonNull GenericDocument document) {
+                        // Doesn't happen in this test
+                        throw new UnsupportedOperationException();
+                    }
+                }).setMigrator("Type2", new Migrator() {
+                    @Override
+                    public boolean shouldMigrate(int currentVersion, int finalVersion) {
+                        assertThat(currentVersion).isEqualTo(1);
+                        assertThat(finalVersion).isEqualTo(2);
+                        return true;
+                    }
+
+                    @NonNull
+                    @Override
+                    public GenericDocument onUpgrade(
+                            int currentVersion,
+                            int finalVersion,
+                            @NonNull GenericDocument document) {
+                        assertThat(currentVersion).isEqualTo(1);
+                        assertThat(finalVersion).isEqualTo(2);
+                        assertThat(document.getSchemaType()).isEqualTo("Type2");
+                        long[] prop = document.getPropertyLongArray("longProp1");
+                        assertThat(prop).isNotNull();
+                        return new GenericDocument.Builder<GenericDocument.Builder<?>>(
+                                document.getNamespace(),
+                                document.getId(),
+                                document.getSchemaType())
+                                .setPropertyLong("longProp2", prop[0] + 1000)
+                        .build();
+                    }
+
+                    @NonNull
+                    @Override
+                    public GenericDocument onDowngrade(
+                            int currentVersion,
+                            int finalVersion,
+                            @NonNull GenericDocument document) {
+                        // Doesn't happen in this test
+                        throw new UnsupportedOperationException();
+                    }
+                })
+                .build()
+        ).get();
+
+        // Make sure the test is valid by checking that migration actually occurred
+        AppSearchBatchResult<String, GenericDocument> getResponse = mDb1.getByDocumentIdAsync(
+                new GetByDocumentIdRequest.Builder("namespace")
+                        .addIds("t1id1", "t1id2", "t2id1", "t2id2")
+                        .build())
+                .get();
+        assertThat(getResponse.isSuccess()).isTrue();
+        assertThat(getResponse.getSuccesses().get("t1id1").getPropertyString("strProp2"))
+                .isEqualTo("t1id1 prop value");
+        assertThat(getResponse.getSuccesses().get("t1id2").getPropertyString("strProp2"))
+                .isEqualTo("t1id2 prop value");
+        assertThat(getResponse.getSuccesses().get("t2id1").getPropertyLong("longProp2"))
+                .isEqualTo(1041);
+        assertThat(getResponse.getSuccesses().get("t2id2").getPropertyLong("longProp2"))
+                .isEqualTo(1042);
+
+        // Per the observer documentation, for schema migrations, individual document changes are
+        // not dispatched. Only SchemaChangeInfo is dispatched.
+        observer.waitForNotificationCount(1);
+        assertThat(observer.getSchemaChanges()).containsExactly(
+                new SchemaChangeInfo(
+                        mContext.getPackageName(), DB_NAME_1, ImmutableSet.of("Type1")));
+        assertThat(observer.getDocumentChanges()).isEmpty();
+    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionLocalCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionLocalCtsTest.java
index 19af478..4c038e9 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionLocalCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionLocalCtsTest.java
@@ -25,7 +25,6 @@
 import androidx.annotation.NonNull;
 import androidx.appsearch.app.AppSearchResult;
 import androidx.appsearch.app.AppSearchSession;
-import androidx.appsearch.app.Features;
 import androidx.appsearch.app.GlobalSearchSession;
 import androidx.appsearch.app.PutDocumentsRequest;
 import androidx.appsearch.app.SearchResult;
@@ -46,39 +45,31 @@
 
 public class GlobalSearchSessionLocalCtsTest extends GlobalSearchSessionCtsTestBase {
     @Override
-    protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
         Context context = ApplicationProvider.getApplicationContext();
-        return LocalStorage.createSearchSession(
+        return LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, dbName).build());
     }
 
     @Override
-    protected ListenableFuture<GlobalSearchSession> createGlobalSearchSession() {
+    protected ListenableFuture<GlobalSearchSession> createGlobalSearchSessionAsync() {
         Context context = ApplicationProvider.getApplicationContext();
-        return LocalStorage.createGlobalSearchSession(
+        return LocalStorage.createGlobalSearchSessionAsync(
                 new LocalStorage.GlobalSearchContext.Builder(context).build());
     }
 
-    @Test
-    public void testFeaturesSupported() {
-        assertThat(mDb1.getFeatures().isFeatureSupported(
-                Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH)).isTrue();
-        assertThat(mDb1.getFeatures().isFeatureSupported(
-                Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER)).isTrue();
-    }
-
     // TODO(b/194207451) This test can be moved to CtsTestBase if customized logger is
     //  supported for platform backend.
     @Test
     public void testLogger_searchStatsLogged_forEmptyFirstPage() throws Exception {
         SimpleTestLogger logger = new SimpleTestLogger();
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
                         .setLogger(logger).build()).get();
 
         // Schema registration
-        db2.setSchema(
+        db2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -96,10 +87,10 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(db2.put(
+        checkIsBatchResultSuccess(db2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
 
-        GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSession(
+        GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSessionAsync(
                 new LocalStorage.GlobalSearchContext.Builder(context).setLogger(
                         logger).build()).get();
         assertThat(logger.mSearchStats).isNull();
@@ -113,7 +104,7 @@
                 .build());
 
         // Get first page
-        List<SearchResult> page = searchResults.getNextPage().get();
+        List<SearchResult> page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(0);
 
         // Check searchStats has been set. We won't check all the fields here.
@@ -134,12 +125,12 @@
     public void testLogger_searchStatsLogged_forNonEmptyFirstPage() throws Exception {
         SimpleTestLogger logger = new SimpleTestLogger();
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
                         .setLogger(logger).build()).get();
 
         // Schema registration
-        db2.setSchema(
+        db2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -157,10 +148,10 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(db2.put(
+        checkIsBatchResultSuccess(db2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
 
-        GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSession(
+        GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSessionAsync(
                 new LocalStorage.GlobalSearchContext.Builder(context).setLogger(
                         logger).build()).get();
         assertThat(logger.mSearchStats).isNull();
@@ -174,7 +165,7 @@
                 .build());
 
         // Get first page
-        List<SearchResult> page = searchResults.getNextPage().get();
+        List<SearchResult> page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(1);
 
         // Check searchStats has been set. We won't check all the fields here.
@@ -195,12 +186,12 @@
     public void testLogger_searchStatsLogged_forEmptySecondPage() throws Exception {
         SimpleTestLogger logger = new SimpleTestLogger();
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
                         .setLogger(logger).build()).get();
 
         // Schema registration
-        db2.setSchema(
+        db2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -218,10 +209,10 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(db2.put(
+        checkIsBatchResultSuccess(db2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
 
-        GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSession(
+        GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSessionAsync(
                 new LocalStorage.GlobalSearchContext.Builder(context).setLogger(
                         logger).build()).get();
         assertThat(logger.mSearchStats).isNull();
@@ -235,12 +226,12 @@
                 .build());
 
         // Get first page
-        List<SearchResult> page = searchResults.getNextPage().get();
+        List<SearchResult> page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(2);
 
         // Get second(empty) page
         logger.mSearchStats = null;
-        page = searchResults.getNextPage().get();
+        page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(0);
 
         // Check searchStats has been set. We won't check all the fields here.
@@ -261,12 +252,12 @@
     public void testLogger_searchStatsLogged_forNonEmptySecondPage() throws Exception {
         SimpleTestLogger logger = new SimpleTestLogger();
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession db2 = LocalStorage.createSearchSession(
+        AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
                         .setLogger(logger).build()).get();
 
         // Schema registration
-        db2.setSchema(
+        db2.setSchemaAsync(
                 new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
 
         // Index documents
@@ -284,10 +275,10 @@
                         .setSubject("testPut example")
                         .setBody("This is the body of the testPut email")
                         .build();
-        checkIsBatchResultSuccess(db2.put(
+        checkIsBatchResultSuccess(db2.putAsync(
                 new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
 
-        GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSession(
+        GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSessionAsync(
                 new LocalStorage.GlobalSearchContext.Builder(context).setLogger(
                         logger).build()).get();
         assertThat(logger.mSearchStats).isNull();
@@ -301,12 +292,12 @@
                 .build());
 
         // Get first page
-        List<SearchResult> page = searchResults.getNextPage().get();
+        List<SearchResult> page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(1);
 
         // Get second page
         logger.mSearchStats = null;
-        page = searchResults.getNextPage().get();
+        page = searchResults.getNextPageAsync().get();
         assertThat(page).hasSize(1);
 
         // Check searchStats has been set. We won't check all the fields here.
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionPlatformCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionPlatformCtsTest.java
index 9d152ff..46aa5c4 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionPlatformCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionPlatformCtsTest.java
@@ -16,14 +16,11 @@
 // @exportToFramework:skipFile()
 package androidx.appsearch.cts.app;
 
-import static com.google.common.truth.Truth.assertThat;
-
 import android.content.Context;
 import android.os.Build;
 
 import androidx.annotation.NonNull;
 import androidx.appsearch.app.AppSearchSession;
-import androidx.appsearch.app.Features;
 import androidx.appsearch.app.GlobalSearchSession;
 import androidx.appsearch.platformstorage.PlatformStorage;
 import androidx.test.core.app.ApplicationProvider;
@@ -31,33 +28,19 @@
 
 import com.google.common.util.concurrent.ListenableFuture;
 
-import org.junit.Ignore;
-import org.junit.Test;
-
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
 public class GlobalSearchSessionPlatformCtsTest extends GlobalSearchSessionCtsTestBase {
     @Override
-    protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+    protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
         Context context = ApplicationProvider.getApplicationContext();
-        return PlatformStorage.createSearchSession(
+        return PlatformStorage.createSearchSessionAsync(
                 new PlatformStorage.SearchContext.Builder(context, dbName).build());
     }
 
     @Override
-    protected ListenableFuture<GlobalSearchSession> createGlobalSearchSession() {
+    protected ListenableFuture<GlobalSearchSession> createGlobalSearchSessionAsync() {
         Context context = ApplicationProvider.getApplicationContext();
-        return PlatformStorage.createGlobalSearchSession(
+        return PlatformStorage.createGlobalSearchSessionAsync(
                 new PlatformStorage.GlobalSearchContext.Builder(context).build());
     }
-
-    @Ignore("Unignore this test once these features are implemented in the platform backend.")
-    @Test
-    public void testFeaturesSupported() {
-        assertThat(mDb1.getFeatures().isFeatureSupported(
-                Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH))
-                .isEqualTo(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S);
-        assertThat(mDb1.getFeatures().isFeatureSupported(
-                Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER))
-                .isEqualTo(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S);
-    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PropertyPathCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PropertyPathCtsTest.java
new file mode 100644
index 0000000..5f40eb1
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PropertyPathCtsTest.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2022 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.appsearch.cts.app;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.app.PropertyPath;
+
+import com.google.common.collect.ImmutableList;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.List;
+
+public class PropertyPathCtsTest {
+    @Test
+    public void testPropertyPathInvalid() {
+        // These paths are invalid because they are malformed. These throw an exception --- the
+        // querier shouldn't provide such paths.
+        Throwable e;
+        e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath(""));
+        assertThat(e.getMessage()).startsWith("Malformed path (blank property name)");
+
+        e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("]"));
+        assertThat(e.getMessage()).startsWith("Malformed path (no starting '[')");
+
+        e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a["));
+        assertThat(e.getMessage()).startsWith("Malformed path (no ending ']')");
+
+        e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[]"));
+        assertThat(e.getMessage()).startsWith("Malformed path (\"\" as path index)");
+
+        e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[b]"));
+        assertThat(e.getMessage()).startsWith("Malformed path (\"b\" as path index)");
+
+        e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[-1]"));
+        assertThat(e.getMessage()).startsWith("Malformed path (path index less than 0)");
+
+        e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[0.]"));
+        assertThat(e.getMessage()).startsWith("Malformed path (\"0.\" as path index)");
+
+        e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[0][0]"));
+        assertThat(e.getMessage()).startsWith("Malformed path (']' not followed by '.')");
+
+        e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[0]b"));
+        assertThat(e.getMessage()).startsWith("Malformed path (']' not followed by '.')");
+    }
+
+    @Test
+    public void testPropertyPathValid() {
+        PropertyPath path = new PropertyPath("foo.bar[1]");
+        assertThat(path.size()).isEqualTo(2);
+        assertThat(path.get(0).getPropertyName()).isEqualTo("foo");
+        assertThat(path.get(0).getPropertyIndex())
+                .isEqualTo(PropertyPath.PathSegment.NON_REPEATED_CARDINALITY);
+        assertThat(path.get(1).getPropertyName()).isEqualTo("bar");
+        assertThat(path.get(1).getPropertyIndex()).isEqualTo(1);
+
+        path = new PropertyPath("a.b.c.d.e.f.g.h.i.j");
+        assertThat(path.size()).isEqualTo(10);
+        assertThat(path.get(4).getPropertyName()).isEqualTo("e");
+        assertThat(path.get(9).getPropertyName()).isEqualTo("j");
+    }
+
+    @Test
+    public void testPathSegmentInvalid() {
+        Assert.assertThrows(NullPointerException.class,
+                () -> PropertyPath.PathSegment.create(null));
+
+        Throwable e;
+        e = Assert.assertThrows(IllegalArgumentException.class,
+                () -> PropertyPath.PathSegment.create(""));
+        assertThat(e.getMessage()).startsWith("Invalid propertyName value");
+        e = Assert.assertThrows(IllegalArgumentException.class,
+                () -> PropertyPath.PathSegment.create("["));
+        assertThat(e.getMessage()).startsWith("Invalid propertyName value");
+        e = Assert.assertThrows(IllegalArgumentException.class,
+                () -> PropertyPath.PathSegment.create("."));
+        assertThat(e.getMessage()).startsWith("Invalid propertyName value");
+        e = Assert.assertThrows(IllegalArgumentException.class,
+                () -> PropertyPath.PathSegment.create("]"));
+        assertThat(e.getMessage()).startsWith("Invalid propertyName value");
+        e = Assert.assertThrows(IllegalArgumentException.class,
+                () -> PropertyPath.PathSegment.create("foo", -2));
+        assertThat(e.getMessage()).startsWith("Invalid propertyIndex value");
+    }
+
+    @Test
+    public void testPathSegmentValid() {
+        PropertyPath.PathSegment segment = PropertyPath.PathSegment.create("foo", 2);
+        assertThat(segment.toString()).isEqualTo("foo[2]");
+        segment = PropertyPath.PathSegment.create("foo");
+        assertThat(segment.toString()).isEqualTo("foo");
+        assertThat(segment).isEqualTo(PropertyPath.PathSegment.create("foo"));
+    }
+
+    @Test
+    public void testBuildPropertyPathFromSegmentList() {
+        List<PropertyPath.PathSegment> list = ImmutableList.of(
+                PropertyPath.PathSegment.create("foo", 1),
+                PropertyPath.PathSegment.create("bar", 2),
+                PropertyPath.PathSegment.create("name"));
+        PropertyPath path = new PropertyPath(list);
+        assertThat(path.toString()).isEqualTo("foo[1].bar[2].name");
+        assertThat(path).isEqualTo(new PropertyPath("foo[1].bar[2].name"));
+    }
+
+    @Test
+    public void testPropertyPathEquality() {
+        PropertyPath.PathSegment segment = PropertyPath.PathSegment.create("bar");
+        PropertyPath path = new PropertyPath("foo[1].bar");
+        assertThat(path.get(1)).isEqualTo(segment);
+    }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PutDocumentsRequestCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PutDocumentsRequestCtsTest.java
index 372a090..c2b06d4 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PutDocumentsRequestCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PutDocumentsRequestCtsTest.java
@@ -74,12 +74,12 @@
         // A schema with Card must be set in order to be able to add a Card instance to
         // PutDocumentsRequest.
         Context context = ApplicationProvider.getApplicationContext();
-        AppSearchSession session = LocalStorage.createSearchSession(
+        AppSearchSession session = LocalStorage.createSearchSessionAsync(
                 new LocalStorage.SearchContext.Builder(context, /*databaseName=*/ "")
                         .build()
         ).get();
-        session.setSchema(new SetSchemaRequest.Builder().addDocumentClasses(Card.class).build())
-            .get();
+        session.setSchemaAsync(
+                new SetSchemaRequest.Builder().addDocumentClasses(Card.class).build()).get();
 
         Set<Card> cards = ImmutableSet.of(new Card("cardNamespace", "cardId", "cardProperty"));
         PutDocumentsRequest request = new PutDocumentsRequest.Builder().addDocuments(cards)
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SearchResultCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SearchResultCtsTest.java
index 575a37b..cceae16 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SearchResultCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SearchResultCtsTest.java
@@ -20,6 +20,7 @@
 
 import static org.junit.Assert.assertThrows;
 
+import androidx.appsearch.app.PropertyPath;
 import androidx.appsearch.app.SearchResult;
 import androidx.appsearch.testutil.AppSearchEmail;
 
@@ -54,6 +55,7 @@
         assertThat(searchResult.getMatchInfos()).hasSize(1);
         SearchResult.MatchInfo actualMatchInfo = searchResult.getMatchInfos().get(0);
         assertThat(actualMatchInfo.getPropertyPath()).isEqualTo("body");
+        assertThat(actualMatchInfo.getPropertyPathObject()).isEqualTo(new PropertyPath("body"));
         assertThat(actualMatchInfo.getExactMatchRange()).isEqualTo(exactMatchRange);
         assertThat(actualMatchInfo.getSubmatchRange()).isEqualTo(submatchRange);
         assertThat(actualMatchInfo.getSnippetRange()).isEqualTo(snippetMatchRange);
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java
index a965ef6..dd47914 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java
@@ -220,6 +220,87 @@
     }
 
     @Test
+    public void testSetSchemaTypeVisibleForPermissions() {
+        AppSearchSchema schema = new AppSearchSchema.Builder("Schema").build();
+
+        // By default, the schema is displayed.
+        SetSchemaRequest request =
+                new SetSchemaRequest.Builder().addSchemas(schema).build();
+        assertThat(request.getRequiredPermissionsForSchemaTypeVisibility()).isEmpty();
+
+        SetSchemaRequest.Builder setSchemaRequestBuilder = new SetSchemaRequest.Builder()
+                .addSchemas(schema)
+                .addRequiredPermissionsForSchemaTypeVisibility("Schema",
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+                .addRequiredPermissionsForSchemaTypeVisibility("Schema",
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA));
+
+        request = setSchemaRequestBuilder.build();
+
+        assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+                .containsExactly("Schema", ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS,
+                                SetSchemaRequest.READ_CALENDAR),
+                        ImmutableSet.of(SetSchemaRequest
+                                .READ_HOME_APP_SEARCH_DATA)));
+    }
+
+    @Test
+    public void testClearSchemaTypeVisibleForPermissions() {
+        SetSchemaRequest.Builder setSchemaRequestBuilder = new SetSchemaRequest.Builder()
+                .addSchemas(
+                        new AppSearchSchema.Builder("Schema1").build(),
+                        new AppSearchSchema.Builder("Schema2").build())
+                .addRequiredPermissionsForSchemaTypeVisibility(
+                        "Schema1",
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+                .addRequiredPermissionsForSchemaTypeVisibility(
+                        "Schema1",
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA))
+                .addRequiredPermissionsForSchemaTypeVisibility(
+                        "Schema2",
+                        ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE));
+
+        SetSchemaRequest request = setSchemaRequestBuilder.build();
+
+        assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+                .containsExactly(
+                        "Schema1", ImmutableSet.of(
+                                ImmutableSet.of(
+                                        SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+                                ImmutableSet.of(
+                                        SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+                        "Schema2", ImmutableSet.of(
+                                ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+                        )
+            );
+
+        // Clear the permissions in the builder
+        setSchemaRequestBuilder.clearRequiredPermissionsForSchemaTypeVisibility("Schema1");
+
+        // New object should be updated
+        assertThat(setSchemaRequestBuilder.build().getRequiredPermissionsForSchemaTypeVisibility())
+                .containsExactly(
+                        "Schema2", ImmutableSet.of(
+                                ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+                        )
+            );
+
+        // Old object should remain unchanged
+        assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+                .containsExactly(
+                        "Schema1", ImmutableSet.of(
+                                ImmutableSet.of(
+                                        SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+                                ImmutableSet.of(
+                                        SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+                        "Schema2", ImmutableSet.of(
+                                ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+                        )
+            );
+    }
+
+    @Test
     public void testSchemaTypeVisibilityForPackage_visible() {
         AppSearchSchema schema = new AppSearchSchema.Builder("Schema").build();
 
@@ -380,6 +461,29 @@
     }
 
     @Test
+    public void testSetDocumentClassVisibleForPermission() throws Exception {
+        // By default, the schema is displayed.
+        SetSchemaRequest request =
+                new SetSchemaRequest.Builder().addDocumentClasses(Card.class).build();
+        assertThat(request.getRequiredPermissionsForSchemaTypeVisibility()).isEmpty();
+
+        SetSchemaRequest.Builder setSchemaRequestBuilder = new SetSchemaRequest.Builder()
+                .addDocumentClasses(Card.class)
+                .addRequiredPermissionsForDocumentClassVisibility(Card.class,
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+                .addRequiredPermissionsForDocumentClassVisibility(Card.class,
+                ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA));
+        request = setSchemaRequestBuilder.build();
+
+        assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+                .containsExactly("Card", ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS,
+                                SetSchemaRequest.READ_CALENDAR),
+                        ImmutableSet.of(SetSchemaRequest
+                                .READ_HOME_APP_SEARCH_DATA)));
+    }
+
+    @Test
     public void testSetDocumentClassVisibilityForPackage_visible() throws Exception {
         // By default, the schema is not visible.
         SetSchemaRequest request =
@@ -478,6 +582,58 @@
                 "King");
     }
 
+    @Test
+    public void testClearDocumentClassVisibleForPermissions() throws Exception {
+        SetSchemaRequest.Builder setSchemaRequestBuilder = new SetSchemaRequest.Builder()
+                .addDocumentClasses(King.class, Queen.class)
+                .addRequiredPermissionsForDocumentClassVisibility(
+                        King.class,
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+                .addRequiredPermissionsForDocumentClassVisibility(
+                        King.class,
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA))
+                .addRequiredPermissionsForDocumentClassVisibility(
+                        Queen.class,
+                        ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE));
+
+        SetSchemaRequest request = setSchemaRequestBuilder.build();
+
+        assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+                .containsExactly(
+                        "King", ImmutableSet.of(
+                                ImmutableSet.of(
+                                        SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+                                ImmutableSet.of(
+                                        SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+                        "Queen", ImmutableSet.of(
+                                ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+                        )
+            );
+
+        // Clear the permissions in the builder
+        setSchemaRequestBuilder.clearRequiredPermissionsForDocumentClassVisibility(King.class);
+
+        // New object should be updated
+        assertThat(setSchemaRequestBuilder.build().getRequiredPermissionsForSchemaTypeVisibility())
+                .containsExactly(
+                        "Queen", ImmutableSet.of(
+                                ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+                        )
+            );
+
+        // Old object should remain unchanged
+        assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+                .containsExactly(
+                        "King", ImmutableSet.of(
+                                ImmutableSet.of(
+                                        SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+                                ImmutableSet.of(
+                                        SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+                        "Queen", ImmutableSet.of(
+                                ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+                        )
+            );
+    }
 // @exportToFramework:endStrip()
 
     @Test
@@ -498,4 +654,130 @@
         assertThat(exception).hasMessageThat().contains(
                 "Cannot set version to the request if schema is empty.");
     }
+
+    @Test
+    public void testRebuild() {
+        byte[] sha256cert1 = new byte[32];
+        byte[] sha256cert2 = new byte[32];
+        Arrays.fill(sha256cert1, (byte) 1);
+        Arrays.fill(sha256cert2, (byte) 2);
+        PackageIdentifier packageIdentifier1 = new PackageIdentifier("Email", sha256cert1);
+        PackageIdentifier packageIdentifier2 = new PackageIdentifier("Email", sha256cert2);
+        AppSearchSchema schema1 = new AppSearchSchema.Builder("Email1")
+                .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("subject")
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setIndexingType(
+                                AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                        .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                        .build()
+                ).build();
+        AppSearchSchema schema2 = new AppSearchSchema.Builder("Email2")
+                .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("subject")
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setIndexingType(
+                                AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                        .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                        .build()
+                ).build();
+
+        SetSchemaRequest.Builder builder = new SetSchemaRequest.Builder()
+                .addSchemas(schema1)
+                .setVersion(37)
+                .setSchemaTypeDisplayedBySystem("Email1", /*displayed=*/false)
+                .setSchemaTypeVisibilityForPackage(
+                        "Email1", /*visible=*/true, packageIdentifier1)
+                .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS,
+                                SetSchemaRequest.READ_CALENDAR))
+                .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA));
+
+        SetSchemaRequest original = builder.build();
+        SetSchemaRequest rebuild = builder.addSchemas(schema2)
+                .setVersion(42)
+                .setSchemaTypeDisplayedBySystem("Email2", /*displayed=*/false)
+                .setSchemaTypeVisibilityForPackage(
+                        "Email2", /*visible=*/true, packageIdentifier2)
+                .addRequiredPermissionsForSchemaTypeVisibility("Email2",
+                        ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+                                SetSchemaRequest.READ_EXTERNAL_STORAGE))
+                .addRequiredPermissionsForSchemaTypeVisibility("Email2",
+                        ImmutableSet.of(SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA))
+                .build();
+
+        assertThat(original.getSchemas()).containsExactly(schema1);
+        assertThat(original.getVersion()).isEqualTo(37);
+        assertThat(original.getSchemasNotDisplayedBySystem()).containsExactly("Email1");
+        assertThat(original.getSchemasVisibleToPackages()).containsExactly(
+                "Email1", ImmutableSet.of(packageIdentifier1));
+        assertThat(original.getRequiredPermissionsForSchemaTypeVisibility()).containsExactly(
+                "Email1",
+                ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS,
+                                SetSchemaRequest.READ_CALENDAR),
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)));
+
+        assertThat(rebuild.getSchemas()).containsExactly(schema1, schema2);
+        assertThat(rebuild.getVersion()).isEqualTo(42);
+        assertThat(rebuild.getSchemasNotDisplayedBySystem()).containsExactly("Email1", "Email2");
+        assertThat(rebuild.getSchemasVisibleToPackages()).containsExactly(
+                "Email1", ImmutableSet.of(packageIdentifier1),
+                "Email2", ImmutableSet.of(packageIdentifier2));
+        assertThat(rebuild.getRequiredPermissionsForSchemaTypeVisibility()).containsExactly(
+                "Email1",
+                ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS,
+                                SetSchemaRequest.READ_CALENDAR),
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+                "Email2",
+                ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+                                SetSchemaRequest.READ_EXTERNAL_STORAGE),
+                        ImmutableSet.of(SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA)));
+    }
+
+    @Test
+    public void getAndModify() {
+        byte[] sha256cert1 = new byte[32];
+        byte[] sha256cert2 = new byte[32];
+        Arrays.fill(sha256cert1, (byte) 1);
+        Arrays.fill(sha256cert2, (byte) 2);
+        PackageIdentifier packageIdentifier1 = new PackageIdentifier("Email", sha256cert1);
+        PackageIdentifier packageIdentifier2 = new PackageIdentifier("Email", sha256cert2);
+        AppSearchSchema schema1 = new AppSearchSchema.Builder("Email1")
+                .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("subject")
+                        .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setIndexingType(
+                                AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                        .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                        .build()
+                ).build();
+
+        SetSchemaRequest request = new SetSchemaRequest.Builder()
+                .addSchemas(schema1)
+                .setVersion(37)
+                .setSchemaTypeDisplayedBySystem("Email1", /*displayed=*/false)
+                .setSchemaTypeVisibilityForPackage(
+                        "Email1", /*visible=*/true, packageIdentifier1)
+                .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+                .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA))
+                .build();
+
+        // get the visibility setting and modify the output object.
+        // skip getSchemasNotDisplayedBySystem since it returns an unmodifiable object.
+        request.getSchemasVisibleToPackages().put("Email2", ImmutableSet.of(packageIdentifier2));
+        request.getRequiredPermissionsForSchemaTypeVisibility().put("Email2",
+                ImmutableSet.of(ImmutableSet.of(SetSchemaRequest.READ_CALENDAR)));
+
+        // verify we still get the original object.
+        assertThat(request.getSchemasVisibleToPackages()).containsExactly("Email1",
+                ImmutableSet.of(packageIdentifier1));
+        assertThat(request.getRequiredPermissionsForSchemaTypeVisibility()).containsExactly(
+                "Email1",
+                ImmutableSet.of(
+                        ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+                        ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)));
+    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/DocumentChangeInfoCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/DocumentChangeInfoCtsTest.java
new file mode 100644
index 0000000..06f1bd4
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/DocumentChangeInfoCtsTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2022 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.appsearch.cts.observer;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.observer.DocumentChangeInfo;
+
+import com.google.common.collect.ImmutableSet;
+
+import org.junit.Test;
+
+public class DocumentChangeInfoCtsTest {
+    @Test
+    public void testConstructor() {
+        DocumentChangeInfo DocumentChangeInfo = new DocumentChangeInfo(
+                "packageName",
+                "databaseName",
+                "namespace",
+                "SchemaName",
+                ImmutableSet.of("documentId1", "documentId2"));
+        assertThat(DocumentChangeInfo.getPackageName()).isEqualTo("packageName");
+        assertThat(DocumentChangeInfo.getDatabaseName()).isEqualTo("databaseName");
+        assertThat(DocumentChangeInfo.getNamespace()).isEqualTo("namespace");
+        assertThat(DocumentChangeInfo.getSchemaName()).isEqualTo("SchemaName");
+        assertThat(DocumentChangeInfo.getChangedDocumentIds())
+                .containsExactly("documentId1", "documentId2");
+    }
+
+    @Test
+    public void testEqualsAndHasCode() {
+        DocumentChangeInfo info1Copy1 = new DocumentChangeInfo(
+                "packageName",
+                "databaseName",
+                "namespace",
+                "SchemaName",
+                ImmutableSet.of("documentId1", "documentId2"));
+        DocumentChangeInfo info1Copy2 = new DocumentChangeInfo(
+                "packageName",
+                "databaseName",
+                "namespace",
+                "SchemaName",
+                ImmutableSet.of("documentId1", "documentId2"));
+        DocumentChangeInfo info2 = new DocumentChangeInfo(
+                "packageName",
+                "databaseName",
+                "namespace",
+                "SchemaName",
+                ImmutableSet.of("documentId3", "documentId2"));
+
+        assertThat(info1Copy1).isEqualTo(info1Copy2);
+        assertThat(info1Copy1.hashCode()).isEqualTo(info1Copy2.hashCode());
+        assertThat(info1Copy1).isNotEqualTo(info2);
+        assertThat(info1Copy1.hashCode()).isNotEqualTo(info2.hashCode());
+    }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/ObserverSpecCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/ObserverSpecCtsTest.java
new file mode 100644
index 0000000..ae321af
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/ObserverSpecCtsTest.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2022 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.appsearch.cts.observer;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.annotation.Document;
+import androidx.appsearch.observer.ObserverSpec;
+
+import com.google.common.collect.ImmutableSet;
+
+import org.junit.Test;
+
+public class ObserverSpecCtsTest {
+    @Test
+    public void testFilterSchemas() {
+        ObserverSpec observerSpec = new ObserverSpec.Builder()
+                .addFilterSchemas("Schema1", "Schema2")
+                .addFilterSchemas(ImmutableSet.of("Schema3", "Schema4"))
+                .build();
+        assertThat(observerSpec.getFilterSchemas()).containsExactly(
+                "Schema1", "Schema2", "Schema3", "Schema4");
+    }
+
+// @exportToFramework:startStrip()
+
+    @Document
+    public static class King {
+        @Document.Namespace String mNamespace;
+        @Document.Id String mId;
+    }
+
+    @Document
+    public static class Queen {
+        @Document.Namespace String mNamespace;
+        @Document.Id String mId;
+    }
+
+    @Document
+    public static class Jack {
+        @Document.Namespace String mNamespace;
+        @Document.Id String mId;
+    }
+
+    @Document
+    public static class Ace {
+        @Document.Namespace String mNamespace;
+        @Document.Id String mId;
+    }
+
+    @Test
+    public void testFilterSchemas_documentClass() throws Exception {
+        ObserverSpec observerSpec = new ObserverSpec.Builder()
+                .addFilterSchemas("Schema1", "Schema2")
+                .addFilterDocumentClasses(King.class, Queen.class)
+                .addFilterSchemas(ImmutableSet.of("Schema3", "Schema4"))
+                .addFilterDocumentClasses(ImmutableSet.of(Jack.class, Ace.class))
+                .build();
+        assertThat(observerSpec.getFilterSchemas()).containsExactly(
+                "Schema1", "Schema2", "King", "Queen", "Schema3", "Schema4", "Jack", "Ace");
+    }
+
+// @exportToFramework:endStrip()
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/SchemaChangeInfoCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/SchemaChangeInfoCtsTest.java
new file mode 100644
index 0000000..3289177
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/SchemaChangeInfoCtsTest.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2022 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.appsearch.cts.observer;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.observer.SchemaChangeInfo;
+
+import com.google.common.collect.ImmutableSet;
+
+import org.junit.Test;
+
+public class SchemaChangeInfoCtsTest {
+    @Test
+    public void testConstructor() {
+        SchemaChangeInfo schemaChangeInfo = new SchemaChangeInfo(
+                "packageName", "databaseName", ImmutableSet.of("schemaName1", "schemaName2"));
+        assertThat(schemaChangeInfo.getPackageName()).isEqualTo("packageName");
+        assertThat(schemaChangeInfo.getDatabaseName()).isEqualTo("databaseName");
+        assertThat(schemaChangeInfo.getChangedSchemaNames())
+                .containsExactly("schemaName1", "schemaName2");
+    }
+
+    @Test
+    public void testEqualsAndHasCode() {
+        SchemaChangeInfo info1Copy1 = new SchemaChangeInfo(
+                "packageName", "databaseName", ImmutableSet.of("schemaName1", "schemaName2"));
+        SchemaChangeInfo info1Copy2 = new SchemaChangeInfo(
+                "packageName", "databaseName", ImmutableSet.of("schemaName1", "schemaName2"));
+        SchemaChangeInfo info2 = new SchemaChangeInfo(
+                "packageName", "databaseName", ImmutableSet.of("schemaName3", "schemaName2"));
+
+        assertThat(info1Copy1).isEqualTo(info1Copy2);
+        assertThat(info1Copy1.hashCode()).isEqualTo(info1Copy2.hashCode());
+        assertThat(info1Copy1).isNotEqualTo(info2);
+        assertThat(info1Copy1.hashCode()).isNotEqualTo(info2.hashCode());
+    }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java b/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
index 527127f..ef685c1 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
@@ -220,7 +220,7 @@
          * <p>This attribute does not apply to properties of a repeated type (e.g. a list).
          *
          * <p>Please make sure you understand the consequences of required fields on
-         * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+         * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
          * this attribute to {@code true}.
          */
         boolean required() default false;
@@ -256,7 +256,7 @@
          * <p>This attribute does not apply to properties of a repeated type (e.g. a list).
          *
          * <p>Please make sure you understand the consequences of required fields on
-         * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+         * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
          * this attribute to {@code true}.
          */
         boolean required() default false;
@@ -280,7 +280,7 @@
          * <p>This attribute does not apply to properties of a repeated type (e.g. a list).
          *
          * <p>Please make sure you understand the consequences of required fields on
-         * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+         * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
          * this attribute to {@code true}.
          */
         boolean required() default false;
@@ -307,7 +307,7 @@
          * <p>This attribute does not apply to properties of a repeated type (e.g. a list).
          *
          * <p>Please make sure you understand the consequences of required fields on
-         * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+         * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
          * this attribute to {@code true}.
          */
         boolean required() default false;
@@ -331,7 +331,7 @@
          * <p>This attribute does not apply to properties of a repeated type (e.g. a list).
          *
          * <p>Please make sure you understand the consequences of required fields on
-         * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+         * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
          * this attribute to {@code true}.
          */
         boolean required() default false;
@@ -355,7 +355,7 @@
          * <p>This attribute does not apply to properties of a repeated type (e.g. a list).
          *
          * <p>Please make sure you understand the consequences of required fields on
-         * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+         * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
          * this attribute to {@code true}.
          */
         boolean required() default false;
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchBatchResult.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchBatchResult.java
index 4b6ee7c..3cdf6ce 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchBatchResult.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchBatchResult.java
@@ -37,9 +37,9 @@
  * @param <KeyType> The type of the keys for which the results will be reported.
  * @param <ValueType> The type of the result objects for successful results.
  *
- * @see AppSearchSession#put
- * @see AppSearchSession#getByDocumentId
- * @see AppSearchSession#remove
+ * @see AppSearchSession#putAsync
+ * @see AppSearchSession#getByDocumentIdAsync
+ * @see AppSearchSession#removeAsync
  */
 public final class AppSearchBatchResult<KeyType, ValueType> {
     @NonNull private final Map<KeyType, ValueType> mSuccesses;
@@ -64,9 +64,9 @@
      * Returns a {@link Map} of keys mapped to instances of the value type for all successful
      * individual results.
      *
-     * <p>Example: {@link AppSearchSession#getByDocumentId} returns an {@link AppSearchBatchResult}.
-     * Each key (the document ID, of {@code String} type) will map to a {@link GenericDocument}
-     * object.
+     * <p>Example: {@link AppSearchSession#getByDocumentIdAsync} returns an
+     * {@link AppSearchBatchResult}. Each key (the document ID, of {@code String} type) will map to
+     * a {@link GenericDocument} object.
      *
      * <p>The values of the {@link Map} will not be {@code null}.
      */
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java
index b204447..31b0a88 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java
@@ -22,6 +22,7 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.util.LogUtil;
 import androidx.core.util.ObjectsCompat;
 import androidx.core.util.Preconditions;
 
@@ -219,12 +220,15 @@
     public static <ValueType> AppSearchResult<ValueType> throwableToFailedResult(
             @NonNull Throwable t) {
         // Log for traceability. NOT_FOUND is logged at VERBOSE because this error can occur during
-        // the regular operation of the system (b/183550974). Everything else is logged at DEBUG.
+        // the regular operation of the system (b/183550974). Everything else is indicative of an
+        // actual problem and is logged at WARN.
         if (t instanceof AppSearchException
                 && ((AppSearchException) t).getResultCode() == RESULT_NOT_FOUND) {
-            Log.v(TAG, "Converting throwable to failed result: " + t);
+            if (LogUtil.DEBUG) {
+                Log.v(TAG, "Converting throwable to failed result: " + t);
+            }
         } else {
-            Log.d(TAG, "Converting throwable to failed result.", t);
+            Log.w(TAG, "Converting throwable to failed result.", t);
         }
 
         if (t instanceof AppSearchException) {
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java
index 84795f9..1a19c65 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java
@@ -44,7 +44,7 @@
  *
  * <p>The schema consists of type information, properties, and config (like tokenization type).
  *
- * @see AppSearchSession#setSchema
+ * @see AppSearchSession#setSchemaAsync
  */
 public final class AppSearchSchema {
     private static final String SCHEMA_TYPE_FIELD = "schemaType";
@@ -127,7 +127,7 @@
     public List<PropertyConfig> getProperties() {
         ArrayList<Bundle> propertyBundles =
                 mBundle.getParcelableArrayList(AppSearchSchema.PROPERTIES_FIELD);
-        if (propertyBundles.isEmpty()) {
+        if (propertyBundles == null || propertyBundles.isEmpty()) {
             return Collections.emptyList();
         }
         List<PropertyConfig> ret = new ArrayList<>(propertyBundles.size());
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSession.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSession.java
index d423da0..a8d9713 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSession.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSession.java
@@ -19,10 +19,12 @@
 import android.annotation.SuppressLint;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
 import java.io.Closeable;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -32,7 +34,8 @@
  * a schema, adding documents, and searching.
  *
  * <p>Instances of this interface are usually obtained from a storage implementation, e.g.
- * {@code LocalStorage.createSearchSession()} or {@code PlatformStorage.createSearchSession()}.
+ * {@code LocalStorage.createSearchSessionAsync()} or
+ * {@code PlatformStorage.createSearchSessionAsync()}.
  *
  * <p>All implementations of this interface must be thread safe.
  *
@@ -44,42 +47,75 @@
      * Sets the schema that represents the organizational structure of data within the AppSearch
      * database.
      *
-     * <p>Upon creating an {@link AppSearchSession}, {@link #setSchema} should be called. If the
-     * schema needs to be updated, or it has not been previously set, then the provided schema
-     * will be saved and persisted to disk. Otherwise, {@link #setSchema} is handled efficiently
-     * as a no-op call.
+     * <p>Upon creating an {@link AppSearchSession}, {@link #setSchemaAsync} should be called. If
+     * the schema needs to be updated, or it has not been previously set, then the provided schema
+     * will be saved and persisted to disk. Otherwise, {@link #setSchemaAsync} is handled
+     * efficiently as a no-op call.
      *
      * @param  request the schema to set or update the AppSearch database to.
      * @return a {@link ListenableFuture} which resolves to a {@link SetSchemaResponse} object.
      */
     @NonNull
-    ListenableFuture<SetSchemaResponse> setSchema(
-            @NonNull SetSchemaRequest request);
+    ListenableFuture<SetSchemaResponse> setSchemaAsync(@NonNull SetSchemaRequest request);
 
     /**
-     * Retrieves the schema most recently successfully provided to {@link #setSchema}.
+     * @deprecated use {@link #setSchemaAsync}
+     * @param  request the schema to set or update the AppSearch database to.
+     * @return a {@link ListenableFuture} which resolves to a {@link SetSchemaResponse} object.
+     */
+    @NonNull
+    @Deprecated
+    default ListenableFuture<SetSchemaResponse> setSchema(
+            @NonNull SetSchemaRequest request) {
+        return setSchemaAsync(request);
+    }
+
+    /**
+     * Retrieves the schema most recently successfully provided to {@link #setSchemaAsync}.
      *
      * @return The pending {@link GetSchemaResponse} of performing this operation.
      */
     // This call hits disk; async API prevents us from treating these calls as properties.
     @SuppressLint("KotlinPropertyAccess")
     @NonNull
-    ListenableFuture<GetSchemaResponse> getSchema();
+    ListenableFuture<GetSchemaResponse> getSchemaAsync();
+
+    /**
+     * @deprecated use {@link #getSchemaAsync}
+     *
+     * @return The pending {@link GetSchemaResponse} of performing this operation.
+     */
+    // This call hits disk; async API prevents us from treating these calls as properties.
+    @SuppressLint("KotlinPropertyAccess")
+    @NonNull
+    @Deprecated
+    default ListenableFuture<GetSchemaResponse> getSchema() {
+        return getSchemaAsync();
+    }
 
     /**
      * Retrieves the set of all namespaces in the current database with at least one document.
      *
-     * @return The pending result of performing this operation.
-     */
+     * @return The pending result of performing this operation. */
     @NonNull
-    ListenableFuture<Set<String>> getNamespaces();
+    ListenableFuture<Set<String>> getNamespacesAsync();
+
+    /**
+     * @deprecated use {@link #getNamespacesAsync()}
+     *
+     * @return The pending result of performing this operation. */
+    @NonNull
+    @Deprecated
+    default ListenableFuture<Set<String>> getNamespaces() {
+        return getNamespacesAsync();
+    }
 
     /**
      * Indexes documents into the {@link AppSearchSession} database.
      *
      * <p>Each {@link GenericDocument} object must have a {@code schemaType} field set to an
      * {@link AppSearchSchema} type that has been previously registered by calling the
-     * {@link #setSchema} method.
+     * {@link #setSchemaAsync} method.
      *
      * @param request containing documents to be indexed.
      * @return a {@link ListenableFuture} which resolves to an {@link AppSearchBatchResult}.
@@ -88,7 +124,24 @@
      * or a failed {@link AppSearchResult} otherwise.
      */
     @NonNull
-    ListenableFuture<AppSearchBatchResult<String, Void>> put(@NonNull PutDocumentsRequest request);
+    ListenableFuture<AppSearchBatchResult<String, Void>> putAsync(
+            @NonNull PutDocumentsRequest request);
+
+    /**
+     * @deprecated use {@link #putAsync}
+     *
+     * @param request containing documents to be indexed.
+     * @return a {@link ListenableFuture} which resolves to an {@link AppSearchBatchResult}.
+     * The keys of the returned {@link AppSearchBatchResult} are the IDs of the input documents.
+     * The values are either {@code null} if the corresponding document was successfully indexed,
+     * or a failed {@link AppSearchResult} otherwise.
+     */
+    @NonNull
+    @Deprecated
+    default ListenableFuture<AppSearchBatchResult<String, Void>> put(
+            @NonNull PutDocumentsRequest request) {
+        return putAsync(request);
+    }
 
     /**
      * Gets {@link GenericDocument} objects by document IDs in a namespace from the
@@ -104,10 +157,29 @@
      * {@link AppSearchResult#RESULT_NOT_FOUND}.
      */
     @NonNull
-    ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentId(
+    ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
             @NonNull GetByDocumentIdRequest request);
 
     /**
+     * @deprecated use {@link #getByDocumentIdAsync}
+     *
+     * @param request a request containing a namespace and IDs to get documents for.
+     * @return A {@link ListenableFuture} which resolves to an {@link AppSearchBatchResult}.
+     * The keys of the {@link AppSearchBatchResult} represent the input document IDs from the
+     * {@link GetByDocumentIdRequest} object. The values are either the corresponding
+     * {@link GenericDocument} object for the ID on success, or an {@link AppSearchResult}
+     * object on failure. For example, if an ID is not found, the value for that ID will be set
+     * to an {@link AppSearchResult} object with result code:
+     * {@link AppSearchResult#RESULT_NOT_FOUND}.
+     */
+    @NonNull
+    @Deprecated
+    default ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentId(
+            @NonNull GetByDocumentIdRequest request) {
+        return getByDocumentIdAsync(request);
+    }
+
+    /**
      * Retrieves documents from the open {@link AppSearchSession} that match a given query string
      * and type of search provided.
      *
@@ -164,7 +236,7 @@
      * adding projection, can be set by calling the corresponding {@link SearchSpec.Builder} setter.
      *
      * <p>This method is lightweight. The heavy work will be done in
-     * {@link SearchResults#getNextPage}.
+     * {@link SearchResults#getNextPageAsync}.
      *
      * @param queryExpression query string to search.
      * @param searchSpec      spec for setting document filters, adding projection, setting term
@@ -175,13 +247,87 @@
     SearchResults search(@NonNull String queryExpression, @NonNull SearchSpec searchSpec);
 
     /**
+     * Retrieves suggested Strings that could be used as {@code queryExpression} in
+     * {@link #search(String, SearchSpec)} API.
+     *
+     * <p>The {@code suggestionQueryExpression} can contain one term with no operators, or contain
+     * multiple terms and operators. Operators will be considered as a normal term. Please see the
+     * operator examples below. The {@code suggestionQueryExpression} must end with a valid term,
+     * the suggestions are generated based on the last term. If the input
+     * {@code suggestionQueryExpression} doesn't have a valid token, AppSearch will return an
+     * empty result list. Please see the invalid examples below.
+     *
+     * <p>Example: if there are following documents with content stored in AppSearch.
+     * <ul>
+     *     <li>document1: "term1"
+     *     <li>document2: "term1 term2"
+     *     <li>document3: "term1 term2 term3"
+     *     <li>document4: "org"
+     * </ul>
+     *
+     * <p>Search suggestions with the single term {@code suggestionQueryExpression} "t", the
+     * suggested results are:
+     * <ul>
+     *     <li>"term1" - Use it to be queryExpression in {@link #search} could get 3
+     *     {@link SearchResult}s, which contains document 1, 2 and 3.
+     *     <li>"term2" - Use it to be queryExpression in {@link #search} could get 2
+     *     {@link SearchResult}s, which contains document 2 and 3.
+     *     <li>"term3" - Use it to be queryExpression in {@link #search} could get 1
+     *     {@link SearchResult}, which contains document 3.
+     * </ul>
+     *
+     * <p>Search suggestions with the multiple term {@code suggestionQueryExpression} "org t", the
+     * suggested result will be "org term1" - The last token is completed by the suggested
+     * String, even if it won't return any result.
+     *
+     * <p>Search suggestions with operators. All operators will be considered as a normal term.
+     * <ul>
+     *     <li>Search suggestions with the {@code suggestionQueryExpression} "term1 OR", the
+     *     suggested result is "term1 org".
+     *     <li>Search suggestions with the {@code suggestionQueryExpression} "term3 OR t", the
+     *     suggested result is "term3 OR term1".
+     *     <li>Search suggestions with the {@code suggestionQueryExpression} "content:t", the
+     *     suggested result is empty. It cannot find a document that contains the term "content:t".
+     * </ul>
+     *
+     * <p>Invalid example: All these input {@code suggestionQueryExpression} don't have a valid
+     * last token, AppSearch will return an empty result list.
+     * <ul>
+     *     <li>""      - Empty {@code suggestionQueryExpression}.
+     *     <li>"(f)"   - Ending in a closed brackets.
+     *     <li>"f:"    - Ending in an operator.
+     *     <li>"f    " - Ending in trailing space.
+     * </ul>
+     *
+     * @param suggestionQueryExpression the non empty query string to search suggestions
+     * @param searchSuggestionSpec      spec for setting document filters
+     * @return The pending result of performing this operation which resolves to a List of
+     *         {@link SearchSuggestionResult} on success. The returned suggestion Strings are
+     *         ordered by the number of {@link SearchResult} you could get by using that suggestion
+     *         in {@link #search}.
+     *
+     * @see #search(String, SearchSpec)
+     * @hide
+     */
+    //TODO(b/227356108) un-hide this API after fix following issues.
+    // 1: support property restrict tokenization, Example: [subject:car] will return ["cart",
+    // "carburetor"] if AppSearch has documents contain those terms.
+    // 2: support multiple terms, Example: [bar f] will return suggestions [bar foo] that could
+    // be used to retrieve documents that contain both terms "bar" and "foo".
+    @NonNull
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    ListenableFuture<List<SearchSuggestionResult>> searchSuggestionAsync(
+            @NonNull String suggestionQueryExpression,
+            @NonNull SearchSuggestionSpec searchSuggestionSpec);
+
+    /**
      * Reports usage of a particular document by namespace and ID.
      *
      * <p>A usage report represents an event in which a user interacted with or viewed a document.
      *
-     * <p>For each call to {@link #reportUsage}, AppSearch updates usage count and usage recency
-     * metrics for that particular document. These metrics are used for ordering {@link #search}
-     * results by the {@link SearchSpec#RANKING_STRATEGY_USAGE_COUNT} and
+     * <p>For each call to {@link #reportUsageAsync}, AppSearch updates usage count and usage
+     * recency * metrics for that particular document. These metrics are used for ordering
+     * {@link #search} results by the {@link SearchSpec#RANKING_STRATEGY_USAGE_COUNT} and
      * {@link SearchSpec#RANKING_STRATEGY_USAGE_LAST_USED_TIMESTAMP} ranking strategies.
      *
      * <p>Reporting usage of a document is optional.
@@ -191,14 +337,27 @@
      *     success.
      */
     @NonNull
-    ListenableFuture<Void> reportUsage(@NonNull ReportUsageRequest request);
+    ListenableFuture<Void> reportUsageAsync(@NonNull ReportUsageRequest request);
+
+    /**
+     * @deprecated use {@link #reportUsageAsync}
+     *
+     * @param request The usage reporting request.
+     * @return The pending result of performing this operation which resolves to {@code null} on
+     *     success.
+     */
+    @NonNull
+    @Deprecated
+    default ListenableFuture<Void> reportUsage(@NonNull ReportUsageRequest request) {
+        return reportUsageAsync(request);
+    }
 
     /**
      * Removes {@link GenericDocument} objects by document IDs in a namespace from the
      * {@link AppSearchSession} database.
      *
      * <p>Removed documents will no longer be surfaced by {@link #search} or
-     * {@link #getByDocumentId}
+     * {@link #getByDocumentIdAsync}
      * calls.
      *
      * <p>Once the database crosses the document count or byte usage threshold, removed documents
@@ -213,10 +372,28 @@
      * {@link AppSearchResult} with a result code of {@link AppSearchResult#RESULT_NOT_FOUND}.
      */
     @NonNull
-    ListenableFuture<AppSearchBatchResult<String, Void>> remove(
+    ListenableFuture<AppSearchBatchResult<String, Void>> removeAsync(
             @NonNull RemoveByDocumentIdRequest request);
 
     /**
+     * @deprecated use {@link #removeAsync}
+     *
+     * @param request {@link RemoveByDocumentIdRequest} with IDs in a namespace to remove from the
+     *                index.
+     * @return a {@link ListenableFuture} which resolves to an {@link AppSearchBatchResult}.
+     * The keys of the {@link AppSearchBatchResult} represent the input IDs from the
+     * {@link RemoveByDocumentIdRequest} object. The values are either {@code null} on success,
+     * or a failed {@link AppSearchResult} otherwise. IDs that are not found will return a failed
+     * {@link AppSearchResult} with a result code of {@link AppSearchResult#RESULT_NOT_FOUND}.
+     */
+    @NonNull
+    @Deprecated
+    default ListenableFuture<AppSearchBatchResult<String, Void>> remove(
+            @NonNull RemoveByDocumentIdRequest request) {
+        return removeAsync(request);
+    }
+
+    /**
      * Removes {@link GenericDocument}s from the index by Query. Documents will be removed if they
      * match the {@code queryExpression} in given namespaces and schemaTypes which is set via
      * {@link SearchSpec.Builder#addFilterNamespaces} and
@@ -234,7 +411,24 @@
      * @return The pending result of performing this operation.
      */
     @NonNull
-    ListenableFuture<Void> remove(@NonNull String queryExpression, @NonNull SearchSpec searchSpec);
+    ListenableFuture<Void> removeAsync(@NonNull String queryExpression,
+            @NonNull SearchSpec searchSpec);
+
+    /**
+     * @deprecated use {@link #removeAsync}
+     *
+     * @param queryExpression Query String to search.
+     * @param searchSpec      Spec containing schemaTypes, namespaces and query expression
+     *                        indicates how document will be removed. All specific about how to
+     *                        scoring, ordering, snippeting and resulting will be ignored.
+     * @return The pending result of performing this operation.
+     */
+    @NonNull
+    @Deprecated
+    default ListenableFuture<Void> remove(@NonNull String queryExpression,
+            @NonNull SearchSpec searchSpec) {
+        return removeAsync(queryExpression, searchSpec);
+    }
 
     /**
      * Gets the storage info for this {@link AppSearchSession} database.
@@ -245,7 +439,18 @@
      * @return a {@link ListenableFuture} which resolves to a {@link StorageInfo} object.
      */
     @NonNull
-    ListenableFuture<StorageInfo> getStorageInfo();
+    ListenableFuture<StorageInfo> getStorageInfoAsync();
+
+    /**
+     * @deprecated use {@link #getStorageInfoAsync()}
+     *
+     * @return a {@link ListenableFuture} which resolves to a {@link StorageInfo} object.
+     */
+    @NonNull
+    @Deprecated
+    default ListenableFuture<StorageInfo> getStorageInfo() {
+        return getStorageInfoAsync();
+    }
 
     /**
      * Flush all schema and document updates, additions, and deletes to disk if possible.
@@ -259,7 +464,21 @@
      * save to disk.
      */
     @NonNull
-    ListenableFuture<Void> requestFlush();
+    ListenableFuture<Void> requestFlushAsync();
+
+    /**
+     * @deprecated use {@link #requestFlushAsync()}
+     *
+     * @return The pending result of performing this operation.
+     * {@link androidx.appsearch.exceptions.AppSearchException} with
+     * {@link AppSearchResult#RESULT_INTERNAL_ERROR} will be set to the future if we hit error when
+     * save to disk.
+     */
+    @NonNull
+    @Deprecated
+    default ListenableFuture<Void> requestFlush() {
+        return requestFlushAsync();
+    }
 
     /**
      * Returns the {@link Features} to check for the availability of certain features
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
index 26ab787..dc530ee 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
@@ -24,9 +24,9 @@
  * <p>Features do not depend on any runtime state, and features will never be removed. Once
  * {@link #isFeatureSupported} returns {@code true} for a certain feature, it is safe to assume that
  * the feature will be available forever on that AppSearch storage implementation, at that
- * Android API level, on that device form factor.
- * <!--@exportToFramework:hide-->
+ * Android API level, on that device.
  */
+// @exportToFramework:copyToPath(testing/testutils/src/android/app/appsearch/testutil/external/Features.java)
 public interface Features {
 
     /**
@@ -38,10 +38,35 @@
 
     /**
      * Feature for {@link #isFeatureSupported(String)}. This feature covers
-     * {@link GlobalSearchSession#addObserver} and
-     * {@link GlobalSearchSession#removeObserver}.
+     * {@link GlobalSearchSession#registerObserverCallback} and
+     * {@link GlobalSearchSession#unregisterObserverCallback}.
      */
-    String GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER = "GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER";
+    String GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK =
+            "GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK";
+
+    /**
+     * Feature for {@link #isFeatureSupported(String)}. This feature covers
+     * {@link GlobalSearchSession#getSchemaAsync}.
+     */
+    String GLOBAL_SEARCH_SESSION_GET_SCHEMA = "GLOBAL_SEARCH_SESSION_GET_SCHEMA";
+
+    /**
+     * Feature for {@link #isFeatureSupported(String)}. This feature covers
+     * {@link GlobalSearchSession#getByDocumentIdAsync}.
+     */
+    String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
+
+    /**
+     * Feature for {@link #isFeatureSupported(String)}. This feature covers
+     * {@link SetSchemaRequest.Builder#addAllowedRoleForSchemaTypeVisibility},
+     * {@link SetSchemaRequest.Builder#clearAllowedRolesForSchemaTypeVisibility},
+     * {@link GetSchemaResponse#getSchemaTypesNotDisplayedBySystem()},
+     * {@link GetSchemaResponse#getSchemaTypesVisibleToPackages()},
+     * {@link GetSchemaResponse#getRequiredPermissionsForSchemaTypeVisibility()},
+     * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility} and
+     * {@link SetSchemaRequest.Builder#clearRequiredPermissionsForSchemaTypeVisibility}
+     */
+    String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
 
     /**
      * Returns whether a feature is supported at run-time. Feature support depends on the
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
index f1577f7..5dd5a6c 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
@@ -26,6 +26,7 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appsearch.annotation.Document;
+import androidx.appsearch.app.PropertyPath.PathSegment;
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.util.BundleUtil;
 import androidx.appsearch.util.IndentingStringBuilder;
@@ -51,8 +52,8 @@
  * <p>Documents are constructed by using the {@link GenericDocument.Builder}.
  * -->
  *
- * @see AppSearchSession#put
- * @see AppSearchSession#getByDocumentId
+ * @see AppSearchSession#putAsync
+ * @see AppSearchSession#getByDocumentIdAsync
  * @see AppSearchSession#search
  */
 public class GenericDocument {
@@ -81,7 +82,7 @@
      *
      * <p>Indexed properties are properties which are strings where the
      * {@link AppSearchSchema.StringPropertyConfig#getIndexingType} value is anything other
-     * than {@link AppSearchSchema.StringPropertyConfig.IndexingType#INDEXING_TYPE_NONE}.
+     * than {@link AppSearchSchema.StringPropertyConfig#INDEXING_TYPE_NONE}.
      */
     public static int getMaxIndexedProperties() {
         return MAX_INDEXED_PROPERTIES;
@@ -205,7 +206,7 @@
      * time base, the document will be auto-deleted.
      *
      * <p>The default value is 0, which means the document is permanent and won't be auto-deleted
-     * until the app is uninstalled or {@link AppSearchSession#remove} is called.
+     * until the app is uninstalled or {@link AppSearchSession#removeAsync} is called.
      */
     public long getTtlMillis() {
         return mBundle.getLong(TTL_MILLIS_FIELD, DEFAULT_TTL_MILLIS);
@@ -296,7 +297,8 @@
     @Nullable
     public Object getProperty(@NonNull String path) {
         Preconditions.checkNotNull(path);
-        Object rawValue = getRawPropertyFromRawDocument(path, mBundle);
+        Object rawValue =
+                getRawPropertyFromRawDocument(new PropertyPath(path), /*pathIndex=*/0, mBundle);
 
         // Unpack the raw value into the types the user expects, if required.
         if (rawValue instanceof Bundle) {
@@ -357,164 +359,138 @@
      *
      * <p>The return value may be any of GenericDocument's internal repeated storage types
      * (String[], long[], double[], boolean[], ArrayList&lt;Bundle&gt;, Parcelable[]).
+     *
+     * <p>Usually, this method takes a path and loops over it to get a property from the bundle.
+     * But in the case where we collect documents across repeated nested documents, we need to
+     * recurse back into this method, and so we also keep track of the index into the path.
+     *
+     * @param path the PropertyPath object representing the path
+     * @param pathIndex the index into the path we start at
+     * @param documentBundle the bundle that contains the path we are looking up
+     * @return the raw property
      */
     @Nullable
     @SuppressWarnings("deprecation")
     private static Object getRawPropertyFromRawDocument(
-            @NonNull String path, @NonNull Bundle documentBundle) {
+            @NonNull PropertyPath path, int pathIndex, @NonNull Bundle documentBundle) {
         Preconditions.checkNotNull(path);
         Preconditions.checkNotNull(documentBundle);
         Bundle properties = Preconditions.checkNotNull(documentBundle.getBundle(PROPERTIES_FIELD));
 
-        // Determine whether the path is just a raw property name with no control characters
-        int controlIdx = -1;
-        boolean controlIsIndex = false;
-        for (int i = 0; i < path.length(); i++) {
-            char c = path.charAt(i);
-            if (c == '[' || c == '.') {
-                controlIdx = i;
-                controlIsIndex = c == '[';
-                break;
-            }
-        }
 
-        // Look up the value of the first path element
-        Object firstElementValue;
-        if (controlIdx == -1) {
-            firstElementValue = properties.get(path);
-        } else {
-            String name = path.substring(0, controlIdx);
-            firstElementValue = properties.get(name);
-        }
+        for (int i = pathIndex; i < path.size(); i++) {
+            PathSegment segment = path.get(i);
 
-        // If the path has no further elements, we're done.
-        if (firstElementValue == null || controlIdx == -1) {
-            return firstElementValue;
-        }
+            Object currentElementValue = properties.get(segment.getPropertyName());
 
-        // At this point, for a path like "recipients[0]", firstElementValue contains the value of
-        // "recipients". If the first element of the path is an indexed value, we now update
-        // firstElementValue to contain "recipients[0]" instead.
-        String remainingPath;
-        if (!controlIsIndex) {
-            // Remaining path is everything after the .
-            remainingPath = path.substring(controlIdx + 1);
-        } else {
-            int endBracketIdx = path.indexOf(']', controlIdx);
-            if (endBracketIdx == -1) {
-                throw new IllegalArgumentException("Malformed path (no ending ']'): " + path);
-            }
-            if (endBracketIdx + 1 < path.length() && path.charAt(endBracketIdx + 1) != '.') {
-                throw new IllegalArgumentException(
-                        "Malformed path (']' not followed by '.'): " + path);
-            }
-            String indexStr = path.substring(controlIdx + 1, endBracketIdx);
-            int index = Integer.parseInt(indexStr);
-            if (index < 0) {
-                throw new IllegalArgumentException("Path index less than 0: " + path);
+            if (currentElementValue == null) {
+                return null;
             }
 
-            // Remaining path is everything after the [n]
-            if (endBracketIdx + 1 < path.length()) {
-                // More path remains, and we've already checked that charAt(endBracketIdx+1) == .
-                remainingPath = path.substring(endBracketIdx + 2);
+            // If the current PathSegment has an index, we now need to update currentElementValue to
+            // contain the value of the indexed property. For example, for a path segment like
+            // "recipients[0]", currentElementValue now contains the value of "recipients" while we
+            // need the value of "recipients[0]".
+            int index = segment.getPropertyIndex();
+            if (index != PathSegment.NON_REPEATED_CARDINALITY) {
+                // Extract the right array element
+                Object extractedValue = null;
+                if (currentElementValue instanceof String[]) {
+                    String[] stringValues = (String[]) currentElementValue;
+                    if (index < stringValues.length) {
+                        extractedValue = Arrays.copyOfRange(stringValues, index, index + 1);
+                    }
+                } else if (currentElementValue instanceof long[]) {
+                    long[] longValues = (long[]) currentElementValue;
+                    if (index < longValues.length) {
+                        extractedValue = Arrays.copyOfRange(longValues, index, index + 1);
+                    }
+                } else if (currentElementValue instanceof double[]) {
+                    double[] doubleValues = (double[]) currentElementValue;
+                    if (index < doubleValues.length) {
+                        extractedValue = Arrays.copyOfRange(doubleValues, index, index + 1);
+                    }
+                } else if (currentElementValue instanceof boolean[]) {
+                    boolean[] booleanValues = (boolean[]) currentElementValue;
+                    if (index < booleanValues.length) {
+                        extractedValue = Arrays.copyOfRange(booleanValues, index, index + 1);
+                    }
+                } else if (currentElementValue instanceof List) {
+                    @SuppressWarnings("unchecked")
+                    List<Bundle> bundles = (List<Bundle>) currentElementValue;
+                    if (index < bundles.size()) {
+                        extractedValue = bundles.subList(index, index + 1);
+                    }
+                } else if (currentElementValue instanceof Parcelable[]) {
+                    // Special optimization: to avoid creating new singleton arrays for traversing
+                    // paths we return the bare document Bundle in this particular case.
+                    Parcelable[] bundles = (Parcelable[]) currentElementValue;
+                    if (index < bundles.length) {
+                        extractedValue = (Bundle) bundles[index];
+                    }
+                } else {
+                    throw new IllegalStateException("Unsupported value type: "
+                            + currentElementValue);
+                }
+                currentElementValue = extractedValue;
+            }
+
+            // at the end of the path, either something like "...foo" or "...foo[1]"
+            if (currentElementValue == null || i == path.size() - 1) {
+                return currentElementValue;
+            }
+
+            // currentElementValue is now a Bundle or Parcelable[], we can continue down the path
+            if (currentElementValue instanceof Bundle) {
+                properties = ((Bundle) currentElementValue).getBundle(PROPERTIES_FIELD);
+            } else if (currentElementValue instanceof Parcelable[]) {
+                Parcelable[] parcelables = (Parcelable[]) currentElementValue;
+                if (parcelables.length == 1) {
+                    properties = ((Bundle) parcelables[0]).getBundle(PROPERTIES_FIELD);
+                    continue;
+                }
+
+                // Slowest path: we're collecting values across repeated nested docs. (Example:
+                // given a path like recipient.name, where recipient is a repeated field, we return
+                // a string array where each recipient's name is an array element).
+                //
+                // Performance note: Suppose that we have a property path "a.b.c" where the "a"
+                // property has N document values and each containing a "b" property with M document
+                // values and each of those containing a "c" property with an int array.
+                //
+                // We'll allocate a new ArrayList for each of the "b" properties, add the M int
+                // arrays from the "c" properties to it and then we'll allocate an int array in
+                // flattenAccumulator before returning that (1 + M allocation per "b" property).
+                //
+                // When we're on the "a" properties, we'll allocate an ArrayList and add the N
+                // flattened int arrays returned from the "b" properties to the list. Then we'll
+                // allocate an int array in flattenAccumulator (1 + N ("b" allocs) allocations per
+                // "a"). // So this implementation could incur 1 + N + NM allocs.
+                //
+                // However, we expect the vast majority of getProperty calls to be either for direct
+                // property names (not paths) or else property paths returned from snippetting,
+                // which always refer to exactly one property value and don't aggregate across
+                // repeated values. The implementation is optimized for these two cases, requiring
+                // no additional allocations. So we've decided that the above performance
+                // characteristics are OK for the less used path.
+                List<Object> accumulator = new ArrayList<>(parcelables.length);
+                for (Parcelable parcelable : parcelables) {
+                    // recurse as we need to branch
+                    Object value = getRawPropertyFromRawDocument(path, /*pathIndex=*/i + 1,
+                            (Bundle) parcelable);
+                    if (value != null) {
+                        accumulator.add(value);
+                    }
+                }
+                // Break the path traversing loop
+                return flattenAccumulator(accumulator);
             } else {
-                // No more path remains.
-                remainingPath = null;
+                Log.e(TAG, "Failed to apply path to document; no nested value found: " + path);
+                return null;
             }
-
-            // Extract the right array element
-            Object extractedValue = null;
-            if (firstElementValue instanceof String[]) {
-                String[] stringValues = (String[]) firstElementValue;
-                if (index < stringValues.length) {
-                    extractedValue = Arrays.copyOfRange(stringValues, index, index + 1);
-                }
-            } else if (firstElementValue instanceof long[]) {
-                long[] longValues = (long[]) firstElementValue;
-                if (index < longValues.length) {
-                    extractedValue = Arrays.copyOfRange(longValues, index, index + 1);
-                }
-            } else if (firstElementValue instanceof double[]) {
-                double[] doubleValues = (double[]) firstElementValue;
-                if (index < doubleValues.length) {
-                    extractedValue = Arrays.copyOfRange(doubleValues, index, index + 1);
-                }
-            } else if (firstElementValue instanceof boolean[]) {
-                boolean[] booleanValues = (boolean[]) firstElementValue;
-                if (index < booleanValues.length) {
-                    extractedValue = Arrays.copyOfRange(booleanValues, index, index + 1);
-                }
-            } else if (firstElementValue instanceof List) {
-                @SuppressWarnings("unchecked")
-                List<Bundle> bundles = (List<Bundle>) firstElementValue;
-                if (index < bundles.size()) {
-                    extractedValue = bundles.subList(index, index + 1);
-                }
-            } else if (firstElementValue instanceof Parcelable[]) {
-                // Special optimization: to avoid creating new singleton arrays for traversing paths
-                // we return the bare document Bundle in this particular case.
-                Parcelable[] bundles = (Parcelable[]) firstElementValue;
-                if (index < bundles.length) {
-                    extractedValue = (Bundle) bundles[index];
-                }
-            } else {
-                throw new IllegalStateException("Unsupported value type: " + firstElementValue);
-            }
-            firstElementValue = extractedValue;
         }
-
-        // If we are at the end of the path or there are no deeper elements in this document, we
-        // have nothing to recurse into.
-        if (firstElementValue == null || remainingPath == null) {
-            return firstElementValue;
-        }
-
-        // More of the path remains; recursively evaluate it
-        if (firstElementValue instanceof Bundle) {
-            return getRawPropertyFromRawDocument(remainingPath, (Bundle) firstElementValue);
-        } else if (firstElementValue instanceof Parcelable[]) {
-            Parcelable[] parcelables = (Parcelable[]) firstElementValue;
-            if (parcelables.length == 1) {
-                return getRawPropertyFromRawDocument(remainingPath, (Bundle) parcelables[0]);
-            }
-
-            // Slowest path: we're collecting values across repeated nested docs. (Example: given a
-            // path like recipient.name, where recipient is a repeated field, we return a string
-            // array where each recipient's name is an array element).
-            //
-            // Performance note: Suppose that we have a property path "a.b.c" where the "a"
-            // property has N document values and each containing a "b" property with M document
-            // values and each of those containing a "c" property with an int array.
-            //
-            // We'll allocate a new ArrayList for each of the "b" properties, add the M int arrays
-            // from the "c" properties to it and then we'll allocate an int array in
-            // flattenAccumulator before returning that (1 + M allocation per "b" property).
-            //
-            // When we're on the "a" properties, we'll allocate an ArrayList and add the N
-            // flattened int arrays returned from the "b" properties to the list. Then we'll
-            // allocate an int array in flattenAccumulator (1 + N ("b" allocs) allocations per "a").
-            // So this implementation could incur 1 + N + NM allocs.
-            //
-            // However, we expect the vast majority of getProperty calls to be either for direct
-            // property names (not paths) or else property paths returned from snippetting, which
-            // always refer to exactly one property value and don't aggregate across repeated
-            // values. The implementation is optimized for these two cases, requiring no additional
-            // allocations. So we've decided that the above performance characteristics are OK for
-            // the less used path.
-            List<Object> accumulator = new ArrayList<>(parcelables.length);
-            for (int i = 0; i < parcelables.length; i++) {
-                Object value =
-                        getRawPropertyFromRawDocument(remainingPath, (Bundle) parcelables[i]);
-                if (value != null) {
-                    accumulator.add(value);
-                }
-            }
-            return flattenAccumulator(accumulator);
-        } else {
-            Log.e(TAG, "Failed to apply path to document; no nested value found: " + path);
-            return null;
-        }
+        // Only way to get here is with an empty path list
+        return null;
     }
 
     /**
@@ -1014,7 +990,7 @@
         Arrays.sort(sortedProperties);
 
         for (int i = 0; i < sortedProperties.length; i++) {
-            Object property = getProperty(sortedProperties[i]);
+            Object property = Preconditions.checkNotNull(getProperty(sortedProperties[i]));
             builder.increaseIndentLevel();
             appendPropertyString(sortedProperties[i], property, builder);
             if (i != sortedProperties.length - 1) {
@@ -1103,12 +1079,12 @@
          * @param id         the unique identifier for the {@link GenericDocument} in its namespace.
          * @param schemaType the {@link AppSearchSchema} type of the {@link GenericDocument}. The
          *                   provided {@code schemaType} must be defined using
-         *                   {@link AppSearchSession#setSchema} prior
+         *                   {@link AppSearchSession#setSchemaAsync} prior
          *                   to inserting a document of this {@code schemaType} into the
          *                   AppSearch index using
-         *                   {@link AppSearchSession#put}.
+         *                   {@link AppSearchSession#putAsync}.
          *                   Otherwise, the document will be rejected by
-         *                   {@link AppSearchSession#put} with result code
+         *                   {@link AppSearchSession#putAsync} with result code
          *                   {@link AppSearchResult#RESULT_NOT_FOUND}.
          */
         @SuppressWarnings("unchecked")
@@ -1137,7 +1113,8 @@
         @SuppressWarnings("unchecked")
         Builder(@NonNull Bundle bundle) {
             mBundle = Preconditions.checkNotNull(bundle);
-            mProperties = mBundle.getBundle(PROPERTIES_FIELD);
+            // mProperties is NonNull and initialized to empty Bundle() in builder.
+            mProperties = Preconditions.checkNotNull(mBundle.getBundle(PROPERTIES_FIELD));
             mBuilderTypeInstance = (BuilderType) this;
         }
 
@@ -1177,7 +1154,7 @@
          * Sets the schema type of this document, changing the value provided in the constructor.
          *
          * <p>To successfully index a document, the schema type must match the name of an
-         * {@link AppSearchSchema} object previously provided to {@link AppSearchSession#setSchema}.
+         * {@link AppSearchSchema} object previously provided to {@link AppSearchSession#setSchemaAsync}.
          * <!--@exportToFramework:hide-->
          */
         @NonNull
@@ -1238,7 +1215,7 @@
          * {@link System#currentTimeMillis} time base, the document will be auto-deleted.
          *
          * <p>The default value is 0, which means the document is permanent and won't be
-         * auto-deleted until the app is uninstalled or {@link AppSearchSession#remove} is
+         * auto-deleted until the app is uninstalled or {@link AppSearchSession#removeAsync} is
          * called.
          *
          * @param ttlMillis a non-negative duration in milliseconds.
@@ -1262,7 +1239,7 @@
          *                {@link AppSearchSchema.PropertyConfig#getName}.
          * @param values the {@code String} values of the property.
          * @throws IllegalArgumentException if no values are provided, or if a passed in
-         *                                  {@code String} is {@code null}.
+         *                                  {@code String} is {@code null} or "".
          */
         @NonNull
         public BuilderType setPropertyString(@NonNull String name, @NonNull String... values) {
@@ -1281,6 +1258,7 @@
          *                for this property as given in
          *                {@link AppSearchSchema.PropertyConfig#getName}.
          * @param values the {@code boolean} values of the property.
+         * @throws IllegalArgumentException if the name is empty or {@code null}.
          */
         @NonNull
         public BuilderType setPropertyBoolean(@NonNull String name, @NonNull boolean... values) {
@@ -1299,6 +1277,7 @@
          *                for this property as given in
          *                {@link AppSearchSchema.PropertyConfig#getName}.
          * @param values the {@code long} values of the property.
+         * @throws IllegalArgumentException if the name is empty or {@code null}.
          */
         @NonNull
         public BuilderType setPropertyLong(@NonNull String name, @NonNull long... values) {
@@ -1317,6 +1296,7 @@
          *                for this property as given in
          *                {@link AppSearchSchema.PropertyConfig#getName}.
          * @param values the {@code double} values of the property.
+         * @throws IllegalArgumentException if the name is empty or {@code null}.
          */
         @NonNull
         public BuilderType setPropertyDouble(@NonNull String name, @NonNull double... values) {
@@ -1335,7 +1315,7 @@
          *                {@link AppSearchSchema.PropertyConfig#getName}.
          * @param values the {@code byte[]} of the property.
          * @throws IllegalArgumentException if no values are provided, or if a passed in
-         *                                  {@code byte[]} is {@code null}.
+         *                                  {@code byte[]} is {@code null}, or if name is empty.
          */
         @NonNull
         public BuilderType setPropertyBytes(@NonNull String name, @NonNull byte[]... values) {
@@ -1355,7 +1335,8 @@
          *                {@link AppSearchSchema.PropertyConfig#getName}.
          * @param values the {@link GenericDocument} values of the property.
          * @throws IllegalArgumentException if no values are provided, or if a passed in
-         *                                  {@link GenericDocument} is {@code null}.
+         *                                  {@link GenericDocument} is {@code null}, or if name
+         *                                  is empty.
          */
         @NonNull
         public BuilderType setPropertyDocument(
@@ -1385,6 +1366,7 @@
 
         private void putInPropertyBundle(@NonNull String name, @NonNull String[] values)
                 throws IllegalArgumentException {
+            validatePropertyName(name);
             for (int i = 0; i < values.length; i++) {
                 if (values[i] == null) {
                     throw new IllegalArgumentException("The String at " + i + " is null.");
@@ -1394,14 +1376,17 @@
         }
 
         private void putInPropertyBundle(@NonNull String name, @NonNull boolean[] values) {
+            validatePropertyName(name);
             mProperties.putBooleanArray(name, values);
         }
 
         private void putInPropertyBundle(@NonNull String name, @NonNull double[] values) {
+            validatePropertyName(name);
             mProperties.putDoubleArray(name, values);
         }
 
         private void putInPropertyBundle(@NonNull String name, @NonNull long[] values) {
+            validatePropertyName(name);
             mProperties.putLongArray(name, values);
         }
 
@@ -1412,6 +1397,7 @@
          * into ArrayList<Bundle>, and each elements will contain a one dimension byte[].
          */
         private void putInPropertyBundle(@NonNull String name, @NonNull byte[][] values) {
+            validatePropertyName(name);
             ArrayList<Bundle> bundles = new ArrayList<>(values.length);
             for (int i = 0; i < values.length; i++) {
                 if (values[i] == null) {
@@ -1425,6 +1411,7 @@
         }
 
         private void putInPropertyBundle(@NonNull String name, @NonNull GenericDocument[] values) {
+            validatePropertyName(name);
             Parcelable[] documentBundles = new Parcelable[values.length];
             for (int i = 0; i < values.length; i++) {
                 if (values[i] == null) {
@@ -1450,9 +1437,17 @@
         private void resetIfBuilt() {
             if (mBuilt) {
                 mBundle = BundleUtil.deepCopy(mBundle);
-                mProperties = mBundle.getBundle(PROPERTIES_FIELD);
+                // mProperties is NonNull and initialized to empty Bundle() in builder.
+                mProperties = Preconditions.checkNotNull(mBundle.getBundle(PROPERTIES_FIELD));
                 mBuilt = false;
             }
         }
+
+        /** Method to ensure property names are not blank */
+        private void validatePropertyName(@NonNull String name) {
+            if (name.isEmpty()) {
+                throw new IllegalArgumentException("Property name cannot be blank.");
+            }
+        }
     }
 }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetByDocumentIdRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetByDocumentIdRequest.java
index d9bfc0d..b2ebf3d 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetByDocumentIdRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetByDocumentIdRequest.java
@@ -34,7 +34,7 @@
  * Encapsulates a request to retrieve documents by namespace and IDs from the
  * {@link AppSearchSession} database.
  *
- * @see AppSearchSession#getByDocumentId
+ * @see AppSearchSession#getByDocumentIdAsync
  */
 public final class GetByDocumentIdRequest {
     /**
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetSchemaResponse.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetSchemaResponse.java
index f169099..3475576 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetSchemaResponse.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetSchemaResponse.java
@@ -16,21 +16,62 @@
 
 package androidx.appsearch.app;
 
+import android.annotation.SuppressLint;
 import android.os.Bundle;
 
 import androidx.annotation.IntRange;
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresFeature;
 import androidx.annotation.RestrictTo;
+import androidx.collection.ArrayMap;
 import androidx.collection.ArraySet;
 import androidx.core.util.Preconditions;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
-/** The response class of {@link AppSearchSession#getSchema} */
+/** The response class of {@link AppSearchSession#getSchemaAsync} */
 public final class GetSchemaResponse {
     private static final String VERSION_FIELD = "version";
     private static final String SCHEMAS_FIELD = "schemas";
+    private static final String SCHEMAS_NOT_DISPLAYED_BY_SYSTEM_FIELD =
+            "schemasNotDisplayedBySystem";
+    private static final String SCHEMAS_VISIBLE_TO_PACKAGES_FIELD = "schemasVisibleToPackages";
+    private static final String SCHEMAS_VISIBLE_TO_PERMISSION_FIELD =
+            "schemasVisibleToPermissions";
+    private static final String ALL_REQUIRED_PERMISSION_FIELD =
+            "allRequiredPermission";
+    /**
+     * This Set contains all schemas that are not displayed by the system. All values in the set are
+     * prefixed with the package-database prefix. We do lazy fetch, the object will be created
+     * when the user first time fetch it.
+     */
+    @Nullable
+    private Set<String> mSchemasNotDisplayedBySystem;
+    /**
+     * This map contains all schemas and {@link PackageIdentifier} that has access to the schema.
+     * All keys in the map are prefixed with the package-database prefix. We do lazy fetch, the
+     * object will be created when the user first time fetch it.
+     */
+    @Nullable
+    private Map<String, Set<PackageIdentifier>> mSchemasVisibleToPackages;
+
+    /**
+     * This map contains all schemas and Android Permissions combinations that are required to
+     * access the schema. All keys in the map are prefixed with the package-database prefix. We
+     * do lazy fetch, the object will be created when the user first time fetch it.
+     * The Map is constructed in ANY-ALL cases. The querier could read the {@link GenericDocument}
+     * objects under the {@code schemaType} if they holds ALL required permissions of ANY
+     * combinations.
+     * The value set represents
+     * {@link androidx.appsearch.app.SetSchemaRequest.AppSearchSupportedPermission}.
+     */
+    @Nullable
+    private Map<String, Set<Set<Integer>>> mSchemasVisibleToPermissions;
 
     private final Bundle mBundle;
 
@@ -60,14 +101,15 @@
 
     /**
      * Return the schemas most recently successfully provided to
-     * {@link AppSearchSession#setSchema}.
+     * {@link AppSearchSession#setSchemaAsync}.
      *
      * <p>It is inefficient to call this method repeatedly.
      */
     @NonNull
     @SuppressWarnings("deprecation")
     public Set<AppSearchSchema> getSchemas() {
-        ArrayList<Bundle> schemaBundles = mBundle.getParcelableArrayList(SCHEMAS_FIELD);
+        ArrayList<Bundle> schemaBundles = Preconditions.checkNotNull(
+                    mBundle.getParcelableArrayList(SCHEMAS_FIELD));
         Set<AppSearchSchema> schemas = new ArraySet<>(schemaBundles.size());
         for (int i = 0; i < schemaBundles.size(); i++) {
             schemas.add(new AppSearchSchema(schemaBundles.get(i)));
@@ -75,12 +117,160 @@
         return schemas;
     }
 
+    /**
+     * Returns all the schema types that are opted out of being displayed and visible on any
+     * system UI surface.
+     */
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+    // @exportToFramework:endStrip()
+    @NonNull
+    public Set<String> getSchemaTypesNotDisplayedBySystem() {
+        checkGetVisibilitySettingSupported();
+        if (mSchemasNotDisplayedBySystem == null) {
+            List<String> schemasNotDisplayedBySystemList =
+                    mBundle.getStringArrayList(SCHEMAS_NOT_DISPLAYED_BY_SYSTEM_FIELD);
+            mSchemasNotDisplayedBySystem =
+                    Collections.unmodifiableSet(new ArraySet<>(schemasNotDisplayedBySystemList));
+        }
+        return mSchemasNotDisplayedBySystem;
+    }
+
+    /**
+     * Returns a mapping of schema types to the set of packages that have access
+     * to that schema type.
+     */
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+    // @exportToFramework:endStrip()
+    @NonNull
+    @SuppressWarnings("deprecation")
+    public Map<String, Set<PackageIdentifier>> getSchemaTypesVisibleToPackages() {
+        checkGetVisibilitySettingSupported();
+        if (mSchemasVisibleToPackages == null) {
+            Bundle schemaVisibleToPackagesBundle = Preconditions.checkNotNull(
+                        mBundle.getBundle(SCHEMAS_VISIBLE_TO_PACKAGES_FIELD));
+            Map<String, Set<PackageIdentifier>> copy = new ArrayMap<>();
+            for (String key : schemaVisibleToPackagesBundle.keySet()) {
+                List<Bundle> PackageIdentifierBundles = Preconditions.checkNotNull(
+                            schemaVisibleToPackagesBundle.getParcelableArrayList(key));
+                Set<PackageIdentifier> packageIdentifiers =
+                        new ArraySet<>(PackageIdentifierBundles.size());
+                for (int i = 0; i < PackageIdentifierBundles.size(); i++) {
+                    packageIdentifiers.add(new PackageIdentifier(PackageIdentifierBundles.get(i)));
+                }
+                copy.put(key, packageIdentifiers);
+            }
+            mSchemasVisibleToPackages = Collections.unmodifiableMap(copy);
+        }
+        return mSchemasVisibleToPackages;
+    }
+
+    /**
+     * Returns a mapping of schema types to the Map of {@link android.Manifest.permission}
+     * combinations that querier must hold to access that schema type.
+     *
+     * <p> The querier could read the {@link GenericDocument} objects under the {@code schemaType}
+     * if they holds ALL required permissions of ANY of the individual value sets.
+     *
+     * <p>For example, if the Map contains {@code {% verbatim %}{{permissionA, PermissionB},
+     * { PermissionC, PermissionD}, {PermissionE}}{% endverbatim %}}.
+     * <ul>
+     *     <li>A querier holds both PermissionA and PermissionB has access.</li>
+     *     <li>A querier holds both PermissionC and PermissionD has access.</li>
+     *     <li>A querier holds only PermissionE has access.</li>
+     *     <li>A querier holds both PermissionA and PermissionE has access.</li>
+     *     <li>A querier holds only PermissionA doesn't have access.</li>
+     *     <li>A querier holds both PermissionA and PermissionC doesn't have access.</li>
+     * </ul>
+     *
+     * @return The map contains schema type and all combinations of required permission for querier
+     *         to access it. The supported Permission are {@link SetSchemaRequest#READ_SMS},
+     *         {@link SetSchemaRequest#READ_CALENDAR}, {@link SetSchemaRequest#READ_CONTACTS},
+     *         {@link SetSchemaRequest#READ_EXTERNAL_STORAGE},
+     *         {@link SetSchemaRequest#READ_HOME_APP_SEARCH_DATA} and
+     *         {@link SetSchemaRequest#READ_ASSISTANT_APP_SEARCH_DATA}.
+     */
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+    // @exportToFramework:endStrip()
+    @NonNull
+    @SuppressWarnings("deprecation")
+    public Map<String, Set<Set<Integer>>> getRequiredPermissionsForSchemaTypeVisibility() {
+        checkGetVisibilitySettingSupported();
+        if (mSchemasVisibleToPermissions == null) {
+            Map<String, Set<Set<Integer>>> copy = new ArrayMap<>();
+            Bundle schemaVisibleToPermissionBundle = Preconditions.checkNotNull(
+                        mBundle.getBundle(SCHEMAS_VISIBLE_TO_PERMISSION_FIELD));
+            for (String key : schemaVisibleToPermissionBundle.keySet()) {
+                ArrayList<Bundle> allRequiredPermissionsBundle =
+                        schemaVisibleToPermissionBundle.getParcelableArrayList(key);
+                Set<Set<Integer>> visibleToPermissions = new ArraySet<>();
+                if (allRequiredPermissionsBundle != null) {
+                    // This should never be null
+                    for (int i = 0; i < allRequiredPermissionsBundle.size(); i++) {
+                        visibleToPermissions.add(new ArraySet<>(allRequiredPermissionsBundle.get(i)
+                                .getIntegerArrayList(ALL_REQUIRED_PERMISSION_FIELD)));
+                    }
+                }
+                copy.put(key, visibleToPermissions);
+            }
+            mSchemasVisibleToPermissions = Collections.unmodifiableMap(copy);
+        }
+        return mSchemasVisibleToPermissions;
+    }
+
+    private void checkGetVisibilitySettingSupported() {
+        if (!mBundle.containsKey(SCHEMAS_VISIBLE_TO_PACKAGES_FIELD)) {
+            throw new UnsupportedOperationException("Get visibility setting is not supported with"
+                    + " this backend/Android API level combination.");
+        }
+    }
+
     /** Builder for {@link GetSchemaResponse} objects. */
     public static final class Builder {
         private int mVersion = 0;
         private ArrayList<Bundle> mSchemaBundles = new ArrayList<>();
+        /**
+         * Creates the object when we actually set them. If we never set visibility settings, we
+         * should throw {@link UnsupportedOperationException} in the visibility getters.
+         */
+        @Nullable
+        private ArrayList<String> mSchemasNotDisplayedBySystem;
+        private Bundle mSchemasVisibleToPackages;
+        private Bundle mSchemasVisibleToPermissions;
         private boolean mBuilt = false;
 
+        /** Create a {@link Builder} object} */
+        public Builder() {
+            this(/*getVisibilitySettingSupported=*/true);
+        }
+
+        /**
+         * Create a {@link Builder} object}.
+         *
+         * <p>This constructor should only be used in Android API below than T.
+         *
+         * @param getVisibilitySettingSupported whether supported
+         * {@link Features#ADD_PERMISSIONS_AND_GET_VISIBILITY} by this
+         *                                      backend/Android API level.
+         * @hide
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+        public Builder(boolean getVisibilitySettingSupported) {
+            if (getVisibilitySettingSupported) {
+                mSchemasNotDisplayedBySystem = new ArrayList<>();
+                mSchemasVisibleToPackages = new Bundle();
+                mSchemasVisibleToPermissions = new Bundle();
+            }
+        }
+
         /**
          * Sets the database overall schema version.
          *
@@ -102,12 +292,130 @@
             return this;
         }
 
+        /**
+         * Sets whether or not documents from the provided {@code schemaType} will be displayed
+         * and visible on any system UI surface.
+         *
+         * @param schemaType The name of an {@link AppSearchSchema} within the same
+         *                   {@link GetSchemaResponse}, which won't be displayed by system.
+         */
+        // Getter getSchemaTypesNotDisplayedBySystem returns plural objects.
+        @SuppressLint("MissingGetterMatchingBuilder")
+        @NonNull
+        public Builder addSchemaTypeNotDisplayedBySystem(@NonNull String schemaType) {
+            Preconditions.checkNotNull(schemaType);
+            resetIfBuilt();
+            if (mSchemasNotDisplayedBySystem == null) {
+                mSchemasNotDisplayedBySystem = new ArrayList<>();
+            }
+            mSchemasNotDisplayedBySystem.add(schemaType);
+            return this;
+        }
+
+        /**
+         * Sets whether or not documents from the provided {@code schemaType} can be read by the
+         * specified package.
+         *
+         * <p>Each package is represented by a {@link PackageIdentifier}, containing a package name
+         * and a byte array of type {@link android.content.pm.PackageManager#CERT_INPUT_SHA256}.
+         *
+         * <p>To opt into one-way data sharing with another application, the developer will need to
+         * explicitly grant the other application’s package name and certificate Read access to its
+         * data.
+         *
+         * <p>For two-way data sharing, both applications need to explicitly grant Read access to
+         * one another.
+         *
+         * @param schemaType               The schema type to set visibility on.
+         * @param packageIdentifiers       Represents the package that has access to the given
+         *                                 schema type.
+         */
+        // Getter getSchemaTypesVisibleToPackages returns a map contains all schema types.
+        @SuppressLint("MissingGetterMatchingBuilder")
+        @NonNull
+        public Builder setSchemaTypeVisibleToPackages(
+                @NonNull String schemaType,
+                @NonNull Set<PackageIdentifier> packageIdentifiers) {
+            Preconditions.checkNotNull(schemaType);
+            Preconditions.checkNotNull(packageIdentifiers);
+            resetIfBuilt();
+            ArrayList<Bundle> bundles = new ArrayList<>(packageIdentifiers.size());
+            for (PackageIdentifier packageIdentifier : packageIdentifiers) {
+                bundles.add(packageIdentifier.getBundle());
+            }
+            mSchemasVisibleToPackages.putParcelableArrayList(schemaType, bundles);
+            return this;
+        }
+
+        /**
+         * Sets a set of required {@link android.Manifest.permission} combinations to the given
+         * schema type.
+         *
+         * <p> The querier could read the {@link GenericDocument} objects under the
+         * {@code schemaType} if they holds ALL required permissions of ANY of the individual value
+         * sets.
+         *
+         * <p>For example, if the Map contains {@code {% verbatim %}{{permissionA, PermissionB},
+         * {PermissionC, PermissionD}, {PermissionE}}{% endverbatim %}}.
+         * <ul>
+         *     <li>A querier holds both PermissionA and PermissionB has access.</li>
+         *     <li>A querier holds both PermissionC and PermissionD has access.</li>
+         *     <li>A querier holds only PermissionE has access.</li>
+         *     <li>A querier holds both PermissionA and PermissionE has access.</li>
+         *     <li>A querier holds only PermissionA doesn't have access.</li>
+         *     <li>A querier holds both PermissionA and PermissionC doesn't have access.</li>
+         * </ul>
+         *
+         * @see android.Manifest.permission#READ_SMS
+         * @see android.Manifest.permission#READ_CALENDAR
+         * @see android.Manifest.permission#READ_CONTACTS
+         * @see android.Manifest.permission#READ_EXTERNAL_STORAGE
+         * @see android.Manifest.permission#READ_HOME_APP_SEARCH_DATA
+         * @see android.Manifest.permission#READ_ASSISTANT_APP_SEARCH_DATA
+         *
+         * @param schemaType             The schema type to set visibility on.
+         * @param visibleToPermissions   The Android permissions that will be required to access
+         *                               the given schema.
+         */
+        // Getter getRequiredPermissionsForSchemaTypeVisibility returns a map for all schemaTypes.
+        @SuppressLint("MissingGetterMatchingBuilder")
+        @NonNull
+        public Builder setRequiredPermissionsForSchemaTypeVisibility(
+                @NonNull String schemaType,
+                @SetSchemaRequest.AppSearchSupportedPermission @NonNull
+                        Set<Set<Integer>> visibleToPermissions) {
+            Preconditions.checkNotNull(schemaType);
+            Preconditions.checkNotNull(visibleToPermissions);
+            resetIfBuilt();
+            ArrayList<Bundle> visibleToPermissionsBundle = new ArrayList<>();
+            for (Set<Integer> allRequiredPermissions : visibleToPermissions) {
+                for (int permission : allRequiredPermissions) {
+                    Preconditions.checkArgumentInRange(permission, SetSchemaRequest.READ_SMS,
+                            SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA, "permission");
+                }
+                Bundle allRequiredPermissionsBundle = new Bundle();
+                allRequiredPermissionsBundle.putIntegerArrayList(
+                        ALL_REQUIRED_PERMISSION_FIELD, new ArrayList<>(allRequiredPermissions));
+                visibleToPermissionsBundle.add(allRequiredPermissionsBundle);
+            }
+            mSchemasVisibleToPermissions.putParcelableArrayList(schemaType,
+                    visibleToPermissionsBundle);
+            return this;
+        }
+
         /** Builds a {@link GetSchemaResponse} object. */
         @NonNull
         public GetSchemaResponse build() {
             Bundle bundle = new Bundle();
             bundle.putInt(VERSION_FIELD, mVersion);
             bundle.putParcelableArrayList(SCHEMAS_FIELD, mSchemaBundles);
+            if (mSchemasNotDisplayedBySystem != null) {
+                // Only save the visibility fields if it was actually set.
+                bundle.putStringArrayList(SCHEMAS_NOT_DISPLAYED_BY_SYSTEM_FIELD,
+                        mSchemasNotDisplayedBySystem);
+                bundle.putBundle(SCHEMAS_VISIBLE_TO_PACKAGES_FIELD, mSchemasVisibleToPackages);
+                bundle.putBundle(SCHEMAS_VISIBLE_TO_PERMISSION_FIELD, mSchemasVisibleToPermissions);
+            }
             mBuilt = true;
             return new GetSchemaResponse(bundle);
         }
@@ -115,6 +423,16 @@
         private void resetIfBuilt() {
             if (mBuilt) {
                 mSchemaBundles = new ArrayList<>(mSchemaBundles);
+                if (mSchemasNotDisplayedBySystem != null) {
+                    // Only reset the visibility fields if it was actually set.
+                    mSchemasNotDisplayedBySystem = new ArrayList<>(mSchemasNotDisplayedBySystem);
+                    Bundle copyVisibleToPackages = new Bundle();
+                    copyVisibleToPackages.putAll(mSchemasVisibleToPackages);
+                    mSchemasVisibleToPackages = copyVisibleToPackages;
+                    Bundle copyVisibleToPermissions = new Bundle();
+                    copyVisibleToPermissions.putAll(mSchemasVisibleToPermissions);
+                    mSchemasVisibleToPermissions = copyVisibleToPermissions;
+                }
                 mBuilt = false;
             }
         }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GlobalSearchSession.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GlobalSearchSession.java
index 6784803..4ce54b4 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GlobalSearchSession.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GlobalSearchSession.java
@@ -16,9 +16,12 @@
 // @exportToFramework:skipFile()
 package androidx.appsearch.app;
 
+import android.annotation.SuppressLint;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.RequiresFeature;
-import androidx.appsearch.observer.AppSearchObserverCallback;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.observer.ObserverCallback;
 import androidx.appsearch.observer.ObserverSpec;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -36,6 +39,31 @@
  */
 public interface GlobalSearchSession extends Closeable {
     /**
+     * Retrieves {@link GenericDocument} documents, belonging to the specified package name and
+     * database name and identified by the namespace and ids in the request, from the
+     * {@link GlobalSearchSession} database. When a call is successful, the result will be
+     * returned in the successes section of the {@link AppSearchBatchResult} object in the callback.
+     * If the package doesn't exist, database doesn't exist, or if the calling package doesn't have
+     * access, these failures will be reflected as {@link AppSearchResult} objects with a
+     * RESULT_NOT_FOUND status code in the failures section of the {@link AppSearchBatchResult}
+     * object.
+     *
+     * @param packageName the name of the package to get from
+     * @param databaseName the name of the database to get from
+     * @param request a request containing a namespace and IDs of the documents to retrieve.
+     */
+    @NonNull
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.GLOBAL_SEARCH_SESSION_GET_BY_ID)
+    // @exportToFramework:endStrip()
+    ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
+            @NonNull String packageName,
+            @NonNull String databaseName,
+            @NonNull GetByDocumentIdRequest request);
+
+    /**
      * Retrieves documents from all AppSearch databases that the querying application has access to.
      *
      * <p>Applications can be granted access to documents by specifying
@@ -51,7 +79,7 @@
      * forming a query string.
      *
      * <p>This method is lightweight. The heavy work will be done in
-     * {@link SearchResults#getNextPage}.
+     * {@link SearchResults#getNextPageAsync}.
      *
      * @param queryExpression query string to search.
      * @param searchSpec      spec for setting document filters, adding projection, setting term
@@ -64,11 +92,11 @@
     /**
      * Reports that a particular document has been used from a system surface.
      *
-     * <p>See {@link AppSearchSession#reportUsage} for a general description of document usage, as
-     * well as an API that can be used by the app itself.
+     * <p>See {@link AppSearchSession#reportUsageAsync} for a general description of document usage,
+     * as well as an API that can be used by the app itself.
      *
      * <p>Usage reported via this method is accounted separately from usage reported via
-     * {@link AppSearchSession#reportUsage} and may be accessed using the constants
+     * {@link AppSearchSession#reportUsageAsync} and may be accessed using the constants
      * {@link SearchSpec#RANKING_STRATEGY_SYSTEM_USAGE_COUNT} and
      * {@link SearchSpec#RANKING_STRATEGY_SYSTEM_USAGE_LAST_USED_TIMESTAMP}.
      *
@@ -79,7 +107,70 @@
      *     is not part of the system.
      */
     @NonNull
-    ListenableFuture<Void> reportSystemUsage(@NonNull ReportSystemUsageRequest request);
+    ListenableFuture<Void> reportSystemUsageAsync(@NonNull ReportSystemUsageRequest request);
+
+    /**
+     * @deprecated use {@link #reportSystemUsageAsync}
+     *
+     * @return The pending result of performing this operation which resolves to {@code null} on
+     *     success. The pending result will be completed with an
+     *     {@link androidx.appsearch.exceptions.AppSearchException} with a code of
+     *     {@link AppSearchResult#RESULT_SECURITY_ERROR} if this API is invoked by an app which
+     *     is not part of the system.
+     */
+    @NonNull
+    @Deprecated
+    default ListenableFuture<Void> reportSystemUsage(@NonNull ReportSystemUsageRequest request) {
+        return reportSystemUsageAsync(request);
+    }
+
+    /**
+     * Retrieves the collection of schemas most recently successfully provided to
+     * {@link AppSearchSession#setSchemaAsync} for any types belonging to the requested package and
+     * database that the caller has been granted access to.
+     *
+     * <p> If the requested package/database combination does not exist or the caller has not been
+     * granted access to it, then an empty GetSchemaResponse will be returned.
+     *
+     *
+     * @param packageName the package that owns the requested {@link AppSearchSchema} instances.
+     * @param databaseName the database that owns the requested {@link AppSearchSchema} instances.
+     * @return The pending {@link GetSchemaResponse} containing the schemas that the caller has
+     * access to or an empty GetSchemaResponse if the request package and database does not
+     * exist, has not set a schema or contains no schemas that are accessible to the caller.
+     */
+    // This call hits disk; async API prevents us from treating these calls as properties.
+    @SuppressLint("KotlinPropertyAccess")
+    @NonNull
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA)
+    // @exportToFramework:endStrip()
+    ListenableFuture<GetSchemaResponse> getSchemaAsync(@NonNull String packageName,
+            @NonNull String databaseName);
+
+    /**
+     * @deprecated use {@link #getSchemaAsync}.
+     *
+     * @param packageName the package that owns the requested {@link AppSearchSchema} instances.
+     * @param databaseName the database that owns the requested {@link AppSearchSchema} instances.
+     * @return The pending {@link GetSchemaResponse} containing the schemas that the caller has
+     * access to or an empty GetSchemaResponse if the request package and database does not
+     * exist, has not set a schema or contains no schemas that are accessible to the caller.
+     */
+    @SuppressLint("KotlinPropertyAccess")
+    @NonNull
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA)
+    // @exportToFramework:endStrip()
+    @Deprecated
+    default ListenableFuture<GetSchemaResponse> getSchema(@NonNull String packageName,
+            @NonNull String databaseName) {
+        return getSchemaAsync(packageName, databaseName);
+    }
 
     /**
      * Returns the {@link Features} to check for the availability of certain features
@@ -89,63 +180,75 @@
     Features getFeatures();
 
     /**
-     * Adds an {@link AppSearchObserverCallback} to monitor changes within the
-     * databases owned by {@code observedPackage} if they match the given
+     * Adds an {@link ObserverCallback} to monitor changes within the databases owned by
+     * {@code targetPackageName} if they match the given
      * {@link androidx.appsearch.observer.ObserverSpec}.
      *
-     * <p>If the data owned by {@code observedPackage} is not visible to you, the registration call
-     * will succeed but no notifications will be dispatched. Notifications could start flowing later
-     * if {@code observedPackage} changes its schema visibility settings.
+     * <p>The observer callback is only triggered for data that changes after it is registered. No
+     * notification about existing data is sent as a result of registering an observer. To find out
+     * about existing data, you must use the {@link GlobalSearchSession#search} API.
      *
-     * <p>If no package matching {@code observedPackage} exists on the system, the registration call
-     * will succeed but no notifications will be dispatched. Notifications could start flowing later
-     * if {@code observedPackage} is installed and starts indexing data.
+     * <p>If the data owned by {@code targetPackageName} is not visible to you, the registration
+     * call will succeed but no notifications will be dispatched. Notifications could start flowing
+     * later if {@code targetPackageName} changes its schema visibility settings.
+     *
+     * <p>If no package matching {@code targetPackageName} exists on the system, the registration
+     * call will succeed but no notifications will be dispatched. Notifications could start flowing
+     * later if {@code targetPackageName} is installed and starts indexing data.
      *
      * <p>This feature may not be available in all implementations. Check
-     * {@link Features#GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER} before calling this method.
+     * {@link Features#GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK} before calling this method.
      *
-     * @param observedPackage Package whose changes to monitor
+     * @param targetPackageName Package whose changes to monitor
      * @param spec            Specification of what types of changes to listen for
      * @param executor        Executor on which to call the {@code observer} callback methods.
      * @param observer        Callback to trigger when a schema or document changes
+     * @throws AppSearchException            if an error occurs trying to register the observer
      * @throws UnsupportedOperationException if this feature is not available on this
      *                                       AppSearch implementation.
      */
     // @exportToFramework:startStrip()
     @RequiresFeature(
             enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
-            name = Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER)
+            name = Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK)
     // @exportToFramework:endStrip()
-    void addObserver(
-            @NonNull String observedPackage,
+    void registerObserverCallback(
+            @NonNull String targetPackageName,
             @NonNull ObserverSpec spec,
             @NonNull Executor executor,
-            @NonNull AppSearchObserverCallback observer);
+            @NonNull ObserverCallback observer) throws AppSearchException;
 
     /**
-     * Removes previously registered {@link AppSearchObserverCallback} instances from the system.
+     * Removes previously registered {@link ObserverCallback} instances from the system.
      *
-     * <p>All instances of {@link AppSearchObserverCallback} which are equal to the provided
-     * callback using {@link AppSearchObserverCallback#equals} will be removed.
+     * <p>All instances of {@link ObserverCallback} which are registered to observe
+     * {@code targetPackageName} and compare equal to the provided callback using the provided
+     * argument's {@link ObserverCallback#equals} will be removed.
      *
      * <p>If no matching observers have been registered, this method has no effect. If multiple
      * matching observers have been registered, all will be removed.
      *
      * <p>This feature may not be available in all implementations. Check
-     * {@link Features#GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER} before calling this method.
+     * {@link Features#GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK} before calling this method.
      *
-     * @param observedPackage Package in which the observers to be removed are registered
-     * @param observer        Callback to unregister
+     * @param targetPackageName Package which the observers to be removed are listening to.
+     * @param observer          Callback to unregister.
+     * @throws AppSearchException            if an error occurs trying to remove the observer, such
+     *                                       as a failure to communicate with the system service
+     *                                       in the platform backend. Note that no
+     *                                       error will be thrown if the provided observer
+     *                                       doesn't match any registered observer.
      * @throws UnsupportedOperationException if this feature is not available on this
      *                                       AppSearch implementation.
      */
     // @exportToFramework:startStrip()
     @RequiresFeature(
             enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
-            name = Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER)
+            name = Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK)
     // @exportToFramework:endStrip()
-    void removeObserver(
-            @NonNull String observedPackage, @NonNull AppSearchObserverCallback observer);
+    void unregisterObserverCallback(
+            @NonNull String targetPackageName, @NonNull ObserverCallback observer)
+            throws AppSearchException;
 
     /** Closes the {@link GlobalSearchSession}. */
     @Override
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/InternalSetSchemaResponse.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/InternalSetSchemaResponse.java
new file mode 100644
index 0000000..42aecce
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/InternalSetSchemaResponse.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2022 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.appsearch.app;
+
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.core.util.Preconditions;
+
+/**
+ * An internal wrapper class of {@link SetSchemaResponse}.
+ *
+ * <p>For public users, if the {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync}
+ * failed, we will directly throw an Exception. But AppSearch internal need to divert the
+ * incompatible changes form other call flows. This class adds a {@link #isSuccess()} to indicate
+ * if the call fails because of incompatible change.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class InternalSetSchemaResponse {
+
+    private static final String IS_SUCCESS_FIELD = "isSuccess";
+    private static final String SET_SCHEMA_RESPONSE_BUNDLE_FIELD = "setSchemaResponseBundle";
+    private static final String ERROR_MESSAGE_FIELD = "errorMessage";
+
+    private final Bundle mBundle;
+
+    public InternalSetSchemaResponse(@NonNull Bundle bundle) {
+        mBundle = Preconditions.checkNotNull(bundle);
+    }
+
+    private InternalSetSchemaResponse(boolean isSuccess,
+            @NonNull SetSchemaResponse setSchemaResponse,
+            @Nullable String errorMessage) {
+        Preconditions.checkNotNull(setSchemaResponse);
+        mBundle = new Bundle();
+        mBundle.putBoolean(IS_SUCCESS_FIELD, isSuccess);
+        mBundle.putBundle(SET_SCHEMA_RESPONSE_BUNDLE_FIELD, setSchemaResponse.getBundle());
+        mBundle.putString(ERROR_MESSAGE_FIELD, errorMessage);
+    }
+
+    /**
+     * Returns the {@link Bundle} populated by this builder.
+     * @hide
+     */
+    @NonNull
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public Bundle getBundle() {
+        return mBundle;
+    }
+
+    /**
+     * Creates a new successful {@link InternalSetSchemaResponse}.
+     *
+     * @param setSchemaResponse  The object this internal object represents.
+     */
+    @NonNull
+    public static InternalSetSchemaResponse newSuccessfulSetSchemaResponse(
+            @NonNull SetSchemaResponse setSchemaResponse) {
+        return new InternalSetSchemaResponse(/*isSuccess=*/ true, setSchemaResponse,
+                /*errorMessage=*/null);
+    }
+
+    /**
+     * Creates a new failed {@link InternalSetSchemaResponse}.
+     *
+     * @param setSchemaResponse  The object this internal object represents.
+     * @param errorMessage       An string describing the reason or nature of the failure.
+     */
+    @NonNull
+    public static InternalSetSchemaResponse newFailedSetSchemaResponse(
+            @NonNull SetSchemaResponse setSchemaResponse,
+            @NonNull String errorMessage) {
+        return new InternalSetSchemaResponse(/*isSuccess=*/ false, setSchemaResponse,
+                errorMessage);
+    }
+
+    /** Returns {@code true} if the schema request is proceeded successfully. */
+    public boolean isSuccess() {
+        return mBundle.getBoolean(IS_SUCCESS_FIELD);
+    }
+
+    /**
+     * Returns the {@link SetSchemaResponse} of the set schema call.
+     *
+     * <p>The call may or may not success. Check {@link #isSuccess()} before call this method.
+     */
+    @NonNull
+    public SetSchemaResponse getSetSchemaResponse() {
+        return new SetSchemaResponse(mBundle.getBundle(SET_SCHEMA_RESPONSE_BUNDLE_FIELD));
+    }
+
+
+    /**
+     * Returns the error message associated with this response.
+     *
+     * <p>If {@link #isSuccess} is {@code true}, the error message is always {@code null}.
+     */
+    @Nullable
+    public String getErrorMessage() {
+        return mBundle.getString(ERROR_MESSAGE_FIELD);
+    }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Migrator.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Migrator.java
index b47735b..e6a7b2c 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Migrator.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Migrator.java
@@ -51,11 +51,11 @@
      * higher version number than the current {@link AppSearchSchema} saved in AppSearch.
      *
      * <p>If this {@link Migrator} is provided to cover a compatible schema change via
-     * {@link AppSearchSession#setSchema}, documents under the old version won't be removed
+     * {@link AppSearchSession#setSchemaAsync}, documents under the old version won't be removed
      * unless you use the same document ID.
      *
      * <p>This method will be invoked on the background worker thread provided via
-     * {@link AppSearchSession#setSchema}.
+     * {@link AppSearchSession#setSchemaAsync}.
      *
      * @param currentVersion The current version of the document's schema.
      * @param finalVersion  The final version that documents need to be migrated to.
@@ -74,7 +74,7 @@
      * lower version number than the current {@link AppSearchSchema} saved in AppSearch.
      *
      * <p>If this {@link Migrator} is provided to cover a compatible schema change via
-     * {@link AppSearchSession#setSchema}, documents under the old version won't be removed
+     * {@link AppSearchSession#setSchemaAsync}, documents under the old version won't be removed
      * unless you use the same document ID.
      *
      * <p>This method will be invoked on the background worker thread.
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/PackageIdentifier.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PackageIdentifier.java
index 4a8402d..a7301f5 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/PackageIdentifier.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PackageIdentifier.java
@@ -19,6 +19,7 @@
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appsearch.util.BundleUtil;
 import androidx.core.util.Preconditions;
@@ -75,7 +76,7 @@
     }
 
     @Override
-    public boolean equals(Object obj) {
+    public boolean equals(@Nullable Object obj) {
         if (this == obj) {
             return true;
         }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyPath.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyPath.java
new file mode 100644
index 0000000..c451624
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyPath.java
@@ -0,0 +1,336 @@
+/*
+ * Copyright 2022 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.appsearch.app;
+
+import android.annotation.SuppressLint;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.util.ObjectsCompat;
+import androidx.core.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Represents a property path returned from searching the AppSearch Database.
+ *
+ * <p> When searching the AppSearch Database, you will get back {@link SearchResult.MatchInfo}
+ * objects that contain a property path signifying the location of a match within the database.
+ * This is a string that may look something like "foo.bar[0]". {@link PropertyPath} parses this
+ * string and breaks it up into a List of {@link PathSegment}s. These may represent either a
+ * property or a property and a 0-based index into the property. For instance, "foo.bar[1]" would
+ * be parsed into a {@link PathSegment} with a property name of foo and a {@link PathSegment}
+ * with a property name of bar and an index of 1. This allows for easier manipulation of the
+ * property path.
+ *
+ * <p> This class won't perform any retrievals, it will only parse the path string. As such, it
+ * may not necessarily refer to a valid path in the database.
+ *
+ * @see SearchResult.MatchInfo
+ */
+public class PropertyPath implements Iterable<PropertyPath.PathSegment> {
+    private final List<PathSegment> mPathList;
+
+    /**
+     * Constructor directly accepting a path list
+     * @param pathList a list of PathSegments
+     */
+    public PropertyPath(@NonNull List<PathSegment> pathList) {
+        mPathList = new ArrayList<>(pathList);
+    }
+
+    /**
+     * Constructor that parses a string representing the path to populate a List of PathSegments
+     * @param path the string to be validated and parsed into PathSegments
+     * @throws IllegalArgumentException when the path is invalid or malformed
+     */
+    public PropertyPath(@NonNull String path) {
+        Preconditions.checkNotNull(path);
+        mPathList = new ArrayList<>();
+        try {
+            recursivePathScan(path);
+        } catch (IllegalArgumentException e) {
+            // Throw the entire path in a new exception, recursivePathScan may only know about part
+            // of the path.
+            throw new IllegalArgumentException(e.getMessage() + ": " + path);
+        }
+    }
+
+    private void recursivePathScan(String path) throws IllegalArgumentException {
+        // Determine whether the path is just a raw property name with no control characters
+        int controlPos = -1;
+        boolean controlIsIndex = false;
+        for (int i = 0; i < path.length(); i++) {
+            char c = path.charAt(i);
+            if (c == ']') {
+                throw new IllegalArgumentException("Malformed path (no starting '[')");
+            }
+            if (c == '[' || c == '.') {
+                controlPos = i;
+                controlIsIndex = c == '[';
+                break;
+            }
+        }
+
+        if (controlPos == 0 || path.isEmpty()) {
+            throw new IllegalArgumentException("Malformed path (blank property name)");
+        }
+
+        // If the path has no further elements, we're done.
+        if (controlPos == -1) {
+            // The property's cardinality may be REPEATED, but this path isn't indexing into it
+            mPathList.add(new PathSegment(path, PathSegment.NON_REPEATED_CARDINALITY));
+            return;
+        }
+
+        String remainingPath;
+        if (!controlIsIndex) {
+            String propertyName = path.substring(0, controlPos);
+            // Remaining path is everything after the .
+            remainingPath = path.substring(controlPos + 1);
+            mPathList.add(new PathSegment(propertyName, PathSegment.NON_REPEATED_CARDINALITY));
+        } else {
+            remainingPath = consumePropertyWithIndex(path, controlPos);
+            // No more path remains, we have nothing to recurse into
+            if (remainingPath == null) {
+                return;
+            }
+        }
+
+        // More of the path remains; recursively evaluate it
+        recursivePathScan(remainingPath);
+    }
+
+    /**
+     * Helper method to parse the parts of the path String that signify indices with square brackets
+     *
+     * <p>For example, when parsing the path "foo[3]", this will be used to parse the "[3]" part of
+     * the path to determine the index into the preceding "foo" property.
+     * @param path the string we are parsing
+     * @param controlPos the position of the start bracket
+     * @return the rest of the path after the end brackets, or null if there is nothing after them
+     */
+    @Nullable
+    private String consumePropertyWithIndex(@NonNull String path, int controlPos) {
+        Preconditions.checkNotNull(path);
+        String propertyName = path.substring(0, controlPos);
+        int endBracketIdx = path.indexOf(']', controlPos);
+        if (endBracketIdx == -1) {
+            throw new IllegalArgumentException("Malformed path (no ending ']')");
+        }
+        if (endBracketIdx + 1 < path.length() && path.charAt(endBracketIdx + 1) != '.') {
+            throw new IllegalArgumentException(
+                    "Malformed path (']' not followed by '.'): " + path);
+        }
+        String indexStr = path.substring(controlPos + 1, endBracketIdx);
+        int index;
+        try {
+            index = Integer.parseInt(indexStr);
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException(
+                    "Malformed path (\"" + indexStr + "\" as path index)");
+        }
+        if (index < 0) {
+            throw new IllegalArgumentException("Malformed path (path index less than 0)");
+        }
+        mPathList.add(new PathSegment(propertyName, index));
+        // Remaining path is everything after the [n]
+        if (endBracketIdx + 1 < path.length()) {
+            // More path remains, and we've already checked that charAt(endBracketIdx+1) == .
+            return path.substring(endBracketIdx + 2);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Returns the {@link PathSegment} at a specified index of the PropertyPath.
+     *
+     * <p> Calling {@code get(1)} on a {@link PropertyPath} representing "foo.bar[1]" will return
+     * a {@link PathSegment} representing "bar[1]". {@link PathSegment}s both with and without a
+     * property index of {@link PathSegment#NON_REPEATED_CARDINALITY} are retrieved the same.
+     * @param index the position into the PropertyPath
+     * @throws ArrayIndexOutOfBoundsException if index is not a valid index in the path list
+     */
+    // Allow use of the Kotlin indexing operator
+    @SuppressWarnings("KotlinOperator")
+    @SuppressLint("KotlinOperator")
+    @NonNull
+    public PathSegment get(int index) {
+        return mPathList.get(index);
+    }
+
+    /**
+     * Returns the number of {@link PathSegment}s in the PropertyPath.
+     *
+     * <p> Paths representing "foo.bar" and "foo[1].bar[1]" will have the same size, as a property
+     * and an index into that property are stored in one {@link PathSegment}.
+     */
+    public int size() {
+        return mPathList.size();
+    }
+
+    /** Returns a valid path string representing this PropertyPath */
+    @Override
+    @NonNull
+    public String toString() {
+        StringBuilder result = new StringBuilder();
+        for (int i = 0; i < mPathList.size(); i++) {
+            result.append(get(i).toString());
+            if (i < mPathList.size() - 1) {
+                result.append('.');
+            }
+        }
+
+        return result.toString();
+    }
+
+    /** Returns an iterator over the PathSegments within the PropertyPath */
+    @NonNull
+    @Override
+    public Iterator<PathSegment> iterator() {
+        return mPathList.iterator();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null) return false;
+        if (!(o instanceof PropertyPath)) return false;
+        PropertyPath that = (PropertyPath) o;
+        return ObjectsCompat.equals(mPathList, that.mPathList);
+    }
+
+    @Override
+    public int hashCode() {
+        return ObjectsCompat.hash(mPathList);
+    }
+
+    /**
+     * A segment of a PropertyPath, which includes the name of the property and a 0-based index
+     * into this property.
+     *
+     * <p> If the property index is not set to {@link #NON_REPEATED_CARDINALITY}, this represents a
+     * schema property with the "repeated" cardinality, or a path like "foo[1]". Otherwise, this
+     * represents a schema property that could have any cardinality, or a path like "foo".
+     */
+    public static class PathSegment {
+        /**
+         * A marker variable to signify that a PathSegment represents a schema property that isn't
+         * indexed into. The value is chosen to be invalid if used as an array index.
+         */
+        public static final int NON_REPEATED_CARDINALITY = -1;
+
+        @NonNull private final String mPropertyName;
+        private final int mPropertyIndex;
+
+        /**
+         * Creation method that accepts and validates both a property name and the index into the
+         * property.
+         *
+         * <p> The property name may not be blank. It also may not contain square brackets or
+         * dots, as they are control characters in property paths. The index into the property
+         * may not be negative, unless it is {@link #NON_REPEATED_CARDINALITY}, as these are
+         * invalid array indices.
+         * @param propertyName the name of the property
+         * @param propertyIndex the index into the property
+         * @return A new PathSegment
+         * @throws an {@link IllegalArgumentException} if the property name or index is invalid.
+         */
+        @NonNull
+        public static PathSegment create(@NonNull String propertyName, int propertyIndex) {
+            ObjectsCompat.requireNonNull(propertyName);
+            // A path may contain control characters, but a PathSegment may not
+            if (propertyName.isEmpty() || propertyName.contains("[") || propertyName.contains("]")
+                    || propertyName.contains(".")) {
+                throw new IllegalArgumentException("Invalid propertyName value:" + propertyName);
+            }
+            // Has to be a positive integer or the special marker
+            if (propertyIndex < 0 && propertyIndex != NON_REPEATED_CARDINALITY) {
+                throw new IllegalArgumentException("Invalid propertyIndex value:" + propertyIndex);
+            }
+            return new PathSegment(propertyName, propertyIndex);
+        }
+
+        /**
+         * Creation method that accepts and validates a property name
+         *
+         * <p> The property index is set to {@link #NON_REPEATED_CARDINALITY}
+         * @param propertyName the name of the property
+         * @return A new PathSegment
+         */
+        @NonNull
+        public static PathSegment create(@NonNull String propertyName) {
+            return create(ObjectsCompat.requireNonNull(propertyName), NON_REPEATED_CARDINALITY);
+        }
+
+        /**
+         * Package-private constructor that accepts a property name and an index into the
+         * property without validating either of them
+         * @param propertyName the name of the property
+         * @param propertyIndex the index into the property
+         */
+        PathSegment(@NonNull String propertyName, int propertyIndex) {
+            mPropertyName = ObjectsCompat.requireNonNull(propertyName);
+            mPropertyIndex = propertyIndex;
+        }
+
+        /**
+         * @return the property name
+         */
+        @NonNull
+        public String getPropertyName() {
+            return mPropertyName;
+        }
+
+        /**
+         * Returns the index into the property, or {@link #NON_REPEATED_CARDINALITY} if this does
+         * not represent a PathSegment with an index.
+         */
+        public int getPropertyIndex() {
+            return mPropertyIndex;
+        }
+
+        /** Returns a path representing a PathSegment, either "foo" or "foo[1]" */
+        @Override
+        @NonNull
+        public String toString() {
+            if (mPropertyIndex != NON_REPEATED_CARDINALITY) {
+                return new StringBuilder(mPropertyName)
+                        .append("[").append(mPropertyIndex).append("]").toString();
+            }
+            return mPropertyName;
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null) return false;
+            if (!(o instanceof PathSegment)) return false;
+            PathSegment that = (PathSegment) o;
+            return mPropertyIndex == that.mPropertyIndex
+                    && mPropertyName.equals(that.mPropertyName);
+        }
+
+        @Override
+        public int hashCode() {
+            return ObjectsCompat.hash(mPropertyName, mPropertyIndex);
+        }
+    }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/PutDocumentsRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PutDocumentsRequest.java
index 4d4a000..dff69b2 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/PutDocumentsRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PutDocumentsRequest.java
@@ -37,7 +37,7 @@
  * {@link GenericDocument}.
  * <!--@exportToFramework:else()-->
  *
- * @see AppSearchSession#put
+ * @see AppSearchSession#putAsync
  */
 public final class PutDocumentsRequest {
     private final List<GenericDocument> mDocuments;
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/RemoveByDocumentIdRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/RemoveByDocumentIdRequest.java
index addb96a..38be17a 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/RemoveByDocumentIdRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/RemoveByDocumentIdRequest.java
@@ -29,7 +29,7 @@
  * Encapsulates a request to remove documents by namespace and IDs from the
  * {@link AppSearchSession} database.
  *
- * @see AppSearchSession#remove
+ * @see AppSearchSession#removeAsync
  */
 public final class RemoveByDocumentIdRequest {
     private final String mNamespace;
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportSystemUsageRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportSystemUsageRequest.java
index db26931..12422eb 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportSystemUsageRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportSystemUsageRequest.java
@@ -23,9 +23,9 @@
  * A request to report usage of a document owned by another app from a system UI surface.
  *
  * <p>Usage reported in this way is measured separately from usage reported via
- * {@link AppSearchSession#reportUsage}.
+ * {@link AppSearchSession#reportUsageAsync}.
  *
- * <p>See {@link GlobalSearchSession#reportSystemUsage} for a detailed description of usage
+ * <p>See {@link GlobalSearchSession#reportSystemUsageAsync} for a detailed description of usage
  * reporting.
  */
 public final class ReportSystemUsageRequest {
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportUsageRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportUsageRequest.java
index 25edaf4..14b70c7 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportUsageRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportUsageRequest.java
@@ -22,9 +22,9 @@
 /**
  * A request to report usage of a document.
  *
- * <p>See {@link AppSearchSession#reportUsage} for a detailed description of usage reporting.
+ * <p>See {@link AppSearchSession#reportUsageAsync} for a detailed description of usage reporting.
  *
- * @see AppSearchSession#reportUsage
+ * @see AppSearchSession#reportUsageAsync
  */
 public final class ReportUsageRequest {
     private final String mNamespace;
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResult.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResult.java
index 7350991..74153b5 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResult.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResult.java
@@ -124,10 +124,14 @@
             mMatchInfos = new ArrayList<>(matchBundles.size());
             for (int i = 0; i < matchBundles.size(); i++) {
                 MatchInfo matchInfo = new MatchInfo(matchBundles.get(i), getGenericDocument());
-                mMatchInfos.add(matchInfo);
+                if (mMatchInfos != null) {
+                    // This additional check is added for NullnessChecker.
+                    mMatchInfos.add(matchInfo);
+                }
             }
         }
-        return mMatchInfos;
+        // This check is added for NullnessChecker, mMatchInfos will always be NonNull.
+        return Preconditions.checkNotNull(mMatchInfos);
     }
 
     /**
@@ -268,52 +272,68 @@
     }
 
     /**
-     * This class represents a match objects for any Snippets that might be present in
-     * {@link SearchResults} from query. Using this class
-     * user can get the full text, exact matches and Snippets of document content for a given match.
+     * This class represents match objects for any Snippets that might be present in
+     * {@link SearchResults} from a query. Using this class, the user can get:
+     * <ul>
+     *     <li>the full text - all of the text in that String property</li>
+     *     <li>the exact term match - the 'term' (full word) that matched the query</li>
+     *     <li>the subterm match - the portion of the matched term that appears in the query</li>
+     *     <li>a suggested text snippet - a portion of the full text surrounding the exact term
+     *     match, set to term boundaries. The size of the snippet is specified in
+     *     {@link SearchSpec.Builder#setMaxSnippetSize}</li>
+     * </ul>
+     * for each match in the document.
      *
      * <p>Class Example 1:
-     * A document contains following text in property subject:
-     * <p>A commonly used fake word is foo. Another nonsense word that’s used a lot is bar.
+     * <p>A document contains the following text in property "subject":
+     * <p>"A commonly used fake word is foo. Another nonsense word that’s used a lot is bar."
      *
-     * <p>If the queryExpression is "foo".
-     *
-     * <p>{@link MatchInfo#getPropertyPath()} returns "subject"
-     * <p>{@link MatchInfo#getFullText()} returns "A commonly used fake word is foo. Another
-     * nonsense word that’s used a lot is bar."
-     * <p>{@link MatchInfo#getExactMatchRange()} returns [29, 32]
-     * <p>{@link MatchInfo#getExactMatch()} returns "foo"
-     * <p>{@link MatchInfo#getSubmatchRange()} returns [29, 32]
-     * <p>{@link MatchInfo#getSubmatch()} returns "foo"
-     * <p>{@link MatchInfo#getSnippetRange()} returns [26, 33]
-     * <p>{@link MatchInfo#getSnippet()} returns "is foo."
+     * <p>If the queryExpression is "foo" and {@link SearchSpec#getMaxSnippetSize}  is 10,
+     * <ul>
+     *      <li>{@link MatchInfo#getPropertyPath()} returns "subject"</li>
+     *      <li>{@link MatchInfo#getFullText()} returns "A commonly used fake word is foo. Another
+     * nonsense word that’s used a lot is bar."</li>
+     *      <li>{@link MatchInfo#getExactMatchRange()} returns [29, 32]</li>
+     *      <li>{@link MatchInfo#getExactMatch()} returns "foo"</li>
+     *      <li>{@link MatchInfo#getSubmatchRange()} returns [29, 32]</li>
+     *      <li>{@link MatchInfo#getSubmatch()} returns "foo"</li>
+     *      <li>{@link MatchInfo#getSnippetRange()} returns [26, 33]</li>
+     *      <li>{@link MatchInfo#getSnippet()} returns "is foo."</li>
+     * </ul>
      * <p>
      * <p>Class Example 2:
-     * A document contains a property name sender which contains 2 property names name and email, so
-     * we will have 2 property paths: {@code sender.name} and {@code sender.email}.
-     * <p>Let {@code sender.name = "Test Name Jr."} and
-     * {@code sender.email = "TestNameJr@gmail.com"}
+     * <p>A document contains one property named "subject" and one property named "sender" which
+     * contains a "name" property.
      *
-     * <p>If the queryExpression is "Test". We will have 2 matches.
+     * In this case, we will have 2 property paths: {@code sender.name} and {@code subject}.
+     * <p>Let {@code sender.name = "Test Name Jr."} and
+     * {@code subject = "Testing 1 2 3"}
+     *
+     * <p>If the queryExpression is "Test" with {@link SearchSpec#TERM_MATCH_PREFIX} and
+     * {@link SearchSpec#getMaxSnippetSize} is 10. We will have 2 matches:
      *
      * <p> Match-1
-     * <p>{@link MatchInfo#getPropertyPath()} returns "sender.name"
-     * <p>{@link MatchInfo#getFullText()} returns "Test Name Jr."
-     * <p>{@link MatchInfo#getExactMatchRange()} returns [0, 4]
-     * <p>{@link MatchInfo#getExactMatch()} returns "Test"
-     * <p>{@link MatchInfo#getSubmatchRange()} returns [0, 4]
-     * <p>{@link MatchInfo#getSubmatch()} returns "Test"
-     * <p>{@link MatchInfo#getSnippetRange()} returns [0, 9]
-     * <p>{@link MatchInfo#getSnippet()} returns "Test Name"
+     * <ul>
+     *      <li>{@link MatchInfo#getPropertyPath()} returns "sender.name"</li>
+     *      <li>{@link MatchInfo#getFullText()} returns "Test Name Jr."</li>
+     *      <li>{@link MatchInfo#getExactMatchRange()} returns [0, 4]</li>
+     *      <li>{@link MatchInfo#getExactMatch()} returns "Test"</li>
+     *      <li>{@link MatchInfo#getSubmatchRange()} returns [0, 4]</li>
+     *      <li>{@link MatchInfo#getSubmatch()} returns "Test"</li>
+     *      <li>{@link MatchInfo#getSnippetRange()} returns [0, 9]</li>
+     *      <li>{@link MatchInfo#getSnippet()} returns "Test Name"</li>
+     * </ul>
      * <p> Match-2
-     * <p>{@link MatchInfo#getPropertyPath()} returns "sender.email"
-     * <p>{@link MatchInfo#getFullText()} returns "TestNameJr@gmail.com"
-     * <p>{@link MatchInfo#getExactMatchRange()} returns [0, 20]
-     * <p>{@link MatchInfo#getExactMatch()} returns "TestNameJr@gmail.com"
-     * <p>{@link MatchInfo#getSubmatchRange()} returns [0, 4]
-     * <p>{@link MatchInfo#getSubmatch()} returns "Test"
-     * <p>{@link MatchInfo#getSnippetRange()} returns [0, 20]
-     * <p>{@link MatchInfo#getSnippet()} returns "TestNameJr@gmail.com"
+     * <ul>
+     *      <li>{@link MatchInfo#getPropertyPath()} returns "subject"</li>
+     *      <li>{@link MatchInfo#getFullText()} returns "Testing 1 2 3"</li>
+     *      <li>{@link MatchInfo#getExactMatchRange()} returns [0, 7]</li>
+     *      <li>{@link MatchInfo#getExactMatch()} returns "Testing"</li>
+     *      <li>{@link MatchInfo#getSubmatchRange()} returns [0, 4]</li>
+     *      <li>{@link MatchInfo#getSubmatch()} returns "Test"</li>
+     *      <li>{@link MatchInfo#getSnippetRange()} returns [0, 9]</li>
+     *      <li>{@link MatchInfo#getSnippet()} returns "Testing 1"</li>
+     * </ul>
      */
     public static final class MatchInfo {
         /** The path of the matching snippet property. */
@@ -326,6 +346,8 @@
         private static final String SNIPPET_RANGE_UPPER_FIELD = "snippetRangeUpper";
 
         private final String mPropertyPath;
+        @Nullable
+        private PropertyPath mPropertyPathObject = null;
         final Bundle mBundle;
 
         /**
@@ -377,16 +399,40 @@
         }
 
         /**
+         * Gets a {@link PropertyPath} object representing the property path corresponding to the
+         * given entry.
+         *
+         * <p> Methods such as {@link GenericDocument#getPropertyDocument} accept a path as a
+         * string rather than a {@link PropertyPath} object. However, you may want to manipulate
+         * the path before getting a property document. This method returns a {@link PropertyPath}
+         * rather than a String for easier path manipulation, which can then be converted to a
+         * String.
+         *
+         * @see #getPropertyPath
+         * @see PropertyPath
+         */
+        @NonNull
+        public PropertyPath getPropertyPathObject() {
+            if (mPropertyPathObject == null) {
+                mPropertyPathObject = new PropertyPath(mPropertyPath);
+            }
+            return mPropertyPathObject;
+        }
+
+        /**
          * Gets the full text corresponding to the given entry.
-         * <p>For class example this returns "A commonly used fake word is foo. Another nonsense
+         * <p>Class example 1: this returns "A commonly used fake word is foo. Another nonsense
          * word that's used a lot is bar."
+         * <p>Class example 2: for the first {@link MatchInfo}, this returns "Test Name Jr." and,
+         * for the second {@link MatchInfo}, this returns "Testing 1 2 3".
          */
         @NonNull
         public String getFullText() {
             if (mFullText == null) {
-                Preconditions.checkState(
-                        mDocument != null,
-                        "Document has not been populated; this MatchInfo cannot be used yet");
+                if (mDocument == null) {
+                    throw new IllegalStateException(
+                    "Document has not been populated; this MatchInfo cannot be used yet");
+                }
                 mFullText = getPropertyValues(mDocument, mPropertyPath);
             }
             return mFullText;
@@ -396,7 +442,7 @@
          * Gets the {@link MatchRange} of the exact term of the given entry that matched the query.
          * <p>Class example 1: this returns [29, 32].
          * <p>Class example 2: for the first {@link MatchInfo}, this returns [0, 4] and, for the
-         * second {@link MatchInfo}, this returns [0, 20].
+         * second {@link MatchInfo}, this returns [0, 7].
          */
         @NonNull
         public MatchRange getExactMatchRange() {
@@ -412,7 +458,7 @@
          * Gets the exact term of the given entry that matched the query.
          * <p>Class example 1: this returns "foo".
          * <p>Class example 2: for the first {@link MatchInfo}, this returns "Test" and, for the
-         * second {@link MatchInfo}, this returns "TestNameJr@gmail.com".
+         * second {@link MatchInfo}, this returns "Testing".
          */
         @NonNull
         public CharSequence getExactMatch() {
@@ -481,7 +527,7 @@
          * {@link SearchSpec.Builder#setMaxSnippetSize}.
          * <p>Class example 1: this returns [29, 41].
          * <p>Class example 2: for the first {@link MatchInfo}, this returns [0, 9] and, for the
-         * second {@link MatchInfo}, this returns [0, 20].
+         * second {@link MatchInfo}, this returns [0, 13].
          */
         @NonNull
         public MatchRange getSnippetRange() {
@@ -501,7 +547,7 @@
          * the matched token with content on either side clipped to token boundaries.
          * <p>Class example 1: this returns "foo. Another".
          * <p>Class example 2: for the first {@link MatchInfo}, this returns "Test Name" and, for
-         * the second {@link MatchInfo}, this returns "TestNameJr@gmail.com".
+         * the second {@link MatchInfo}, this returns "Testing 1 2 3".
          */
         @NonNull
         public CharSequence getSnippet() {
@@ -522,9 +568,6 @@
 
         /** Extracts the matching string from the document. */
         private static String getPropertyValues(GenericDocument document, String propertyName) {
-            // In IcingLib snippeting is available for only 3 data types i.e String, double and
-            // long, so we need to check which of these three are requested.
-            // TODO (tytytyww): support double[] and long[].
             String result = document.getPropertyString(propertyName);
             if (result == null) {
                 throw new IllegalStateException(
@@ -589,8 +632,14 @@
                 if (mSubmatchRange != null) {
                     // Only populate the submatch fields if it was actually set.
                     bundle.putInt(MatchInfo.SUBMATCH_RANGE_LOWER_FIELD, mSubmatchRange.getStart());
+                }
+
+                if (mSubmatchRange != null) {
+                    // Only populate the submatch fields if it was actually set.
+                    // Moved to separate block for Nullness Checker.
                     bundle.putInt(MatchInfo.SUBMATCH_RANGE_UPPER_FIELD, mSubmatchRange.getEnd());
                 }
+
                 bundle.putInt(MatchInfo.SNIPPET_RANGE_LOWER_FIELD, mSnippetRange.getStart());
                 bundle.putInt(MatchInfo.SNIPPET_RANGE_UPPER_FIELD, mSnippetRange.getEnd());
                 return new MatchInfo(bundle, /*document=*/ null);
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResults.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResults.java
index 6bf301f..23b6b5d 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResults.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResults.java
@@ -30,7 +30,7 @@
  * objects, referred to as a "page", limited by the size configured by
  * {@link SearchSpec.Builder#setResultCountPerPage}.
  *
- * <p>To fetch a page of results, call {@link #getNextPage()}.
+ * <p>To fetch a page of results, call {@link #getNextPageAsync()}.
  *
  * <p>All instances of {@link SearchResults} must call {@link SearchResults#close()} after the
  * results are fetched.
@@ -50,7 +50,18 @@
      * objects.
      */
     @NonNull
-    ListenableFuture<List<SearchResult>> getNextPage();
+    ListenableFuture<List<SearchResult>> getNextPageAsync();
+
+    /**
+     * @deprecated use {@link #getNextPageAsync}.
+     * @return a {@link ListenableFuture} which resolves to a list of {@link SearchResult}
+     * objects.
+     */
+    @NonNull
+    @Deprecated
+    default ListenableFuture<List<SearchResult>> getNextPage() {
+        return getNextPageAsync();
+    }
 
     @Override
     void close();
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java
index 756cddf..0adbf62 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java
@@ -43,7 +43,6 @@
  * This class represents the specification logic for AppSearch. It can be used to set the type of
  * search, like prefix or exact only or apply filters to search for a specific schema type only etc.
  */
-// TODO(sidchhabra) : AddResultSpec fields for Snippets etc.
 public final class SearchSpec {
     /**
      * Schema type to be used in {@link SearchSpec.Builder#addProjection} to apply
@@ -297,11 +296,13 @@
      */
     @NonNull
     public Map<String, List<String>> getProjections() {
-        Bundle typePropertyPathsBundle = mBundle.getBundle(PROJECTION_TYPE_PROPERTY_PATHS_FIELD);
+        Bundle typePropertyPathsBundle = Preconditions.checkNotNull(
+                mBundle.getBundle(PROJECTION_TYPE_PROPERTY_PATHS_FIELD));
         Set<String> schemas = typePropertyPathsBundle.keySet();
         Map<String, List<String>> typePropertyPathsMap = new ArrayMap<>(schemas.size());
         for (String schema : schemas) {
-            typePropertyPathsMap.put(schema, typePropertyPathsBundle.getStringArrayList(schema));
+            typePropertyPathsMap.put(schema, Preconditions.checkNotNull(
+                    typePropertyPathsBundle.getStringArrayList(schema)));
         }
         return typePropertyPathsMap;
     }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionResult.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionResult.java
new file mode 100644
index 0000000..923c1e3
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionResult.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2022 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.appsearch.app;
+
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.util.BundleUtil;
+import androidx.core.util.Preconditions;
+
+/**
+ * The result class of the {@link AppSearchSession#searchSuggestionAsync}.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class SearchSuggestionResult {
+
+    private static final String SUGGESTED_RESULT_FIELD = "suggestedResult";
+    private final Bundle mBundle;
+    @Nullable
+    private Integer mHashCode;
+
+    SearchSuggestionResult(@NonNull Bundle bundle) {
+        mBundle = Preconditions.checkNotNull(bundle);
+    }
+
+    /**
+     * Returns the {@link Bundle} populated by this builder.
+     *
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @NonNull
+    public Bundle getBundle() {
+        return mBundle;
+    }
+
+    /**
+     * Returns the suggested result that could be used as query expression in the
+     * {@link AppSearchSession#search}.
+     *
+     * <p>The suggested result will never be empty.
+     *
+     * <p>The suggested result only contains lowercase or special characters.
+     */
+    @NonNull
+    public String getSuggestedResult() {
+        return Preconditions.checkNotNull(mBundle.getString(SUGGESTED_RESULT_FIELD));
+    }
+
+    @Override
+    public boolean equals(@Nullable Object other) {
+        if (this == other) {
+            return true;
+        }
+        if (!(other instanceof SearchSuggestionResult)) {
+            return false;
+        }
+        SearchSuggestionResult otherResult = (SearchSuggestionResult) other;
+        return BundleUtil.deepEquals(this.mBundle, otherResult.mBundle);
+    }
+
+    @Override
+    public int hashCode() {
+        if (mHashCode == null) {
+            mHashCode = BundleUtil.deepHashCode(mBundle);
+        }
+        return mHashCode;
+    }
+
+    /** The Builder class of {@link SearchSuggestionResult}. */
+    public static final class Builder {
+        private String mSuggestedResult = "";
+
+        /**
+         * Sets the suggested result that could be used as query expression in the
+         * {@link AppSearchSession#search}.
+         *
+         * <p>The suggested result should only contain lowercase or special characters.
+         */
+        @NonNull
+        public Builder setSuggestedResult(@NonNull String suggestedResult) {
+            Preconditions.checkNotNull(suggestedResult);
+            Preconditions.checkStringNotEmpty(suggestedResult);
+            mSuggestedResult = suggestedResult;
+            return this;
+        }
+
+        /** Build a {@link SearchSuggestionResult} object*/
+        @NonNull
+        public SearchSuggestionResult build() {
+            Bundle bundle = new Bundle();
+            bundle.putString(SUGGESTED_RESULT_FIELD, mSuggestedResult);
+            return new SearchSuggestionResult(bundle);
+        }
+    }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionSpec.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionSpec.java
new file mode 100644
index 0000000..865cd89
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionSpec.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2022 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.appsearch.app;
+import android.os.Bundle;
+
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.core.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * This class represents the specification logic for AppSearch. It can be used to set the filter
+ * and settings of search a suggestions.
+ *
+ * @see AppSearchSession#searchSuggestionAsync(String, SearchSuggestionSpec)
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class SearchSuggestionSpec {
+    static final String NAMESPACE_FIELD = "namespace";
+    static final String MAXIMUM_RESULT_COUNT_FIELD = "maximumResultCount";
+
+    private final Bundle mBundle;
+    private final int mMaximumResultCount;
+
+    /** @hide */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public SearchSuggestionSpec(@NonNull Bundle bundle) {
+        Preconditions.checkNotNull(bundle);
+        mBundle = bundle;
+        mMaximumResultCount = bundle.getInt(MAXIMUM_RESULT_COUNT_FIELD);
+        Preconditions.checkArgument(mMaximumResultCount >= 1,
+                "MaximumResultCount must be positive.");
+    }
+
+    /**
+     * Returns the {@link Bundle} populated by this builder.
+     *
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @NonNull
+    public Bundle getBundle() {
+        return mBundle;
+    }
+
+    /**
+     * Returns the maximum number of wanted suggestion that will be returned in the result object.
+     */
+    public int getMaximumResultCount() {
+        return mMaximumResultCount;
+    }
+
+    /**
+     * Returns the list of namespaces to search over.
+     *
+     * <p>If empty, will search over all namespaces.
+     */
+    @NonNull
+    public List<String> getFilterNamespaces() {
+        List<String> namespaces = mBundle.getStringArrayList(NAMESPACE_FIELD);
+        if (namespaces == null) {
+            return Collections.emptyList();
+        }
+        return Collections.unmodifiableList(namespaces);
+    }
+
+    /** Builder for {@link SearchSuggestionSpec objects}. */
+    public static final class Builder {
+        private ArrayList<String> mNamespaces = new ArrayList<>();
+        private final int mTotalResultCount;
+        private boolean mBuilt = false;
+
+        /**
+         * Creates an {@link SearchSuggestionSpec.Builder} object.
+         *
+         * @param maximumResultCount Sets the maximum number of suggestion in the returned object.
+         */
+        public Builder(@IntRange(from = 1) int maximumResultCount) {
+            Preconditions.checkArgument(maximumResultCount >= 1,
+                    "maximumResultCount must be positive.");
+            mTotalResultCount = maximumResultCount;
+        }
+
+        /**
+         * Adds a namespace filter to {@link SearchSuggestionSpec} Entry. Only search for
+         * suggestions that has documents under the specified namespaces.
+         *
+         * <p>If unset, the query will search over all namespaces.
+         */
+        @NonNull
+        public Builder addFilterNamespaces(@NonNull String... namespaces) {
+            Preconditions.checkNotNull(namespaces);
+            resetIfBuilt();
+            return addFilterNamespaces(Arrays.asList(namespaces));
+        }
+
+        /**
+         * Adds a namespace filter to {@link SearchSuggestionSpec} Entry. Only search for
+         * suggestions that has documents under the specified namespaces.
+         *
+         * <p>If unset, the query will search over all namespaces.
+         */
+        @NonNull
+        public Builder addFilterNamespaces(@NonNull Collection<String> namespaces) {
+            Preconditions.checkNotNull(namespaces);
+            resetIfBuilt();
+            mNamespaces.addAll(namespaces);
+            return this;
+        }
+
+        /** Constructs a new {@link SearchSpec} from the contents of this builder. */
+        @NonNull
+        public SearchSuggestionSpec build() {
+            Bundle bundle = new Bundle();
+            bundle.putStringArrayList(NAMESPACE_FIELD, mNamespaces);
+            bundle.putInt(MAXIMUM_RESULT_COUNT_FIELD, mTotalResultCount);
+            mBuilt = true;
+            return new SearchSuggestionSpec(bundle);
+        }
+
+        private void resetIfBuilt() {
+            if (mBuilt) {
+                mNamespaces = new ArrayList<>(mNamespaces);
+                mBuilt = false;
+            }
+        }
+    }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java
index e09eec9..52e953a 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java
@@ -18,14 +18,18 @@
 
 import android.annotation.SuppressLint;
 
+import androidx.annotation.IntDef;
 import androidx.annotation.IntRange;
 import androidx.annotation.NonNull;
+import androidx.annotation.RequiresFeature;
 import androidx.annotation.RestrictTo;
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.collection.ArrayMap;
 import androidx.collection.ArraySet;
 import androidx.core.util.Preconditions;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -76,13 +80,105 @@
  *         will be set into both {@link SetSchemaResponse#getIncompatibleTypes()} and
  *         {@link SetSchemaResponse#getMigratedTypes()}. See the migration section below.
  * </ul>
- * @see AppSearchSession#setSchema
+ * @see AppSearchSession#setSchemaAsync
  * @see Migrator
  */
 public final class SetSchemaRequest {
+
+    /**
+     * List of Android Permission are supported in
+     * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+     *
+     * @see android.Manifest.permission
+     * @hide
+     */
+    @IntDef(value = {
+            READ_SMS,
+            READ_CALENDAR,
+            READ_CONTACTS,
+            READ_EXTERNAL_STORAGE,
+            READ_HOME_APP_SEARCH_DATA,
+            READ_ASSISTANT_APP_SEARCH_DATA,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+    // @exportToFramework:endStrip()
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public @interface AppSearchSupportedPermission {}
+
+    /**
+     * The {@link android.Manifest.permission#READ_SMS} AppSearch supported in
+     * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+     */
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+    // @exportToFramework:endStrip()
+    public static final int READ_SMS = 1;
+
+    /**
+     * The {@link android.Manifest.permission#READ_CALENDAR} AppSearch supported in
+     * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+     */
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+    // @exportToFramework:endStrip()
+    public static final int READ_CALENDAR = 2;
+
+    /**
+     * The {@link android.Manifest.permission#READ_CONTACTS} AppSearch supported in
+     * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+     */
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+    // @exportToFramework:endStrip()
+    public static final int READ_CONTACTS = 3;
+
+    /**
+     * The {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} AppSearch supported in
+     * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+     */
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+    // @exportToFramework:endStrip()
+    public static final int READ_EXTERNAL_STORAGE = 4;
+
+    /**
+     * The {@link android.Manifest.permission#READ_HOME_APP_SEARCH_DATA} AppSearch supported in
+     * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+     */
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+    // @exportToFramework:endStrip()
+    public static final int READ_HOME_APP_SEARCH_DATA = 5;
+
+    /**
+     * The {@link android.Manifest.permission#READ_ASSISTANT_APP_SEARCH_DATA} AppSearch supported in
+     * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+     */
+    // @exportToFramework:startStrip()
+    @RequiresFeature(
+            enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+            name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+    // @exportToFramework:endStrip()
+    public static final int READ_ASSISTANT_APP_SEARCH_DATA = 6;
+
     private final Set<AppSearchSchema> mSchemas;
     private final Set<String> mSchemasNotDisplayedBySystem;
     private final Map<String, Set<PackageIdentifier>> mSchemasVisibleToPackages;
+    private final Map<String, Set<Set<Integer>>> mSchemasVisibleToPermissions;
     private final Map<String, Migrator> mMigrators;
     private final boolean mForceOverride;
     private final int mVersion;
@@ -90,12 +186,14 @@
     SetSchemaRequest(@NonNull Set<AppSearchSchema> schemas,
             @NonNull Set<String> schemasNotDisplayedBySystem,
             @NonNull Map<String, Set<PackageIdentifier>> schemasVisibleToPackages,
+            @NonNull Map<String, Set<Set<Integer>>> schemasVisibleToPermissions,
             @NonNull Map<String, Migrator> migrators,
             boolean forceOverride,
             int version) {
         mSchemas = Preconditions.checkNotNull(schemas);
         mSchemasNotDisplayedBySystem = Preconditions.checkNotNull(schemasNotDisplayedBySystem);
         mSchemasVisibleToPackages = Preconditions.checkNotNull(schemasVisibleToPackages);
+        mSchemasVisibleToPermissions = Preconditions.checkNotNull(schemasVisibleToPermissions);
         mMigrators = Preconditions.checkNotNull(migrators);
         mForceOverride = forceOverride;
         mVersion = version;
@@ -125,13 +223,46 @@
     @NonNull
     public Map<String, Set<PackageIdentifier>> getSchemasVisibleToPackages() {
         Map<String, Set<PackageIdentifier>> copy = new ArrayMap<>();
-        for (String key : mSchemasVisibleToPackages.keySet()) {
-            copy.put(key, new ArraySet<>(mSchemasVisibleToPackages.get(key)));
+        for (Map.Entry<String, Set<PackageIdentifier>> entry :
+                mSchemasVisibleToPackages.entrySet()) {
+            copy.put(entry.getKey(), new ArraySet<>(entry.getValue()));
         }
         return copy;
     }
 
     /**
+     * Returns a mapping of schema types to the Map of {@link android.Manifest.permission}
+     * combinations that querier must hold to access that schema type.
+     *
+     * <p> The querier could read the {@link GenericDocument} objects under the {@code schemaType}
+     * if they holds ALL required permissions of ANY of the individual value sets.
+     *
+     * <p>For example, if the Map contains {@code {% verbatim %}{{permissionA, PermissionB},
+     * {PermissionC, PermissionD}, {PermissionE}}{% endverbatim %}}.
+     * <ul>
+     *     <li>A querier holds both PermissionA and PermissionB has access.</li>
+     *     <li>A querier holds both PermissionC and PermissionD has access.</li>
+     *     <li>A querier holds only PermissionE has access.</li>
+     *     <li>A querier holds both PermissionA and PermissionE has access.</li>
+     *     <li>A querier holds only PermissionA doesn't have access.</li>
+     *     <li>A querier holds both PermissionA and PermissionC doesn't have access.</li>
+     * </ul>
+     *
+     * <p>It’s inefficient to call this method repeatedly.
+     *
+     * @return The map contains schema type and all combinations of required permission for querier
+     *         to access it. The supported Permission are {@link SetSchemaRequest#READ_SMS},
+     *         {@link SetSchemaRequest#READ_CALENDAR}, {@link SetSchemaRequest#READ_CONTACTS},
+     *         {@link SetSchemaRequest#READ_EXTERNAL_STORAGE},
+     *         {@link SetSchemaRequest#READ_HOME_APP_SEARCH_DATA} and
+     *         {@link SetSchemaRequest#READ_ASSISTANT_APP_SEARCH_DATA}.
+     */
+    @NonNull
+    public Map<String, Set<Set<Integer>>> getRequiredPermissionsForSchemaTypeVisibility() {
+        return deepCopy(mSchemasVisibleToPermissions);
+    }
+
+    /**
      * Returns the map of {@link Migrator}, the key will be the schema type of the
      * {@link Migrator} associated with.
      */
@@ -174,6 +305,7 @@
         private ArraySet<String> mSchemasNotDisplayedBySystem = new ArraySet<>();
         private ArrayMap<String, Set<PackageIdentifier>> mSchemasVisibleToPackages =
                 new ArrayMap<>();
+        private ArrayMap<String, Set<Set<Integer>>> mSchemasVisibleToPermissions = new ArrayMap<>();
         private ArrayMap<String, Migrator> mMigrators = new ArrayMap<>();
         private boolean mForceOverride = false;
         private int mVersion = DEFAULT_VERSION;
@@ -255,7 +387,7 @@
          * and visible on any system UI surface.
          *
          * <p>This setting applies to the provided {@code schemaType} only, and does not persist
-         * across {@link AppSearchSession#setSchema} calls.
+         * across {@link AppSearchSession#setSchemaAsync} calls.
          *
          * <p>The default behavior, if this method is not called, is to allow types to be
          * displayed on system UI surfaces.
@@ -280,6 +412,72 @@
         }
 
         /**
+         * Adds a set of required Android {@link android.Manifest.permission} combination to the
+         * given schema type.
+         *
+         * <p> If the querier holds ALL of the required permissions in this combination, they will
+         * have access to read {@link GenericDocument} objects of the given schema type.
+         *
+         * <p> You can call this method to add multiple permission combinations, and the querier
+         * will have access if they holds ANY of the combinations.
+         *
+         * <p>The supported Permissions are {@link #READ_SMS}, {@link #READ_CALENDAR},
+         * {@link #READ_CONTACTS}, {@link #READ_EXTERNAL_STORAGE},
+         * {@link #READ_HOME_APP_SEARCH_DATA} and {@link #READ_ASSISTANT_APP_SEARCH_DATA}.
+         *
+         * @see android.Manifest.permission#READ_SMS
+         * @see android.Manifest.permission#READ_CALENDAR
+         * @see android.Manifest.permission#READ_CONTACTS
+         * @see android.Manifest.permission#READ_EXTERNAL_STORAGE
+         * @see android.Manifest.permission#READ_HOME_APP_SEARCH_DATA
+         * @see android.Manifest.permission#READ_ASSISTANT_APP_SEARCH_DATA
+         * @param schemaType       The schema type to set visibility on.
+         * @param permissions      A set of required Android permissions the caller need to hold
+         *                         to access {@link GenericDocument} objects that under the given
+         *                         schema.
+         * @throws IllegalArgumentException – if input unsupported permission.
+         */
+        // Merged list available from getRequiredPermissionsForSchemaTypeVisibility
+        @SuppressLint("MissingGetterMatchingBuilder")
+        // @exportToFramework:startStrip()
+        @RequiresFeature(
+                enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+                name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+        // @exportToFramework:endStrip()
+        @NonNull
+        public Builder addRequiredPermissionsForSchemaTypeVisibility(@NonNull String schemaType,
+                @AppSearchSupportedPermission @NonNull Set<Integer> permissions) {
+            Preconditions.checkNotNull(schemaType);
+            Preconditions.checkNotNull(permissions);
+            for (int permission : permissions) {
+                Preconditions.checkArgumentInRange(permission, READ_SMS,
+                        READ_ASSISTANT_APP_SEARCH_DATA, "permission");
+            }
+            resetIfBuilt();
+            Set<Set<Integer>> visibleToPermissions = mSchemasVisibleToPermissions.get(schemaType);
+            if (visibleToPermissions == null) {
+                visibleToPermissions = new ArraySet<>();
+                mSchemasVisibleToPermissions.put(schemaType, visibleToPermissions);
+            }
+            visibleToPermissions.add(permissions);
+            return this;
+        }
+
+        /**  Clears all required permissions combinations for the given schema type.  */
+        // @exportToFramework:startStrip()
+        @RequiresFeature(
+                enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+                name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+        // @exportToFramework:endStrip()
+        @NonNull
+        public Builder clearRequiredPermissionsForSchemaTypeVisibility(@NonNull String schemaType) {
+            Preconditions.checkNotNull(schemaType);
+            resetIfBuilt();
+            mSchemasVisibleToPermissions.remove(schemaType);
+            return this;
+        }
+
+        /**
          * Sets whether or not documents from the provided {@code schemaType} can be read by the
          * specified package.
          *
@@ -353,7 +551,7 @@
          *
          * @see SetSchemaRequest.Builder#setVersion
          * @see SetSchemaRequest.Builder#addSchemas
-         * @see AppSearchSession#setSchema
+         * @see AppSearchSession#setSchemaAsync
          */
         @NonNull
         @SuppressLint("MissingGetterMatchingBuilder")        // Getter return plural objects.
@@ -388,7 +586,7 @@
          *
          * @see SetSchemaRequest.Builder#setVersion
          * @see SetSchemaRequest.Builder#addSchemas
-         * @see AppSearchSession#setSchema
+         * @see AppSearchSession#setSchemaAsync
          */
         @NonNull
         public Builder setMigrators(@NonNull Map<String, Migrator> migrators) {
@@ -406,7 +604,7 @@
          * visible on any system UI surface.
          *
          * <p>This setting applies to the provided {@link androidx.appsearch.annotation.Document}
-         * annotated class only, and does not persist across {@link AppSearchSession#setSchema}
+         * annotated class only, and does not persist across {@link AppSearchSession#setSchemaAsync}
          * calls.
          *
          * <p>The default behavior, if this method is not called, is to allow types to be
@@ -469,6 +667,66 @@
             return setSchemaTypeVisibilityForPackage(factory.getSchemaName(), visible,
                     packageIdentifier);
         }
+
+        /**
+         * Adds a set of required Android {@link android.Manifest.permission} combination to the
+         * given schema type.
+         *
+         * <p> If the querier holds ALL of the required permissions in this combination, they will
+         * have access to read {@link GenericDocument} objects of the given schema type.
+         *
+         * <p> You can call this method to add multiple permission combinations, and the querier
+         * will have access if they holds ANY of the combinations.
+         *
+         * <p>The supported Permissions are {@link #READ_SMS}, {@link #READ_CALENDAR},
+         * {@link #READ_CONTACTS}, {@link #READ_EXTERNAL_STORAGE},
+         * {@link #READ_HOME_APP_SEARCH_DATA} and {@link #READ_ASSISTANT_APP_SEARCH_DATA}.
+         *
+         * @see android.Manifest.permission#READ_SMS
+         * @see android.Manifest.permission#READ_CALENDAR
+         * @see android.Manifest.permission#READ_CONTACTS
+         * @see android.Manifest.permission#READ_EXTERNAL_STORAGE
+         * @see android.Manifest.permission#READ_HOME_APP_SEARCH_DATA
+         * @see android.Manifest.permission#READ_ASSISTANT_APP_SEARCH_DATA
+         * @param documentClass    The {@link androidx.appsearch.annotation.Document} class to set
+         *                         visibility on.
+         * @param permissions      A set of required Android permissions the caller need to hold
+         *                         to access {@link GenericDocument} objects that under the given
+         *                         schema.
+         * @throws IllegalArgumentException – if input unsupported permission.
+         */
+        // Merged map available from getRequiredPermissionsForSchemaTypeVisibility
+        @SuppressLint("MissingGetterMatchingBuilder")
+        @RequiresFeature(
+                enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+                name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+        @NonNull
+        public Builder addRequiredPermissionsForDocumentClassVisibility(
+                @NonNull Class<?> documentClass,
+                @AppSearchSupportedPermission @NonNull Set<Integer> permissions)
+                throws AppSearchException {
+            Preconditions.checkNotNull(documentClass);
+            resetIfBuilt();
+            DocumentClassFactoryRegistry registry = DocumentClassFactoryRegistry.getInstance();
+            DocumentClassFactory<?> factory = registry.getOrCreateFactory(documentClass);
+            return addRequiredPermissionsForSchemaTypeVisibility(
+                    factory.getSchemaName(), permissions);
+        }
+
+        /**  Clears all required permissions combinations for the given schema type.  */
+        @RequiresFeature(
+                enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+                name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+        @NonNull
+        public Builder clearRequiredPermissionsForDocumentClassVisibility(
+                @NonNull Class<?> documentClass)
+                throws AppSearchException {
+            Preconditions.checkNotNull(documentClass);
+            resetIfBuilt();
+            DocumentClassFactoryRegistry registry = DocumentClassFactoryRegistry.getInstance();
+            DocumentClassFactory<?> factory = registry.getOrCreateFactory(documentClass);
+            return clearRequiredPermissionsForSchemaTypeVisibility(factory.getSchemaName());
+        }
 // @exportToFramework:endStrip()
 
         /**
@@ -497,7 +755,7 @@
          *
          * <p>Setting a version number that is different from the version number currently stored
          * in AppSearch will result in AppSearch calling the {@link Migrator}s provided to
-         * {@link AppSearchSession#setSchema} to migrate the documents already in AppSearch from
+         * {@link AppSearchSession#setSchemaAsync} to migrate the documents already in AppSearch from
          * the previous version to the one set in this request. The version number can be
          * updated without any other changes to the set of schemas.
          *
@@ -513,7 +771,7 @@
          *
          * @throws IllegalArgumentException if the version is negative.
          *
-         * @see AppSearchSession#setSchema
+         * @see AppSearchSession#setSchemaAsync
          * @see Migrator
          * @see SetSchemaRequest.Builder#setMigrator
          */
@@ -539,6 +797,7 @@
             // Create a copy because we're going to remove from the set for verification purposes.
             Set<String> referencedSchemas = new ArraySet<>(mSchemasNotDisplayedBySystem);
             referencedSchemas.addAll(mSchemasVisibleToPackages.keySet());
+            referencedSchemas.addAll(mSchemasVisibleToPermissions.keySet());
 
             for (AppSearchSchema schema : mSchemas) {
                 referencedSchemas.remove(schema.getSchemaType());
@@ -558,6 +817,7 @@
                     mSchemas,
                     mSchemasNotDisplayedBySystem,
                     mSchemasVisibleToPackages,
+                    mSchemasVisibleToPermissions,
                     mMigrators,
                     mForceOverride,
                     mVersion);
@@ -573,6 +833,8 @@
                 }
                 mSchemasVisibleToPackages = schemasVisibleToPackages;
 
+                mSchemasVisibleToPermissions = deepCopy(mSchemasVisibleToPermissions);
+
                 mSchemas = new ArraySet<>(mSchemas);
                 mSchemasNotDisplayedBySystem = new ArraySet<>(mSchemasNotDisplayedBySystem);
                 mMigrators = new ArrayMap<>(mMigrators);
@@ -580,4 +842,17 @@
             }
         }
     }
+
+    static ArrayMap<String, Set<Set<Integer>>> deepCopy(@NonNull Map<String,
+            Set<Set<Integer>>> original) {
+        ArrayMap<String, Set<Set<Integer>>> copy = new ArrayMap<>(original.size());
+        for (Map.Entry<String, Set<Set<Integer>>> entry : original.entrySet()) {
+            Set<Set<Integer>> valueCopy = new ArraySet<>();
+            for (Set<Integer> innerValue : entry.getValue()) {
+                valueCopy.add(new ArraySet<>(innerValue));
+            }
+            copy.put(entry.getKey(), valueCopy);
+        }
+        return copy;
+    }
 }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaResponse.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaResponse.java
index 88e6645..3f8ce5e 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaResponse.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaResponse.java
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Set;
 
-/** The response class of {@link AppSearchSession#setSchema} */
+/** The response class of {@link AppSearchSession#setSchemaAsync} */
 public class SetSchemaResponse {
 
     private static final String DELETED_TYPES_FIELD = "deletedTypes";
@@ -102,7 +102,7 @@
      *
      * <p>A "deleted" type is a schema type that was previously a part of the database schema but
      * was not present in the {@link SetSchemaRequest} object provided in the
-     * {@link AppSearchSession#setSchema) call.
+     * {@link AppSearchSession#setSchemaAsync} call.
      *
      * <p>Documents for a deleted type are removed from the database.
      */
@@ -117,7 +117,7 @@
 
     /**
      * Returns a {@link Set} of schema type that were migrated by the
-     * {@link AppSearchSession#setSchema} call.
+     * {@link AppSearchSession#setSchemaAsync} call.
      *
      * <p> A "migrated" type is a schema type that has triggered a {@link Migrator} instance to
      * migrate documents of the schema type to another schema type, or to another version of the
@@ -139,13 +139,13 @@
 
     /**
      * Returns a {@link Set} of schema type whose new definitions set in the
-     * {@link AppSearchSession#setSchema} call were incompatible with the pre-existing schema.
+     * {@link AppSearchSession#setSchemaAsync} call were incompatible with the pre-existing schema.
      *
      * <p>If a {@link Migrator} is provided for this type and the migration is success triggered.
      * The type will also appear in {@link #getMigratedTypes()}.
      *
      * @see SetSchemaRequest
-     * @see AppSearchSession#setSchema
+     * @see AppSearchSession#setSchemaAsync
      * @see SetSchemaRequest.Builder#setForceOverride
      */
     @NonNull
@@ -281,7 +281,7 @@
 
     /**
      * The class represents a post-migrated {@link GenericDocument} that failed to be saved by
-     * {@link AppSearchSession#setSchema}.
+     * {@link AppSearchSession#setSchemaAsync}.
      */
     public static class MigrationFailure {
         private static final String SCHEMA_TYPE_FIELD = "schemaType";
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java
new file mode 100644
index 0000000..fd79bd6
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java
@@ -0,0 +1,261 @@
+/*
+ * 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.appsearch.app;
+
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.collection.ArraySet;
+import androidx.core.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Holds the visibility settings that apply to a schema type.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class VisibilityDocument extends GenericDocument {
+    /**
+     * The Schema type for documents that hold AppSearch's metadata, e.g. visibility settings.
+     */
+    public static final String SCHEMA_TYPE = "VisibilityType";
+    /** Namespace of documents that contain visibility settings */
+    public static final String NAMESPACE = "";
+
+    /**
+     * Property that holds the list of platform-hidden schemas, as part of the visibility settings.
+     */
+    private static final String NOT_DISPLAYED_BY_SYSTEM_PROPERTY = "notPlatformSurfaceable";
+
+    /** Property that holds the package name that can access a schema. */
+    private static final String PACKAGE_NAME_PROPERTY = "packageName";
+
+    /** Property that holds the SHA 256 certificate of the app that can access a schema. */
+    private static final String SHA_256_CERT_PROPERTY = "sha256Cert";
+
+    /** Property that holds the required permissions to access the schema. */
+    private static final String PERMISSION_PROPERTY = "permission";
+
+    // The initial schema version, one VisibilityDocument contains all visibility information for
+    // whole package.
+    public static final int SCHEMA_VERSION_DOC_PER_PACKAGE = 0;
+
+    // One VisibilityDocument contains visibility information for a single schema.
+    public static final int SCHEMA_VERSION_DOC_PER_SCHEMA = 1;
+
+    // One VisibilityDocument contains visibility information for a single schema.
+    public static final int SCHEMA_VERSION_NESTED_PERMISSION_SCHEMA = 2;
+
+    public static final int SCHEMA_VERSION_LATEST = SCHEMA_VERSION_NESTED_PERMISSION_SCHEMA;
+
+    /**
+     * Schema for the VisibilityStore's documents.
+     *
+     * <p>NOTE: If you update this, also update {@link #SCHEMA_VERSION_LATEST}.
+     */
+    public static final AppSearchSchema
+            SCHEMA = new AppSearchSchema.Builder(SCHEMA_TYPE)
+            .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+                    NOT_DISPLAYED_BY_SYSTEM_PROPERTY)
+                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+                    .build())
+            .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(PACKAGE_NAME_PROPERTY)
+                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                    .build())
+            .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder(SHA_256_CERT_PROPERTY)
+                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                    .build())
+            .addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(PERMISSION_PROPERTY,
+                    VisibilityPermissionDocument.SCHEMA_TYPE)
+                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                    .build())
+            .build();
+
+    public VisibilityDocument(@NonNull GenericDocument genericDocument) {
+        super(genericDocument);
+    }
+
+    public VisibilityDocument(@NonNull Bundle bundle) {
+        super(bundle);
+    }
+
+    /** Returns whether this schema is visible to the system. */
+    public boolean isNotDisplayedBySystem() {
+        return getPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY);
+    }
+
+    /**
+     * Returns a package name array which could access this schema. Use {@link #getSha256Certs()}
+     * to get package's sha 256 certs. The same index of package names array and sha256Certs array
+     * represents same package.
+     */
+    @NonNull
+    public String[] getPackageNames() {
+        return Preconditions.checkNotNull(getPropertyStringArray(PACKAGE_NAME_PROPERTY));
+    }
+
+    /**
+     * Returns a package sha256Certs array which could access this schema. Use
+     * {@link #getPackageNames()} to get package's name. The same index of package names array
+     * and sha256Certs array represents same package.
+     */
+    @NonNull
+    public byte[][] getSha256Certs() {
+        return Preconditions.checkNotNull(getPropertyBytesArray(SHA_256_CERT_PROPERTY));
+    }
+
+    /**
+     * Returns an array of Android Permissions that caller mush hold to access the schema
+     * this {@link VisibilityDocument} represents.
+     */
+    @Nullable
+    public Set<Set<Integer>> getVisibleToPermissions() {
+        GenericDocument[] permissionDocuments = getPropertyDocumentArray(PERMISSION_PROPERTY);
+        if (permissionDocuments == null) {
+            return Collections.emptySet();
+        }
+        Set<Set<Integer>> visibleToPermissions = new ArraySet<>(permissionDocuments.length);
+        for (GenericDocument permissionDocument : permissionDocuments) {
+            Set<Integer> requiredPermissions = new VisibilityPermissionDocument(
+                    permissionDocument).getAllRequiredPermissions();
+            if (requiredPermissions != null) {
+                visibleToPermissions.add(requiredPermissions);
+            }
+        }
+        return visibleToPermissions;
+    }
+
+    /** Builder for {@link VisibilityDocument}. */
+    public static class Builder extends GenericDocument.Builder<Builder> {
+        private final Set<PackageIdentifier> mPackageIdentifiers = new ArraySet<>();
+
+        /**
+         * Creates a {@link Builder} for a {@link VisibilityDocument}.
+         *
+         * @param id The SchemaType of the {@link AppSearchSchema} that this
+         *           {@link VisibilityDocument} represents. The package and database prefix will be
+         *           added in server side. We are using prefixed schema type to be the final id of
+         *           this {@link VisibilityDocument}.
+         */
+        public Builder(@NonNull String id) {
+            super(NAMESPACE, id, SCHEMA_TYPE);
+        }
+
+        /** Sets whether this schema has opted out of platform surfacing. */
+        @NonNull
+        public Builder setNotDisplayedBySystem(boolean notDisplayedBySystem) {
+            return setPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY,
+                    notDisplayedBySystem);
+        }
+
+        /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+        @NonNull
+        public Builder addVisibleToPackages(@NonNull Set<PackageIdentifier> packageIdentifiers) {
+            Preconditions.checkNotNull(packageIdentifiers);
+            mPackageIdentifiers.addAll(packageIdentifiers);
+            return this;
+        }
+
+        /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+        @NonNull
+        public Builder addVisibleToPackage(@NonNull PackageIdentifier packageIdentifier) {
+            Preconditions.checkNotNull(packageIdentifier);
+            mPackageIdentifiers.add(packageIdentifier);
+            return this;
+        }
+
+        /**
+         * Set required permission sets for a package needs to hold to the schema this
+         * {@link VisibilityDocument} represents.
+         *
+         * <p> The querier could have access if they holds ALL required permissions of ANY of the
+         * individual value sets.
+         */
+        @NonNull
+        public Builder setVisibleToPermissions(@NonNull Set<Set<Integer>> visibleToPermissions) {
+            Preconditions.checkNotNull(visibleToPermissions);
+            VisibilityPermissionDocument[] permissionDocuments =
+                    new VisibilityPermissionDocument[visibleToPermissions.size()];
+            int i = 0;
+            for (Set<Integer> allRequiredPermissions : visibleToPermissions) {
+                permissionDocuments[i++] = new VisibilityPermissionDocument
+                        .Builder(NAMESPACE, /*id=*/String.valueOf(i))
+                        .setVisibleToAllRequiredPermissions(allRequiredPermissions)
+                        .build();
+            }
+            setPropertyDocument(PERMISSION_PROPERTY, permissionDocuments);
+            return this;
+        }
+
+        /** Build a {@link VisibilityDocument} */
+        @Override
+        @NonNull
+        public VisibilityDocument build() {
+            String[] packageNames = new String[mPackageIdentifiers.size()];
+            byte[][] sha256Certs = new byte[mPackageIdentifiers.size()][32];
+            int i = 0;
+            for (PackageIdentifier packageIdentifier : mPackageIdentifiers) {
+                packageNames[i] = packageIdentifier.getPackageName();
+                sha256Certs[i] = packageIdentifier.getSha256Certificate();
+                ++i;
+            }
+            setPropertyString(PACKAGE_NAME_PROPERTY, packageNames);
+            setPropertyBytes(SHA_256_CERT_PROPERTY, sha256Certs);
+            return new VisibilityDocument(super.build());
+        }
+    }
+
+
+    /**  Build the List of {@link VisibilityDocument} from visibility settings. */
+    @NonNull
+    public static List<VisibilityDocument> toVisibilityDocuments(
+            @NonNull SetSchemaRequest setSchemaRequest) {
+        Set<AppSearchSchema> searchSchemas = setSchemaRequest.getSchemas();
+        Set<String> schemasNotDisplayedBySystem = setSchemaRequest.getSchemasNotDisplayedBySystem();
+        Map<String, Set<PackageIdentifier>> schemasVisibleToPackages =
+                setSchemaRequest.getSchemasVisibleToPackages();
+        Map<String, Set<Set<Integer>>> schemasVisibleToPermissions =
+                setSchemaRequest.getRequiredPermissionsForSchemaTypeVisibility();
+
+        List<VisibilityDocument> visibilityDocuments = new ArrayList<>(searchSchemas.size());
+
+        for (AppSearchSchema searchSchema : searchSchemas) {
+            String schemaType = searchSchema.getSchemaType();
+            VisibilityDocument.Builder documentBuilder =
+                    new VisibilityDocument.Builder(/*id=*/searchSchema.getSchemaType());
+            documentBuilder.setNotDisplayedBySystem(
+                    schemasNotDisplayedBySystem.contains(schemaType));
+
+            if (schemasVisibleToPackages.containsKey(schemaType)) {
+                documentBuilder.addVisibleToPackages(schemasVisibleToPackages.get(schemaType));
+            }
+
+            if (schemasVisibleToPermissions.containsKey(schemaType)) {
+                documentBuilder.setVisibleToPermissions(
+                        schemasVisibleToPermissions.get(schemaType));
+            }
+            visibilityDocuments.add(documentBuilder.build());
+        }
+        return visibilityDocuments;
+    }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java
new file mode 100644
index 0000000..e859cb9
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2022 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.appsearch.app;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.collection.ArraySet;
+
+import java.util.Set;
+
+/**
+ * The nested document that holds all required permissions for a caller need to hold to access the
+ * schema which the outer {@link VisibilityDocument} represents.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class VisibilityPermissionDocument extends GenericDocument {
+
+    /**
+     * The Schema type for documents that hold AppSearch's metadata, e.g. visibility settings.
+     */
+    public static final String SCHEMA_TYPE = "VisibilityPermissionType";
+
+    /** Property that holds the required permissions to access the schema. */
+    private static final String ALL_REQUIRED_PERMISSIONS_PROPERTY = "allRequiredPermissions";
+
+    /**
+     * Schema for the VisibilityStore's documents.
+     *
+     * <p>NOTE: If you update this, also update {@link VisibilityDocument#SCHEMA_VERSION_LATEST}.
+     */
+    public static final AppSearchSchema
+            SCHEMA = new AppSearchSchema.Builder(SCHEMA_TYPE)
+            .addProperty(new AppSearchSchema.LongPropertyConfig
+                    .Builder(ALL_REQUIRED_PERMISSIONS_PROPERTY)
+                    .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+                    .build())
+            .build();
+
+    VisibilityPermissionDocument(@NonNull GenericDocument genericDocument) {
+        super(genericDocument);
+    }
+
+    /**
+     * Returns an array of Android Permissions that caller mush hold to access the schema
+     * that the outer {@link VisibilityDocument} represents.
+     */
+    @Nullable
+    public Set<Integer> getAllRequiredPermissions() {
+        return toInts(getPropertyLongArray(ALL_REQUIRED_PERMISSIONS_PROPERTY));
+    }
+
+    /** Builder for {@link VisibilityPermissionDocument}. */
+    public static class Builder extends GenericDocument.Builder<Builder> {
+
+        /**
+         * Creates a {@link VisibilityDocument.Builder} for a {@link VisibilityDocument}.
+         */
+        public Builder(@NonNull String namespace, @NonNull String id) {
+            super(namespace, id, SCHEMA_TYPE);
+        }
+
+        /** Sets whether this schema has opted out of platform surfacing. */
+        @NonNull
+        public Builder setVisibleToAllRequiredPermissions(
+                @NonNull Set<Integer> allRequiredPermissions) {
+            setPropertyLong(ALL_REQUIRED_PERMISSIONS_PROPERTY, toLongs(allRequiredPermissions));
+            return this;
+        }
+
+        /** Build a {@link VisibilityPermissionDocument} */
+        @Override
+        @NonNull
+        public VisibilityPermissionDocument build() {
+            return new VisibilityPermissionDocument(super.build());
+        }
+    }
+
+    @NonNull
+    static long[] toLongs(@NonNull Set<Integer> properties) {
+        long[] outputs = new long[properties.size()];
+        int i = 0;
+        for (int property : properties) {
+            outputs[i++] = property;
+        }
+        return outputs;
+    }
+
+    @Nullable
+    private static Set<Integer> toInts(@Nullable long[] properties) {
+        if (properties == null) {
+            return null;
+        }
+        Set<Integer> outputs = new ArraySet<>(properties.length);
+        for (long property : properties) {
+            outputs.add((int) property);
+        }
+        return outputs;
+    }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/AppSearchObserverCallback.java b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/AppSearchObserverCallback.java
index c040aa2..c01917e 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/AppSearchObserverCallback.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/AppSearchObserverCallback.java
@@ -16,23 +16,13 @@
 
 package androidx.appsearch.observer;
 
-import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 
 /**
- * An interface which apps can implement to subscribe to notifications of changes to AppSearch data.
+ * @deprecated use {@link ObserverCallback} instead.
+ * @hide
  */
-public interface AppSearchObserverCallback {
-    /**
-     * Callback to trigger after schema changes (schema type added, updated or removed).
-     *
-     * @param changeInfo Information about the nature of the change.
-     */
-    void onSchemaChanged(@NonNull SchemaChangeInfo changeInfo);
-
-    /**
-     * Callback to trigger after document changes (documents added, updated or removed).
-     *
-     * @param changeInfo Information about the nature of the change.
-     */
-    void onDocumentChanged(@NonNull DocumentChangeInfo changeInfo);
-}
+// TODO(b/209734214): Remove this after dogfooders and devices have migrated away from this class.
+@Deprecated
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface AppSearchObserverCallback extends ObserverCallback {}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/DocumentChangeInfo.java b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/DocumentChangeInfo.java
index 0fd9ae2..1fc52a0 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/DocumentChangeInfo.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/DocumentChangeInfo.java
@@ -21,8 +21,11 @@
 import androidx.core.util.ObjectsCompat;
 import androidx.core.util.Preconditions;
 
+import java.util.Collections;
+import java.util.Set;
+
 /**
- * Contains information about an individual change detected by an {@link AppSearchObserverCallback}.
+ * Contains information about an individual change detected by an {@link ObserverCallback}.
  *
  * <p>This class reports information about document changes, i.e. when documents were added, updated
  * or removed.
@@ -30,8 +33,11 @@
  * <p>Changes are grouped by package, database, schema type and namespace. Each unique
  * combination of these items will generate a unique {@link DocumentChangeInfo}.
  *
+ * <p>Notifications are only sent for documents whose schema type matches an observer's schema
+ * filters (as determined by {@link ObserverSpec#getFilterSchemas}).
+ *
  * <p>Note that document changes that happen during schema migration from calling
- * {@link androidx.appsearch.app.AppSearchSession#setSchema} are not reported via this class.
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync} are not reported via this class.
  * Such changes are reported through {@link SchemaChangeInfo}.
  */
 public final class DocumentChangeInfo {
@@ -39,8 +45,7 @@
     private final String mDatabase;
     private final String mNamespace;
     private final String mSchemaName;
-
-    // TODO(b/193494000): Add the set of changed document IDs to this class
+    private final Set<String> mChangedDocumentIds;
 
     /**
      * Constructs a new {@link DocumentChangeInfo}.
@@ -49,16 +54,21 @@
      * @param database The database in which the documents that changed reside.
      * @param namespace    The namespace in which the documents that changed reside.
      * @param schemaName   The name of the schema type that contains the changed documents.
+     * @param changedDocumentIds The set of document IDs that have been changed as part of this
+     *                   notification.
      */
     public DocumentChangeInfo(
             @NonNull String packageName,
             @NonNull String database,
             @NonNull String namespace,
-            @NonNull String schemaName) {
+            @NonNull String schemaName,
+            @NonNull Set<String> changedDocumentIds) {
         mPackageName = Preconditions.checkNotNull(packageName);
         mDatabase = Preconditions.checkNotNull(database);
         mNamespace = Preconditions.checkNotNull(namespace);
         mSchemaName = Preconditions.checkNotNull(schemaName);
+        mChangedDocumentIds = Collections.unmodifiableSet(
+                Preconditions.checkNotNull(changedDocumentIds));
     }
 
     /** Returns the package name of the app which owns the documents that changed. */
@@ -85,20 +95,38 @@
         return mSchemaName;
     }
 
+    /**
+     * Returns the set of document IDs that have been changed as part of this notification.
+     *
+     * <p>This will never be empty.
+     */
+    @NonNull
+    public Set<String> getChangedDocumentIds() {
+        return mChangedDocumentIds;
+    }
+
     @Override
     public boolean equals(@Nullable Object o) {
-        if (this == o) return true;
-        if (!(o instanceof DocumentChangeInfo)) return false;
+        if (this == o) {
+            return true;
+        }
+
+        if (!(o instanceof DocumentChangeInfo)) {
+            return false;
+        }
+
         DocumentChangeInfo that = (DocumentChangeInfo) o;
         return mPackageName.equals(that.mPackageName)
                 && mDatabase.equals(that.mDatabase)
                 && mNamespace.equals(that.mNamespace)
-                && mSchemaName.equals(that.mSchemaName);
+                && mSchemaName.equals(that.mSchemaName)
+                && mChangedDocumentIds.equals(that.mChangedDocumentIds);
     }
 
     @Override
     public int hashCode() {
-        return ObjectsCompat.hash(mPackageName, mDatabase, mNamespace, mSchemaName);
+        return ObjectsCompat.hash(
+                mPackageName, mDatabase, mNamespace, mSchemaName, mChangedDocumentIds);
     }
 
     @NonNull
@@ -109,6 +137,7 @@
                 + ", database='" + mDatabase + '\''
                 + ", namespace='" + mNamespace + '\''
                 + ", schemaName='" + mSchemaName + '\''
+                + ", changedDocumentIds='" + mChangedDocumentIds + '\''
                 + '}';
     }
 }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverCallback.java b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverCallback.java
new file mode 100644
index 0000000..cae945a
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverCallback.java
@@ -0,0 +1,38 @@
+/*
+ * 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.appsearch.observer;
+
+import androidx.annotation.NonNull;
+
+/**
+ * An interface which apps can implement to subscribe to notifications of changes to AppSearch data.
+ */
+public interface ObserverCallback {
+    /**
+     * Callback to trigger after schema changes (schema type added, updated or removed).
+     *
+     * @param changeInfo Information about the nature of the change.
+     */
+    void onSchemaChanged(@NonNull SchemaChangeInfo changeInfo);
+
+    /**
+     * Callback to trigger after document changes (documents added, updated or removed).
+     *
+     * @param changeInfo Information about the nature of the change.
+     */
+    void onDocumentChanged(@NonNull DocumentChangeInfo changeInfo);
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverSpec.java b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverSpec.java
index e8979e5..6e3705e 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverSpec.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverSpec.java
@@ -37,8 +37,8 @@
 import java.util.Set;
 
 /**
- * Configures the types, namespaces and other properties that {@link AppSearchObserverCallback}
- * instances match against.
+ * Configures the types, namespaces and other properties that {@link ObserverCallback} instances
+ * match against.
  */
 public final class ObserverSpec {
     private static final String FILTER_SCHEMA_FIELD = "filterSchema";
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/SchemaChangeInfo.java b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/SchemaChangeInfo.java
index 6eff8c4..a70858d 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/SchemaChangeInfo.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/SchemaChangeInfo.java
@@ -21,11 +21,15 @@
 import androidx.core.util.ObjectsCompat;
 import androidx.core.util.Preconditions;
 
+import java.util.Collections;
+import java.util.Set;
+
 /**
- * Contains information about a schema change detected by an {@link AppSearchObserverCallback}.
+ * Contains information about a schema change detected by an {@link ObserverCallback}.
  *
  * <p>This object will be sent when a schema type having a name matching an observer's schema
- * type filters has been added, updated, or removed.
+ * filters (as determined by {@link ObserverSpec#getFilterSchemas}) has been added, updated, or
+ * removed.
  *
  * <p>Note that schema changes may cause documents to be migrated or removed. When this happens,
  * individual document updates will NOT be dispatched via {@link DocumentChangeInfo}. The only
@@ -35,18 +39,23 @@
 public final class SchemaChangeInfo {
     private final String mPackageName;
     private final String mDatabaseName;
-
-    // TODO(b/193494000): Add the set of changed schema names to this class
+    private final Set<String> mChangedSchemaNames;
 
     /**
      * Constructs a new {@link SchemaChangeInfo}.
      *
      * @param packageName     The package name of the app which owns the schema that changed.
      * @param databaseName    The database in which the schema that changed resides.
+     * @param changedSchemaNames Names of schemas that have changed as part of this notification.
      */
-    public SchemaChangeInfo(@NonNull String packageName, @NonNull String databaseName) {
+    public SchemaChangeInfo(
+            @NonNull String packageName,
+            @NonNull String databaseName,
+            @NonNull Set<String> changedSchemaNames) {
         mPackageName = Preconditions.checkNotNull(packageName);
         mDatabaseName = Preconditions.checkNotNull(databaseName);
+        mChangedSchemaNames = Collections.unmodifiableSet(
+                Preconditions.checkNotNull(changedSchemaNames));
     }
 
     /** Returns the package name of the app which owns the schema that changed. */
@@ -61,17 +70,35 @@
         return mDatabaseName;
     }
 
+    /**
+     * Returns the names of schema types affected by this change notification.
+     *
+     * <p>This will never be empty.
+     */
+    @NonNull
+    public Set<String> getChangedSchemaNames() {
+        return mChangedSchemaNames;
+    }
+
     @Override
     public boolean equals(@Nullable Object o) {
-        if (this == o) return true;
-        if (!(o instanceof SchemaChangeInfo)) return false;
+        if (this == o) {
+            return true;
+        }
+
+        if (!(o instanceof SchemaChangeInfo)) {
+            return false;
+        }
+
         SchemaChangeInfo that = (SchemaChangeInfo) o;
-        return mPackageName.equals(that.mPackageName) && mDatabaseName.equals(that.mDatabaseName);
+        return mPackageName.equals(that.mPackageName)
+                && mDatabaseName.equals(that.mDatabaseName)
+                && mChangedSchemaNames.equals(that.mChangedSchemaNames);
     }
 
     @Override
     public int hashCode() {
-        return ObjectsCompat.hash(mPackageName, mDatabaseName);
+        return ObjectsCompat.hash(mPackageName, mDatabaseName, mChangedSchemaNames);
     }
 
     @NonNull
@@ -80,6 +107,7 @@
         return "SchemaChangeInfo{"
                 + "packageName='" + mPackageName + '\''
                 + ", databaseName='" + mDatabaseName + '\''
+                + ", changedSchemaNames='" + mChangedSchemaNames + '\''
                 + '}';
     }
 }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/util/BundleUtil.java b/appsearch/appsearch/src/main/java/androidx/appsearch/util/BundleUtil.java
index 78cbca3..1f8ad68b 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/util/BundleUtil.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/util/BundleUtil.java
@@ -223,8 +223,10 @@
                     }
                 }
                 hashCodes[hashCodeIdx++] = Arrays.hashCode(innerHashCodes);
-            } else {
+            } else if (value != null) {
                 hashCodes[hashCodeIdx++] = value.hashCode();
+            } else {
+                hashCodes[hashCodeIdx++] = 0;
             }
         }
         return Arrays.hashCode(hashCodes);
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/util/LogUtil.java b/appsearch/appsearch/src/main/java/androidx/appsearch/util/LogUtil.java
index b360ea0..2392374 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/util/LogUtil.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/util/LogUtil.java
@@ -21,7 +21,7 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
-import androidx.core.util.Preconditions;
+import androidx.annotation.Size;
 
 /**
  * Utilities for logging to logcat.
@@ -29,6 +29,11 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public final class LogUtil {
+    /** Whether to log {@link Log#VERBOSE} and {@link Log#DEBUG} logs. */
+    // TODO(b/232285376): If it becomes possible to detect an eng build, turn this on by default
+    //  for eng builds.
+    public static final boolean DEBUG = false;
+
     /**
      * The {@link #piiTrace} logs are intended for sensitive data that can't be enabled in
      * production, so they are build-gated by this constant.
@@ -41,14 +46,10 @@
      */
     private static final int PII_TRACE_LEVEL = 0;
 
-    private final String mTag;
-
-    public LogUtil(@NonNull String tag) {
-        mTag = Preconditions.checkNotNull(tag);
-    }
+    private LogUtil() {}
 
     /** Returns whether piiTrace() is enabled (PII_TRACE_LEVEL > 0). */
-    public boolean isPiiTraceEnabled() {
+    public static boolean isPiiTraceEnabled() {
         return PII_TRACE_LEVEL > 0;
     }
 
@@ -58,8 +59,9 @@
      *
      * <p>If {@link #PII_TRACE_LEVEL} is 0, nothing is logged and this method returns immediately.
      */
-    public void piiTrace(@NonNull String message) {
-        piiTrace(message, /*fastTraceObj=*/null, /*fullTraceObj=*/null);
+    public static void piiTrace(
+            @Size(min = 0, max = 23) @NonNull String tag, @NonNull String message) {
+        piiTrace(tag, message, /*fastTraceObj=*/null, /*fullTraceObj=*/null);
     }
 
     /**
@@ -69,8 +71,11 @@
      * <p>If {@link #PII_TRACE_LEVEL} is 0, nothing is logged and this method returns immediately.
      * <p>Otherwise, {@code traceObj} is logged if it is non-null.
      */
-    public void piiTrace(@NonNull String message, @Nullable Object traceObj) {
-        piiTrace(message, /*fastTraceObj=*/traceObj, /*fullTraceObj=*/null);
+    public static void piiTrace(
+            @Size(min = 0, max = 23) @NonNull String tag,
+            @NonNull String message,
+            @Nullable Object traceObj) {
+        piiTrace(tag, message, /*fastTraceObj=*/traceObj, /*fullTraceObj=*/null);
     }
 
     /**
@@ -82,8 +87,11 @@
      * <p>If {@link #PII_TRACE_LEVEL} is 2, {@code fullTraceObj} is logged if it is non-null, else
      *   {@code fastTraceObj} is logged if it is non-null..
      */
-    public void piiTrace(
-            @NonNull String message, @Nullable Object fastTraceObj, @Nullable Object fullTraceObj) {
+    public static void piiTrace(
+            @Size(min = 0, max = 23) @NonNull String tag,
+            @NonNull String message,
+            @Nullable Object fastTraceObj,
+            @Nullable Object fullTraceObj) {
         if (PII_TRACE_LEVEL == 0) {
             return;
         }
@@ -95,6 +103,6 @@
         } else if (PII_TRACE_LEVEL == 2 && fastTraceObj != null) {
             builder.append(": ").append(fastTraceObj);
         }
-        Log.i(mTag, builder.toString());
+        Log.i(tag, builder.toString());
     }
 }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/util/SchemaMigrationUtil.java b/appsearch/appsearch/src/main/java/androidx/appsearch/util/SchemaMigrationUtil.java
index 1408fb8..8fbbd61 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/util/SchemaMigrationUtil.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/util/SchemaMigrationUtil.java
@@ -16,10 +16,12 @@
 
 package androidx.appsearch.util;
 
+import static androidx.appsearch.app.AppSearchResult.RESULT_INVALID_SCHEMA;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
-import androidx.appsearch.app.AppSearchResult;
 import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.InternalSetSchemaResponse;
 import androidx.appsearch.app.Migrator;
 import androidx.appsearch.app.SetSchemaResponse;
 import androidx.appsearch.exceptions.AppSearchException;
@@ -75,8 +77,12 @@
      * all {@link Migrator} has been triggered.
      */
     public static void checkDeletedAndIncompatibleAfterMigration(
-            @NonNull SetSchemaResponse setSchemaResponse,
+            @NonNull InternalSetSchemaResponse internalSetSchemaResponse,
             @NonNull Set<String> activeMigrators) throws AppSearchException {
+        if (internalSetSchemaResponse.isSuccess()) {
+            return;
+        }
+        SetSchemaResponse setSchemaResponse = internalSetSchemaResponse.getSetSchemaResponse();
         Set<String> unmigratedIncompatibleTypes =
                 new ArraySet<>(setSchemaResponse.getIncompatibleTypes());
         unmigratedIncompatibleTypes.removeAll(activeMigrators);
@@ -86,23 +92,13 @@
         unmigratedDeletedTypes.removeAll(activeMigrators);
 
         // check if there are any unmigrated incompatible types or deleted types. If there
-        // are, we will getActiveMigratorsthrow an exception. That's the only case we
-        // swallowed in the AppSearchImpl#setSchema().
+        // are, we will throw an exception. That's the only case we swallowed in the
+        // AppSearchImpl#setSchema().
         // Since the force override is false, the schema will not have been set if there are
         // any incompatible or deleted types.
-        checkDeletedAndIncompatible(unmigratedDeletedTypes,
-                unmigratedIncompatibleTypes);
-    }
-
-    /**  Checks the setSchema() call won't delete any types or has incompatible types. */
-    public static void checkDeletedAndIncompatible(@NonNull Set<String> deletedTypes,
-            @NonNull Set<String> incompatibleTypes) throws AppSearchException {
-        if (deletedTypes.size() > 0
-                || incompatibleTypes.size() > 0) {
-            String newMessage = "Schema is incompatible."
-                    + "\n  Deleted types: " + deletedTypes
-                    + "\n  Incompatible types: " + incompatibleTypes;
-            throw new AppSearchException(AppSearchResult.RESULT_INVALID_SCHEMA, newMessage);
+        if (!unmigratedIncompatibleTypes.isEmpty() || !unmigratedDeletedTypes.isEmpty()) {
+            throw new AppSearchException(RESULT_INVALID_SCHEMA,
+                    internalSetSchemaResponse.getErrorMessage());
         }
     }
 }
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
index 90f31aa..b59bea9 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
@@ -89,20 +89,22 @@
             Set<TypeElement> documentElements =
                     typesIn(elementsByAnnotation.get(
                             IntrospectionHelper.DOCUMENT_ANNOTATION_CLASS));
+
+            ImmutableSet.Builder<Element> nextRound = new ImmutableSet.Builder<>();
             for (TypeElement document : documentElements) {
                 try {
                     processDocument(document);
                 } catch (MissingTypeException e) {
                     // Save it for next round to wait for the AutoValue annotation processor to
                     // be run first.
-                    return ImmutableSet.of(e.getTypeName());
+                    nextRound.add(document);
                 } catch (ProcessingException e) {
                     // Prints error message.
                     e.printDiagnostic(mMessager);
                 }
             }
-            // No elements will be passed to next round of processing.
-            return ImmutableSet.of();
+            // Pass elements to next round of processing.
+            return nextRound.build();
         }
 
         private void processDocument(@NonNull TypeElement element)
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
index f74e2bb..44cc1f0 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
@@ -82,7 +82,7 @@
      */
     private TypeSpec createClass() throws ProcessingException {
         // Gets the full name of target class.
-        String qualifiedName = mModel.getClassElement().getQualifiedName().toString();
+        String qualifiedName = mModel.getQualifiedDocumentClassName();
         String className = qualifiedName.substring(mOutputPackage.length() + 1);
         ClassName genClassName = mHelper.getDocumentClassFactoryForClass(mOutputPackage, className);
 
@@ -94,7 +94,7 @@
         TypeSpec.Builder genClass = TypeSpec
                 .classBuilder(genClassName)
                 .addOriginatingElement(mModel.getClassElement())
-                .addModifiers(Modifier.PUBLIC)
+                .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
                 .addSuperinterface(factoryType);
 
         // Add the @Generated annotation to avoid static analysis running on these files
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentModel.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentModel.java
index 9603065..6f207da 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentModel.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentModel.java
@@ -16,6 +16,7 @@
 package androidx.appsearch.compiler;
 
 import static androidx.appsearch.compiler.IntrospectionHelper.DOCUMENT_ANNOTATION_CLASS;
+import static androidx.appsearch.compiler.IntrospectionHelper.generateClassHierarchy;
 import static androidx.appsearch.compiler.IntrospectionHelper.getDocumentAnnotation;
 
 import androidx.annotation.NonNull;
@@ -24,6 +25,7 @@
 import androidx.appsearch.compiler.IntrospectionHelper.PropertyClass;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.EnumMap;
 import java.util.HashMap;
@@ -44,6 +46,7 @@
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.element.VariableElement;
 import javax.lang.model.util.ElementFilter;
+import javax.lang.model.util.Types;
 
 /**
  * Processes @Document annotations.
@@ -64,7 +67,10 @@
 
     private final IntrospectionHelper mHelper;
     private final TypeElement mClass;
-    private final AnnotationMirror mDocumentAnnotation;
+    private final Types mTypeUtil;
+    // The name of the original class annotated with @Document
+    private final String mQualifiedDocumentClassName;
+    private String mSchemaName;
     // Warning: if you change this to a HashSet, we may choose different getters or setters from
     // run to run, causing the generated code to bounce.
     private final Set<ExecutableElement> mAllMethods = new LinkedHashSet<>();
@@ -77,9 +83,11 @@
     private final Map<String, ExecutableElement> mSetterMethods = new HashMap<>();
     // Warning: if you change this to a HashMap, we may assign fields in a different order from run
     // to run, causing the generated code to bounce.
+    // Keeps tracks of all AppSearch fields so we can find creation and access methods for them all
     private final Map<String, VariableElement> mAllAppSearchFields = new LinkedHashMap<>();
     // Warning: if you change this to a HashMap, we may assign fields in a different order from run
     // to run, causing the generated code to bounce.
+    // Keeps track of property fields so we don't allow multiple annotated fields of the same name
     private final Map<String, VariableElement> mPropertyFields = new LinkedHashMap<>();
     private final Map<SpecialField, String> mSpecialFieldNames = new EnumMap<>(SpecialField.class);
     private final Map<VariableElement, ReadKind> mReadKinds = new HashMap<>();
@@ -101,7 +109,7 @@
 
         mHelper = new IntrospectionHelper(env);
         mClass = clazz;
-        mDocumentAnnotation = getDocumentAnnotation(mClass);
+        mTypeUtil = env.getTypeUtils();
 
         if (generatedAutoValueElement != null) {
             mIsAutoValueDocument = true;
@@ -116,6 +124,7 @@
             mAllMethods.addAll(
                     ElementFilter.methodsIn(generatedAutoValueElement.getEnclosedElements()));
 
+            mQualifiedDocumentClassName = generatedAutoValueElement.getQualifiedName().toString();
             scanFields(generatedAutoValueElement);
             scanCreationMethods(creationMethods);
         } else {
@@ -135,6 +144,7 @@
                 }
             }
 
+            mQualifiedDocumentClassName = clazz.getQualifiedName().toString();
             scanFields(mClass);
             scanCreationMethods(creationMethods);
         }
@@ -169,15 +179,18 @@
         return mClass;
     }
 
+    /**
+     * The name of the original class annotated with @Document
+     * @return the class name
+     */
+    @NonNull
+    public String getQualifiedDocumentClassName() {
+        return mQualifiedDocumentClassName;
+    }
+
     @NonNull
     public String getSchemaName() {
-        Map<String, Object> params =
-                mHelper.getAnnotationParams(mDocumentAnnotation);
-        String name = params.get("name").toString();
-        if (name.isEmpty()) {
-            return mClass.getSimpleName().toString();
-        }
-        return name;
+        return mSchemaName;
     }
 
     @NonNull
@@ -274,110 +287,158 @@
         Set<Modifier> methodModifiers = method.getModifiers();
         return methodModifiers.contains(Modifier.STATIC)
                 && !methodModifiers.contains(Modifier.PRIVATE)
-                && method.getReturnType() == mClass.asType();
+                && mTypeUtil.isSameType(method.getReturnType(), mClass.asType());
     }
 
-    private void scanFields(TypeElement element) throws ProcessingException {
-        Element namespaceField = null;
-        Element idField = null;
-        Element creationTimestampField = null;
-        Element ttlField = null;
-        Element scoreField = null;
-        List<? extends Element> enclosedElements = element.getEnclosedElements();
-        for (int i = 0; i < enclosedElements.size(); i++) {
-            Element childElement = enclosedElements.get(i);
-            if (mIsAutoValueDocument && childElement.getKind() != ElementKind.METHOD) {
+    /**
+     * Scan the annotations of a field to determine the fields type and handle it accordingly
+     *
+     * @param classElements all the field elements of a class, annotated and non-annotated
+     * @param childElement the member of class elements currently being scanned
+     * @throws ProcessingException
+     */
+    private void scanAnnotatedField(@NonNull List<? extends Element> classElements,
+            @NonNull Element childElement) throws ProcessingException {
+        String fieldName = childElement.getSimpleName().toString();
+
+        // a property field shouldn't be able to override a special field
+        if (mSpecialFieldNames.containsValue(fieldName)) {
+            throw new ProcessingException(
+                    "Non-annotated field overriding special annotated fields named: "
+                            + fieldName, mAllAppSearchFields.get(fieldName));
+        }
+
+        // no annotation mirrors -> non-indexable field
+        for (AnnotationMirror annotation : childElement.getAnnotationMirrors()) {
+            String annotationFq = annotation.getAnnotationType().toString();
+            if (!annotationFq.startsWith(DOCUMENT_ANNOTATION_CLASS)) {
                 continue;
             }
-            String fieldName = childElement.getSimpleName().toString();
-            for (AnnotationMirror annotation : childElement.getAnnotationMirrors()) {
-                String annotationFq = annotation.getAnnotationType().toString();
-                if (!annotationFq.startsWith(DOCUMENT_ANNOTATION_CLASS)) {
+            VariableElement child;
+            if (mIsAutoValueDocument) {
+                child = findFieldForFunctionWithSameName(classElements, childElement);
+            } else {
+                if (childElement.getKind() == ElementKind.METHOD) {
+                    throw new ProcessingException("AppSearch annotation is not applicable to "
+                            + "methods for Non-AutoValue class", childElement);
+                } else if (childElement.getKind() == ElementKind.CLASS) {
+                    continue;
+                } else {
+                    child = (VariableElement) childElement;
+                }
+            }
+
+            switch (annotationFq) {
+                case IntrospectionHelper.ID_CLASS:
+                    if (mSpecialFieldNames.containsKey(SpecialField.ID)) {
+                        throw new ProcessingException(
+                                "Class hierarchy contains multiple fields annotated @Id", child);
+                    }
+                    mSpecialFieldNames.put(SpecialField.ID, fieldName);
+                    break;
+                case IntrospectionHelper.NAMESPACE_CLASS:
+                    if (mSpecialFieldNames.containsKey(SpecialField.NAMESPACE)) {
+                        throw new ProcessingException(
+                                "Class hierarchy contains multiple fields annotated @Namespace",
+                                child);
+                    }
+                    mSpecialFieldNames.put(SpecialField.NAMESPACE, fieldName);
+                    break;
+                case IntrospectionHelper.CREATION_TIMESTAMP_MILLIS_CLASS:
+                    if (mSpecialFieldNames.containsKey(SpecialField.CREATION_TIMESTAMP_MILLIS)) {
+                        throw new ProcessingException("Class hierarchy contains multiple fields "
+                                + "annotated @CreationTimestampMillis", child);
+                    }
+                    mSpecialFieldNames.put(
+                            SpecialField.CREATION_TIMESTAMP_MILLIS, fieldName);
+                    break;
+                case IntrospectionHelper.TTL_MILLIS_CLASS:
+                    if (mSpecialFieldNames.containsKey(SpecialField.TTL_MILLIS)) {
+                        throw new ProcessingException(
+                                "Class hierarchy contains multiple fields annotated @TtlMillis",
+                                child);
+                    }
+                    mSpecialFieldNames.put(SpecialField.TTL_MILLIS, fieldName);
+                    break;
+                case IntrospectionHelper.SCORE_CLASS:
+                    if (mSpecialFieldNames.containsKey(SpecialField.SCORE)) {
+                        throw new ProcessingException(
+                                "Class hierarchy contains multiple fields annotated @Score", child);
+                    }
+                    mSpecialFieldNames.put(SpecialField.SCORE, fieldName);
+                    break;
+                default:
+                    PropertyClass propertyClass = getPropertyClass(annotationFq);
+                    if (propertyClass != null) {
+                        checkFieldTypeForPropertyAnnotation(child, propertyClass);
+                        if (mPropertyFields.containsKey(fieldName)) {
+                            throw new ProcessingException(
+                                    "Class hierarchy contains multiple annotated fields named: "
+                                            + fieldName, child);
+                        }
+                        mPropertyFields.put(fieldName, child);
+                    }
+            }
+
+            mAllAppSearchFields.put(fieldName, child);
+        }
+    }
+
+    /**
+     * Scans all the fields of the class, as well as superclasses annotated with @Document,
+     * to get AppSearch fields such as id
+     * @param element the class to scan
+     */
+    private void scanFields(@NonNull TypeElement element) throws ProcessingException {
+        Collection<TypeElement> hierarchy = generateClassHierarchy(element, mIsAutoValueDocument);
+
+        for (TypeElement clazz: hierarchy) {
+
+            List<? extends Element> enclosedElements = clazz.getEnclosedElements();
+            for (int i = 0; i < enclosedElements.size(); i++) {
+                Element childElement = enclosedElements.get(i);
+
+                // The only fields relevant to @Document in an AutoValue class are the abstract
+                // accessor methods
+                if (mIsAutoValueDocument && childElement.getKind() != ElementKind.METHOD) {
                     continue;
                 }
-                VariableElement child;
-                if (mIsAutoValueDocument) {
-                    child = findFieldForFunctionWithSameName(enclosedElements, childElement);
-                } else {
-                    if (childElement.getKind() == ElementKind.METHOD) {
-                        throw new ProcessingException(
-                                "AppSearch annotation is not applicable to methods for "
-                                        + "Non-AutoValue class",
-                                childElement);
-                    } else {
-                        child = (VariableElement) childElement;
-                    }
-                }
-                switch (annotationFq) {
-                    case IntrospectionHelper.ID_CLASS:
-                        if (idField != null) {
-                            throw new ProcessingException(
-                                    "Class contains multiple fields annotated @Id", child);
-                        }
-                        idField = child;
-                        mSpecialFieldNames.put(SpecialField.ID, fieldName);
-                        break;
-                    case IntrospectionHelper.NAMESPACE_CLASS:
-                        if (namespaceField != null) {
-                            throw new ProcessingException(
-                                    "Class contains multiple fields annotated @Namespace",
-                                    child);
-                        }
-                        namespaceField = child;
-                        mSpecialFieldNames.put(SpecialField.NAMESPACE, fieldName);
-                        break;
-                    case IntrospectionHelper.CREATION_TIMESTAMP_MILLIS_CLASS:
-                        if (creationTimestampField != null) {
-                            throw new ProcessingException(
-                                    "Class contains multiple fields annotated "
-                                            + "@CreationTimestampMillis",
-                                    child);
-                        }
-                        creationTimestampField = child;
-                        mSpecialFieldNames.put(SpecialField.CREATION_TIMESTAMP_MILLIS, fieldName);
-                        break;
-                    case IntrospectionHelper.TTL_MILLIS_CLASS:
-                        if (ttlField != null) {
-                            throw new ProcessingException(
-                                    "Class contains multiple fields annotated @TtlMillis",
-                                    child);
-                        }
-                        ttlField = child;
-                        mSpecialFieldNames.put(SpecialField.TTL_MILLIS, fieldName);
-                        break;
-                    case IntrospectionHelper.SCORE_CLASS:
-                        if (scoreField != null) {
-                            throw new ProcessingException(
-                                    "Class contains multiple fields annotated @Score", child);
-                        }
-                        scoreField = child;
-                        mSpecialFieldNames.put(SpecialField.SCORE, fieldName);
-                        break;
-                    default:
-                        PropertyClass propertyClass = getPropertyClass(annotationFq);
-                        if (propertyClass != null) {
-                            checkFieldTypeForPropertyAnnotation(child, propertyClass);
-                            mPropertyFields.put(fieldName, child);
-                        }
-                }
-                mAllAppSearchFields.put(fieldName, child);
+
+                scanAnnotatedField(enclosedElements, childElement);
             }
         }
 
         // Every document must always have a namespace
-        if (namespaceField == null) {
+        if (!mSpecialFieldNames.containsKey(SpecialField.NAMESPACE)) {
             throw new ProcessingException(
                     "All @Document classes must have exactly one field annotated with @Namespace",
                     mClass);
         }
 
         // Every document must always have an ID
-        if (idField == null) {
+        if (!mSpecialFieldNames.containsKey(SpecialField.ID)) {
             throw new ProcessingException(
                     "All @Document classes must have exactly one field annotated with @Id",
                     mClass);
         }
 
+        // The schema name of the class at the top of the hierarchy will be used, so that
+        // performing a query on the base @Document class will also return child @Document classes
+        TypeElement topDocumentClass = hierarchy.iterator().next();
+        AnnotationMirror annotationMirror = getDocumentAnnotation(topDocumentClass);
+        if (annotationMirror == null) {
+            mSchemaName = mClass.getSimpleName().toString();
+        } else {
+            Map<String, Object> params = mHelper.getAnnotationParams(annotationMirror);
+            String name = params.get("name").toString();
+            // Documents don't need an explicit name annotation,  can use the class name
+            if (!name.isEmpty()) {
+                mSchemaName = name;
+            } else {
+                mSchemaName = topDocumentClass.getSimpleName().toString();
+            }
+        }
+
         for (VariableElement appSearchField : mAllAppSearchFields.values()) {
             chooseAccessKinds(appSearchField);
         }
@@ -560,6 +621,17 @@
                                 + remainingFields);
                 continue creationMethodSearch;
             }
+
+            // If the field is set in the constructor, choose creation method for the write kind
+            for (String param : creationMethodParamFields) {
+                for (VariableElement appSearchField : mAllAppSearchFields.values()) {
+                    if (appSearchField.getSimpleName().toString().equals(param)) {
+                        mWriteKinds.put(appSearchField, WriteKind.CREATION_METHOD);
+                        break;
+                    }
+                }
+            }
+
             // Found one!
             mChosenCreationMethod = method;
             mChosenCreationMethodParams = creationMethodParamFields;
@@ -569,8 +641,10 @@
         // If we got here, we couldn't find any creation methods.
         ProcessingException e =
                 new ProcessingException(
-                        "Failed to find any suitable creation methods to build this class. See "
-                                + "warnings for details.", mClass);
+                        "Failed to find any suitable creation methods to build class \""
+                                + mClass.getQualifiedName()
+                                + "\". See warnings for details.",
+                        mClass);
 
         // Inform the developer why we started looking for creation methods in the first place.
         for (VariableElement field : creationMethodWrittenFields.values()) {
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/FromGenericDocumentCodeGenerator.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/FromGenericDocumentCodeGenerator.java
index 05b9752..9bb751f 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/FromGenericDocumentCodeGenerator.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/FromGenericDocumentCodeGenerator.java
@@ -348,9 +348,7 @@
             // The propertyType is not an element, this is not a type 1c list.
             return false;
         }
-        try {
-            getDocumentAnnotation(element);
-        } catch (ProcessingException e) {
+        if (getDocumentAnnotation(element) == null) {
             // The propertyType doesn't have @Document annotation, this is not a type 1c
             // list.
             return false;
@@ -548,9 +546,7 @@
             // The propertyType is not an element, this is not a type 2c array.
             return false;
         }
-        try {
-            getDocumentAnnotation(element);
-        } catch (ProcessingException e) {
+        if (getDocumentAnnotation(element) == null) {
             // The propertyType doesn't have @Document annotation, this is not a type 2c
             // array.
             return false;
@@ -735,9 +731,7 @@
             // The propertyType is not an element, this is not a type 3c field.
             return false;
         }
-        try {
-            getDocumentAnnotation(element);
-        } catch (ProcessingException e) {
+        if (getDocumentAnnotation(element) == null) {
             // The propertyType doesn't have @Document annotation, this is not a type 3c
             // field.
             return false;
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/IntrospectionHelper.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/IntrospectionHelper.java
index dd9b510..cf6e5a9 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/IntrospectionHelper.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/IntrospectionHelper.java
@@ -16,12 +16,17 @@
 package androidx.appsearch.compiler;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.VisibleForTesting;
 
+import com.google.auto.common.MoreTypes;
+import com.google.auto.value.AutoValue;
 import com.squareup.javapoet.ClassName;
 
+import java.util.ArrayDeque;
 import java.util.Collection;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -32,6 +37,7 @@
 import javax.lang.model.element.AnnotationValue;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.TypeElement;
 import javax.lang.model.element.VariableElement;
 import javax.lang.model.type.ArrayType;
 import javax.lang.model.type.DeclaredType;
@@ -105,13 +111,10 @@
 
     /**
      * Returns {@code androidx.appsearch.annotation.Document} annotation element from the input
-     * element's annotations.
-     *
-     * @throws ProcessingException if no such annotation is found.
+     * element's annotations. Returns null if no such annotation is found.
      */
-    @NonNull
-    public static AnnotationMirror getDocumentAnnotation(@NonNull Element element)
-            throws ProcessingException {
+    @Nullable
+    public static AnnotationMirror getDocumentAnnotation(@NonNull Element element) {
         Objects.requireNonNull(element);
         for (AnnotationMirror annotation : element.getAnnotationMirrors()) {
             String annotationFq = annotation.getAnnotationType().toString();
@@ -119,8 +122,7 @@
                 return annotation;
             }
         }
-        throw new ProcessingException(
-                "Missing annotation " + IntrospectionHelper.DOCUMENT_ANNOTATION_CLASS, element);
+        return null;
     }
 
     /** Checks whether the property data type is one of the valid types. */
@@ -150,20 +152,18 @@
      */
     public boolean isFieldOfDocumentType(VariableElement property) {
         TypeMirror propertyType = property.asType();
-        try {
-            if (propertyType.getKind() == TypeKind.ARRAY) {
-                getDocumentAnnotation(
-                        mTypeUtils.asElement(((ArrayType) property.asType()).getComponentType()));
-            } else if (mTypeUtils.isAssignable(mTypeUtils.erasure(propertyType), mCollectionType)) {
-                getDocumentAnnotation(mTypeUtils.asElement(
-                        ((DeclaredType) propertyType).getTypeArguments().get(0)));
-            } else {
-                getDocumentAnnotation(mTypeUtils.asElement(propertyType));
-            }
-        } catch (ProcessingException e) {
-            return false;
+        AnnotationMirror documentAnnotation = null;
+
+        if (propertyType.getKind() == TypeKind.ARRAY) {
+            documentAnnotation = getDocumentAnnotation(
+                    mTypeUtils.asElement(((ArrayType) property.asType()).getComponentType()));
+        } else if (mTypeUtils.isAssignable(mTypeUtils.erasure(propertyType), mCollectionType)) {
+            documentAnnotation = getDocumentAnnotation(mTypeUtils.asElement(
+                    ((DeclaredType) propertyType).getTypeArguments().get(0)));
+        } else {
+            documentAnnotation = getDocumentAnnotation(mTypeUtils.asElement(propertyType));
         }
-        return true;
+        return documentAnnotation != null;
     }
 
     public Map<String, Object> getAnnotationParams(@NonNull AnnotationMirror annotation) {
@@ -204,6 +204,51 @@
         return ClassName.get(APPSEARCH_EXCEPTION_PKG, APPSEARCH_EXCEPTION_SIMPLE_NAME);
     }
 
+    /**
+     * Get a list of super classes of element annotated with @Document, in order starting with the
+     * class at the top of the hierarchy and descending down the class hierarchy
+     */
+    @NonNull
+    public static Collection<TypeElement> generateClassHierarchy(@NonNull TypeElement element,
+            boolean isAutoValueDocument)
+            throws ProcessingException {
+        Deque<TypeElement> hierarchy = new ArrayDeque<>();
+        if (isAutoValueDocument) {
+            // We don't allow classes annotated with both Document and AutoValue to extend classes.
+            // Because of how AutoValue is set up, there is no way to add a constructor to
+            // populate fields of super classes.
+            // There should just be the generated class and the original annotated class
+            TypeElement superClass = MoreTypes.asTypeElement(
+                    MoreTypes.asTypeElement(element.getSuperclass()).getSuperclass());
+
+            if (!superClass.getQualifiedName().contentEquals(Object.class.getCanonicalName())) {
+                throw new ProcessingException(
+                        "A class annotated with AutoValue and Document cannot have a superclass",
+                        element);
+            }
+            hierarchy.add(element);
+        } else {
+            TypeElement currentClass = element;
+            while (!currentClass.getQualifiedName()
+                    .contentEquals(Object.class.getCanonicalName())) {
+                // If you inherit from an AutoValue class, you have to implement the static methods.
+                // That defeats the purpose of AutoValue
+                if (currentClass.getAnnotation(AutoValue.class) != null) {
+                    throw new ProcessingException(
+                            "A class annotated with Document cannot inherit from a class "
+                                    + "annotated with AutoValue", element);
+                }
+
+                if (getDocumentAnnotation(currentClass) != null) {
+                    hierarchy.addFirst(currentClass);
+                }
+
+                currentClass = MoreTypes.asTypeElement(currentClass.getSuperclass());
+            }
+        }
+        return hierarchy;
+    }
+
     enum PropertyClass {
         BOOLEAN_PROPERTY_CLASS("androidx.appsearch.annotation.Document.BooleanProperty"),
         BYTES_PROPERTY_CLASS("androidx.appsearch.annotation.Document.BytesProperty"),
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java
index 1679c84..a44867a 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java
@@ -325,9 +325,7 @@
             // The propertyType is not an element, this is not a type 1c list.
             return false;
         }
-        try {
-            getDocumentAnnotation(element);
-        } catch (ProcessingException e) {
+        if (getDocumentAnnotation(element) == null) {
             // The propertyType doesn't have @Document annotation, this is not a type 1c
             // list.
             return false;
@@ -479,7 +477,7 @@
         }
 
         body.addStatement(
-                "builder.$N($S, $NCopy)", setPropertyMethod, propertyName, fieldName)
+                        "builder.$N($S, $NCopy)", setPropertyMethod, propertyName, fieldName)
                 .unindent().add("}\n");
 
         method.add(body.build());
@@ -504,9 +502,7 @@
             // The propertyType is not an element, this is not a type 1c list.
             return false;
         }
-        try {
-            getDocumentAnnotation(element);
-        } catch (ProcessingException e) {
+        if (getDocumentAnnotation(element) == null)  {
             // The propertyType doesn't have @Document annotation, this is not a type 1c
             // list.
             return false;
@@ -589,7 +585,7 @@
         }
 
         body.addStatement(
-                "builder.$N($S, $NCopy)", setPropertyMethod, propertyName, fieldName)
+                        "builder.$N($S, $NCopy)", setPropertyMethod, propertyName, fieldName)
                 .unindent().add("}\n");
 
         method.add(body.build());
@@ -643,9 +639,7 @@
             // The propertyType is not an element, this is not a type 3c field.
             return false;
         }
-        try {
-            getDocumentAnnotation(element);
-        } catch (ProcessingException e) {
+        if (getDocumentAnnotation(element) == null) {
             // The propertyType doesn't have @Document annotation, this is not a type 3c
             // field.
             return false;
diff --git a/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java b/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
index 45a6f8f..3d13c38 100644
--- a/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
+++ b/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
@@ -106,6 +106,256 @@
     }
 
     @Test
+    public void testAutoValueInheritance() throws Exception {
+        Compilation docExtendsAutoValueDoc = compile(
+                "import com.google.auto.value.AutoValue;\n"
+                        + "import com.google.auto.value.AutoValue.*;\n"
+                        + "@AutoValue\n"
+                        + "@Document\n"
+                        + "public abstract class Gift {\n"
+                        + "  @CopyAnnotations @Document.Id abstract String id();\n"
+                        + "  @CopyAnnotations @Document.Namespace abstract String namespace();\n"
+                        + "  public static Gift create(String id, String namespace) {\n"
+                        + "      return new AutoValue_Gift(id,namespace);\n"
+                        + "  }\n"
+                        + "  @Document\n"
+                        + "  static abstract class CoolGift extends Gift {\n"
+                        + "    @Document.BooleanProperty boolean cool;\n"
+                        + "    CoolGift(String id, String namespace, boolean cool) {\n"
+                        + "      super(id, message);\n"
+                        + "      this.cool = cool;\n"
+                        + "    }\n"
+                        + "  }\n"
+                        + "}\n");
+        assertThat(docExtendsAutoValueDoc).hadErrorContaining(
+                "A class annotated with Document cannot inherit from a class annotated with "
+                        + "AutoValue");
+
+        Compilation autoValueDocExtendsDoc = compile(
+                "import com.google.auto.value.AutoValue;\n"
+                        + "import com.google.auto.value.AutoValue.*;\n"
+                        + "@Document\n"
+                        + "public class Gift {\n"
+                        + "  @Document.Id String id;\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @AutoValue\n"
+                        + "  @Document\n"
+                        + "  static abstract class CoolGift extends Gift {\n"
+                        + "    @CopyAnnotations @Document.BooleanProperty abstract boolean cool()"
+                        + ";\n"
+                        + "    public static CoolGift create(String id, String namespace, boolean"
+                        + " cool) {\n"
+                        + "      return new AutoValue_Gift_CoolGift(cool);\n"
+                        + "    }\n"
+                        + "  }\n"
+                        + "}\n");
+        assertThat(autoValueDocExtendsDoc).hadErrorContaining(
+                "A class annotated with AutoValue and Document cannot have a superclass");
+    }
+
+    @Test
+    public void testSuperClassErrors() throws Exception {
+        Compilation specialFieldReassigned = compile(
+                "@Document\n"
+                        + "public class Gift {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "  @Document.StringProperty String prop;\n"
+                        + "  Gift(String id, String namespace, String prop) {\n"
+                        + "    this.id = id;\n"
+                        + "    this.namespace = namespace;\n"
+                        + "    this.prop = prop;\n"
+                        + "  }\n"
+                        + "}\n"
+                        + "@Document\n"
+                        + "class CoolGift extends Gift {\n"
+                        + "  @Document.StringProperty String id;\n"
+                        + "  CoolGift(String id, String namespace) {\n"
+                        + "    super(id, namespace, \"\");\n"
+                        + "    this.id = id;\n"
+                        + "  }\n"
+                        + "}\n");
+        assertThat(specialFieldReassigned).hadErrorContaining(
+                "Non-annotated field overriding special annotated fields named: id");
+
+        Compilation nonAnnotatedFieldHasSameName = compile(
+                "@Document\n"
+                        + "public class Gift {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "  Gift(String id, String namespace) {\n"
+                        + "    this.id = id;\n"
+                        + "    this.namespace = namespace;\n"
+                        + "  }\n"
+                        + "}\n"
+                        + "@Document\n"
+                        + "class CoolGift extends Gift {\n"
+                        + "  String id;\n"
+                        + "  CoolGift(String id, String namespace) {\n"
+                        + "    super(id, namespace);\n"
+                        + "  }\n"
+                        + "  public String getId() { return id; }\n"
+                        + "}\n");
+        assertThat(nonAnnotatedFieldHasSameName).hadErrorContaining(
+                "Non-annotated field overriding special annotated fields named: id");
+
+        Compilation propertyCollision = compile(
+                "@Document\n"
+                        + "public class Gift {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "  @Document.StringProperty String prop;\n"
+                        + "  Gift(String id, String namespace, String prop) {\n"
+                        + "    this.id = id;\n"
+                        + "    this.namespace = namespace;\n"
+                        + "    this.prop = prop;\n"
+                        + "  }\n"
+                        + "}\n"
+                        + "@Document\n"
+                        + "class CoolGift extends Gift {\n"
+                        + "  @Document.BooleanProperty Boolean prop;\n"
+                        + "  CoolGift(String id, String namespace, String prop) {\n"
+                        + "    super(id, namespace, prop);\n"
+                        + "  }\n"
+                        + "}\n");
+        assertThat(propertyCollision).hadErrorContaining(
+                "Class hierarchy contains multiple annotated fields named: prop");
+
+        //error on collision
+        Compilation idCollision = compile(
+                "@Document\n"
+                        + "public class Gift {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "  Gift(String id, String namespace) {\n"
+                        + "    this.id = id;\n"
+                        + "    this.namespace = namespace;\n"
+                        + "  }\n"
+                        + "}\n"
+                        + "@Document\n"
+                        + "class CoolGift extends Gift {\n"
+                        + "  @Document.BooleanProperty private final boolean cool;\n"
+                        + "  @Document.Id String badId;\n"
+                        + "  CoolGift(String id, String namespace, String badId) {\n"
+                        + "    super(id, namespace);\n"
+                        + "    this.badId = badId;\n"
+                        + "  }\n"
+                        + "  public boolean getBadId() { return badId; }\n"
+                        + "}\n");
+        assertThat(idCollision).hadErrorContaining(
+                "Class hierarchy contains multiple fields annotated @Id");
+
+        Compilation nsCollision = compile(
+                "@Document\n"
+                        + "public class Gift {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "  Gift(String id, String namespace) {\n"
+                        + "    this.id = id;\n"
+                        + "    this.namespace = namespace;\n"
+                        + "  }\n"
+                        + "}\n"
+                        + "@Document\n"
+                        + "class CoolGift extends Gift {\n"
+                        + "  @Document.Namespace String badNamespace;\n"
+                        + "  CoolGift(String id, String namespace, String badId) {\n"
+                        + "    super(id, namespace);\n"
+                        + "    this.badNamespace = namespace;\n"
+                        + "  }\n"
+                        + "}\n");
+        assertThat(nsCollision).hadErrorContaining(
+                "Class hierarchy contains multiple fields annotated @Namespace");
+    }
+
+    @Test
+    public void testSuperClass() throws Exception {
+        // Try multiple levels of inheritance, nested, with properties, overriding properties
+        Compilation compilation = compile(
+                "@Document\n"
+                        + "class Ancestor {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "  @Document.StringProperty String note;\n"
+                        + "  int score;\n"
+                        + "  Ancestor(String id, String namespace, String note) {\n"
+                        + "    this.id = id;\n"
+                        + "    this.namespace = namespace;\n"
+                        + "    this.note = note;\n"
+                        + "  }\n"
+                        + "  public String getNote() { return note; }\n"
+                        + "}\n"
+                        + "class Parent extends Ancestor {\n"
+                        + "  Parent(String id, String namespace, String note) {\n"
+                        + "    super(id, namespace, note);\n"
+                        + "  }\n"
+                        + "}\n"
+                        + "@Document\n"
+                        + "class Gift extends Parent {\n"
+                        + "  @Document.StringProperty String sender;\n"
+                        + "  Gift(String id, String namespace, String sender) {\n"
+                        + "    super(id, namespace, \"note\");\n"
+                        + "    this.sender = sender;\n"
+                        + "  }\n"
+                        + "  public String getSender() { return sender; }\n"
+                        + "  @Document\n"
+                        + "  class FooGift extends Gift {\n"
+                        + "    @Document.Score int score;\n"
+                        + "    @Document.BooleanProperty boolean foo;\n"
+                        + "    FooGift(String id, String namespace, String note, int score, "
+                        + "boolean foo) {\n"
+                        + "      super(id, namespace, note);\n"
+                        + "      this.score = score;\n"
+                        + "      this.foo = foo;\n"
+                        + "    }\n"
+                        + "  }\n"
+                        + "}\n");
+        assertThat(compilation).succeededWithoutWarnings();
+        checkEqualsGolden("Gift$$__FooGift.java");
+    }
+
+    @Test
+    public void testSuperClassPojoAncestor() throws Exception {
+        // Try multiple levels of inheritance, nested, with properties, overriding properties
+        Compilation compilation = compile(
+                        "class Ancestor {\n"
+                        + "}\n"
+                        + "@Document\n"
+                        + "class Parent extends Ancestor {\n"
+                        + "  @Document.Namespace String namespace;\n"
+                        + "  @Document.Id String id;\n"
+                        + "  @Document.StringProperty String note;\n"
+                        + "  int score;\n"
+                        + "  Parent(String id, String namespace, String note) {\n"
+                        + "    this.id = id;\n"
+                        + "    this.namespace = namespace;\n"
+                        + "    this.note = note;\n"
+                        + "  }\n"
+                        + "}\n"
+                        + "@Document\n"
+                        + "class Gift extends Parent {\n"
+                        + "  @Document.StringProperty String sender;\n"
+                        + "  Gift(String id, String namespace, String sender) {\n"
+                        + "    super(id, namespace, \"note\");\n"
+                        + "    this.sender = sender;\n"
+                        + "  }\n"
+                        + "  public String getSender() { return sender; }\n"
+                        + "  @Document\n"
+                        + "  class FooGift extends Gift {\n"
+                        + "    @Document.Score int score;\n"
+                        + "    @Document.BooleanProperty boolean foo;\n"
+                        + "    FooGift(String id, String namespace, String note, int score, "
+                        + "boolean foo) {\n"
+                        + "      super(id, namespace, note);\n"
+                        + "      this.score = score;\n"
+                        + "      this.foo = foo;\n"
+                        + "    }\n"
+                        + "  }\n"
+                        + "}\n");
+        assertThat(compilation).succeededWithoutWarnings();
+        checkEqualsGolden("Gift$$__FooGift.java");
+    }
+
+    @Test
     public void testManyCreationTimestamp() {
         Compilation compilation = compile(
                 "@Document\n"
@@ -324,7 +574,8 @@
                         + "}\n");
 
         assertThat(compilation).hadErrorContaining(
-                "Failed to find any suitable creation methods to build this class");
+                "Failed to find any suitable creation methods to build class "
+                        + "\"com.example.appsearch.Gift\"");
         assertThat(compilation).hadWarningContainingMatch(
                 "Field cannot be written .* failed to find a suitable setter for field \"price\"");
         assertThat(compilation).hadWarningContaining(
@@ -345,7 +596,8 @@
                         + "}\n");
 
         assertThat(compilation).hadErrorContaining(
-                "Failed to find any suitable creation methods to build this class");
+                "Failed to find any suitable creation methods to build class "
+                        + "\"com.example.appsearch.Gift\"");
         assertThat(compilation).hadWarningContainingMatch(
                 "Field cannot be written .* failed to find a suitable setter for field \"price\"");
         assertThat(compilation).hadWarningContaining(
@@ -368,7 +620,8 @@
                         + "}\n");
 
         assertThat(compilation).hadErrorContaining(
-                "Failed to find any suitable creation methods to build this class");
+                "Failed to find any suitable creation methods to build class "
+                        + "\"com.example.appsearch.Gift\"");
         assertThat(compilation).hadWarningContainingMatch(
                 "Field cannot be written .* failed to find a suitable setter for field \"price\"");
         assertThat(compilation).hadWarningContaining(
@@ -407,7 +660,8 @@
                         + "}\n");
 
         assertThat(compilation).hadErrorContaining(
-                "Failed to find any suitable creation methods to build this class");
+                "Failed to find any suitable creation methods to build class "
+                        + "\"com.example.appsearch.Gift\"");
         assertThat(compilation).hadWarningContaining("Creation method is private");
     }
 
@@ -423,7 +677,8 @@
                         + "}\n");
 
         assertThat(compilation).hadErrorContaining(
-                "Failed to find any suitable creation methods to build this class");
+                "Failed to find any suitable creation methods to build class "
+                        + "\"com.example.appsearch.Gift\"");
         assertThat(compilation).hadWarningContaining(
                 "doesn't have parameters for the following fields: [id]");
     }
@@ -541,7 +796,8 @@
                         + "}\n");
 
         assertThat(compilation).hadErrorContaining(
-                "Failed to find any suitable creation methods to build this class");
+                "Failed to find any suitable creation methods to build class "
+                        + "\"com.example.appsearch.Gift\"");
         assertThat(compilation).hadWarningContaining(
                 "Parameter \"unknownParam\" is not an AppSearch parameter; don't know how to "
                         + "supply it");
@@ -917,6 +1173,45 @@
     }
 
     @Test
+    public void testMultipleNestedAutoValueDocument() throws IOException {
+        Compilation compilation = compile(
+                "import com.google.auto.value.AutoValue;\n"
+                        + "import com.google.auto.value.AutoValue.*;\n"
+                        + "@Document\n"
+                        + "@AutoValue\n"
+                        + "public abstract class Gift {\n"
+                        + "  @CopyAnnotations @Document.Id abstract String id();\n"
+                        + "  @CopyAnnotations @Document.Namespace abstract String namespace();\n"
+                        + "  @CopyAnnotations\n"
+                        + "  @Document.StringProperty abstract String property();\n"
+                        + "  public static Gift create(String id, String namespace, String"
+                        + " property) {\n"
+                        + "    return new AutoValue_Gift(id, namespace, property);\n"
+                        + "  }\n"
+                        + "  @Document\n"
+                        + "  @AutoValue\n"
+                        + "  abstract static class B {\n"
+                        + "    @CopyAnnotations @Document.Id abstract String id();\n"
+                        + "    @CopyAnnotations @Document.Namespace abstract String namespace();\n"
+                        + "    public static B create(String id, String namespace) {\n"
+                        + "      return new AutoValue_Gift_B(id, namespace);\n"
+                        + "    }\n"
+                        + "  }\n"
+                        + "  @Document\n"
+                        + "  @AutoValue\n"
+                        + "  abstract static class A {\n"
+                        + "    @CopyAnnotations @Document.Id abstract String id();\n"
+                        + "    @CopyAnnotations @Document.Namespace abstract String namespace();\n"
+                        + "    public static A create(String id, String namespace) {\n"
+                        + "      return new AutoValue_Gift_A(id, namespace);\n"
+                        + "    }\n"
+                        + "  }\n"
+                        + "}\n");
+        assertThat(compilation).succeededWithoutWarnings();
+        checkEqualsGolden("AutoValue_Gift_A.java");
+    }
+
+    @Test
     public void testAutoValueDocument() throws IOException {
         Compilation compilation = compile(
                 "import com.google.auto.value.AutoValue;\n"
@@ -935,7 +1230,7 @@
                         + "}\n");
 
         assertThat(compilation).succeededWithoutWarnings();
-        checkEqualsGolden("Gift.java");
+        checkEqualsGolden("AutoValue_Gift.java");
     }
 
     @Test
@@ -956,6 +1251,35 @@
         checkEqualsGolden("Gift$$__InnerGift.java");
     }
 
+    @Test
+    public void testOneBadConstructor() throws Exception {
+        Compilation compilation = compile(
+                "@Document\n"
+                        + "public class Gift {\n"
+                        + "  @Document.Id private String mId;\n"
+                        + "  @Document.Namespace private String mNamespace;\n"
+                        + "  public Gift(String id, String namespace, boolean nonAppSearchParam){\n"
+                        + "    mId = id;\n"
+                        + "    mNamespace = namespace;\n"
+                        + "  }\n"
+                        + "  public Gift(String id){\n"
+                        + "    mId = id;\n"
+                        + "  }\n"
+                        + "  public String getId(){"
+                        + "    return mId;"
+                        + "  }\n"
+                        + "  public String getNamespace(){"
+                        + "    return mNamespace;"
+                        + "  }\n"
+                        + "  public void setNamespace(String namespace){\n"
+                        + "    mNamespace = namespace;"
+                        + "  }\n"
+                        + "}\n");
+
+        assertThat(compilation).succeededWithoutWarnings();
+        checkEqualsGolden("Gift.java");
+    }
+
     private Compilation compile(String classBody) {
         return compile("Gift", classBody);
     }
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSingleTypes.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSingleTypes.JAVA
index 47ce7aa..968b553 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSingleTypes.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSingleTypes.JAVA
@@ -14,7 +14,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_field.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_field.JAVA
index 1814a8e..68db9fc 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_field.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_field.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_getter.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_getter.JAVA
index e442931..70bfe77 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_getter.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_getter.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocument.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocument.JAVA
index 47e6df5..ab783ed 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocument.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocument.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__AutoValue_Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testCardinality.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testCardinality.JAVA
index 1e87ce2..0f275a7 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testCardinality.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testCardinality.JAVA
@@ -12,7 +12,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDifferentTypeName.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDifferentTypeName.JAVA
index 6441fce..7a7bca6 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDifferentTypeName.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDifferentTypeName.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "DifferentType";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testGetterAndSetterFunctions_withFieldName.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testGetterAndSetterFunctions_withFieldName.JAVA
index 8b49559..8ce94af 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testGetterAndSetterFunctions_withFieldName.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testGetterAndSetterFunctions_withFieldName.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testIndexingType.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testIndexingType.JAVA
index 662376d..810a16f 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testIndexingType.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testIndexingType.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInnerClass.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInnerClass.JAVA
index 08987f0..ac333bc 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInnerClass.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInnerClass.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift$$__InnerGift implements DocumentClassFactory<Gift.InnerGift> {
+public final class $$__AppSearch__Gift$$__InnerGift implements DocumentClassFactory<Gift.InnerGift> {
   public static final String SCHEMA_NAME = "InnerGift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testMultipleNestedAutoValueDocument.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testMultipleNestedAutoValueDocument.JAVA
new file mode 100644
index 0000000..31c563e
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testMultipleNestedAutoValueDocument.JAVA
@@ -0,0 +1,40 @@
+package com.example.appsearch;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.DocumentClassFactory;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import java.lang.Override;
+import java.lang.String;
+import javax.annotation.processing.Generated;
+
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__AutoValue_Gift_A implements DocumentClassFactory<Gift.A> {
+  public static final String SCHEMA_NAME = "A";
+
+  @Override
+  public String getSchemaName() {
+    return SCHEMA_NAME;
+  }
+
+  @Override
+  public AppSearchSchema getSchema() throws AppSearchException {
+    return new AppSearchSchema.Builder(SCHEMA_NAME)
+          .build();
+  }
+
+  @Override
+  public GenericDocument toGenericDocument(Gift.A document) throws AppSearchException {
+    GenericDocument.Builder<?> builder =
+        new GenericDocument.Builder<>(document.namespace(), document.id(), SCHEMA_NAME);
+    return builder.build();
+  }
+
+  @Override
+  public Gift.A fromGenericDocument(GenericDocument genericDoc) throws AppSearchException {
+    String idConv = genericDoc.getId();
+    String namespaceConv = genericDoc.getNamespace();
+    Gift.A document = Gift.A.create(idConv, namespaceConv);
+    return document;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testOneBadConstructor.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testOneBadConstructor.JAVA
new file mode 100644
index 0000000..f0d8cb5
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testOneBadConstructor.JAVA
@@ -0,0 +1,41 @@
+package com.example.appsearch;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.DocumentClassFactory;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import java.lang.Override;
+import java.lang.String;
+import javax.annotation.processing.Generated;
+
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+  public static final String SCHEMA_NAME = "Gift";
+
+  @Override
+  public String getSchemaName() {
+    return SCHEMA_NAME;
+  }
+
+  @Override
+  public AppSearchSchema getSchema() throws AppSearchException {
+    return new AppSearchSchema.Builder(SCHEMA_NAME)
+          .build();
+  }
+
+  @Override
+  public GenericDocument toGenericDocument(Gift document) throws AppSearchException {
+    GenericDocument.Builder<?> builder =
+        new GenericDocument.Builder<>(document.getNamespace(), document.getId(), SCHEMA_NAME);
+    return builder.build();
+  }
+
+  @Override
+  public Gift fromGenericDocument(GenericDocument genericDoc) throws AppSearchException {
+    String mIdConv = genericDoc.getId();
+    String mNamespaceConv = genericDoc.getNamespace();
+    Gift document = new Gift(mIdConv);
+    document.setNamespace(mNamespaceConv);
+    return document;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPropertyName.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPropertyName.JAVA
index 155394b..f6672c0 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPropertyName.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPropertyName.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_MultipleGetters.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_MultipleGetters.JAVA
index 9ab9158..8efe655 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_MultipleGetters.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_MultipleGetters.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_isGetterForBoolean.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_isGetterForBoolean.JAVA
index 17c4bcd..9e828fd 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_isGetterForBoolean.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_isGetterForBoolean.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRepeatedFields.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRepeatedFields.JAVA
index e12c97f..cd2dd3b 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRepeatedFields.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRepeatedFields.JAVA
@@ -14,7 +14,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuccessSimple.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuccessSimple.JAVA
index 49a157ac..b147ff4 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuccessSimple.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuccessSimple.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
@@ -50,7 +50,6 @@
     boolean catConv = genericDoc.getPropertyBoolean("cat");
     boolean dogConv = genericDoc.getPropertyBoolean("dog");
     Gift document = new Gift(dogConv, idConv, namespaceConv);
-    document.namespace = namespaceConv;
     document.price = priceConv;
     document.cat = catConv;
     return document;
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClass.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClass.JAVA
new file mode 100644
index 0000000..ef1410d
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClass.JAVA
@@ -0,0 +1,76 @@
+package com.example.appsearch;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.DocumentClassFactory;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import java.lang.Override;
+import java.lang.String;
+import javax.annotation.processing.Generated;
+
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__Gift$$__FooGift implements DocumentClassFactory<Gift.FooGift> {
+  public static final String SCHEMA_NAME = "Ancestor";
+
+  @Override
+  public String getSchemaName() {
+    return SCHEMA_NAME;
+  }
+
+  @Override
+  public AppSearchSchema getSchema() throws AppSearchException {
+    return new AppSearchSchema.Builder(SCHEMA_NAME)
+          .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("note")
+            .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+            .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_NONE)
+            .setIndexingType(AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_NONE)
+            .build())
+          .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("sender")
+            .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+            .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_NONE)
+            .setIndexingType(AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_NONE)
+            .build())
+          .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder("foo")
+            .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+            .build())
+          .build();
+  }
+
+  @Override
+  public GenericDocument toGenericDocument(Gift.FooGift document) throws AppSearchException {
+    GenericDocument.Builder<?> builder =
+        new GenericDocument.Builder<>(document.namespace, document.id, SCHEMA_NAME);
+    builder.setScore(document.score);
+    String noteCopy = document.note;
+    if (noteCopy != null) {
+      builder.setPropertyString("note", noteCopy);
+    }
+    String senderCopy = document.sender;
+    if (senderCopy != null) {
+      builder.setPropertyString("sender", senderCopy);
+    }
+    builder.setPropertyBoolean("foo", document.foo);
+    return builder.build();
+  }
+
+  @Override
+  public Gift.FooGift fromGenericDocument(GenericDocument genericDoc) throws AppSearchException {
+    String idConv = genericDoc.getId();
+    String namespaceConv = genericDoc.getNamespace();
+    int scoreConv = genericDoc.getScore();
+    String[] noteCopy = genericDoc.getPropertyStringArray("note");
+    String noteConv = null;
+    if (noteCopy != null && noteCopy.length != 0) {
+      noteConv = noteCopy[0];
+    }
+    String[] senderCopy = genericDoc.getPropertyStringArray("sender");
+    String senderConv = null;
+    if (senderCopy != null && senderCopy.length != 0) {
+      senderConv = senderCopy[0];
+    }
+    boolean fooConv = genericDoc.getPropertyBoolean("foo");
+    Gift.FooGift document = new Gift.FooGift(idConv, namespaceConv, noteConv, scoreConv, fooConv);
+    document.sender = senderConv;
+    return document;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClassPojoAncestor.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClassPojoAncestor.JAVA
new file mode 100644
index 0000000..f51fa57
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClassPojoAncestor.JAVA
@@ -0,0 +1,76 @@
+package com.example.appsearch;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.DocumentClassFactory;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import java.lang.Override;
+import java.lang.String;
+import javax.annotation.processing.Generated;
+
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__Gift$$__FooGift implements DocumentClassFactory<Gift.FooGift> {
+  public static final String SCHEMA_NAME = "Parent";
+
+  @Override
+  public String getSchemaName() {
+    return SCHEMA_NAME;
+  }
+
+  @Override
+  public AppSearchSchema getSchema() throws AppSearchException {
+    return new AppSearchSchema.Builder(SCHEMA_NAME)
+          .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("note")
+            .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+            .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_NONE)
+            .setIndexingType(AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_NONE)
+            .build())
+          .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("sender")
+            .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+            .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_NONE)
+            .setIndexingType(AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_NONE)
+            .build())
+          .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder("foo")
+            .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+            .build())
+          .build();
+  }
+
+  @Override
+  public GenericDocument toGenericDocument(Gift.FooGift document) throws AppSearchException {
+    GenericDocument.Builder<?> builder =
+        new GenericDocument.Builder<>(document.namespace, document.id, SCHEMA_NAME);
+    builder.setScore(document.score);
+    String noteCopy = document.note;
+    if (noteCopy != null) {
+      builder.setPropertyString("note", noteCopy);
+    }
+    String senderCopy = document.sender;
+    if (senderCopy != null) {
+      builder.setPropertyString("sender", senderCopy);
+    }
+    builder.setPropertyBoolean("foo", document.foo);
+    return builder.build();
+  }
+
+  @Override
+  public Gift.FooGift fromGenericDocument(GenericDocument genericDoc) throws AppSearchException {
+    String idConv = genericDoc.getId();
+    String namespaceConv = genericDoc.getNamespace();
+    int scoreConv = genericDoc.getScore();
+    String[] noteCopy = genericDoc.getPropertyStringArray("note");
+    String noteConv = null;
+    if (noteCopy != null && noteCopy.length != 0) {
+      noteConv = noteCopy[0];
+    }
+    String[] senderCopy = genericDoc.getPropertyStringArray("sender");
+    String senderConv = null;
+    if (senderCopy != null && senderCopy.length != 0) {
+      senderConv = senderCopy[0];
+    }
+    boolean fooConv = genericDoc.getPropertyBoolean("foo");
+    Gift.FooGift document = new Gift.FooGift(idConv, namespaceConv, noteConv, scoreConv, fooConv);
+    document.sender = senderConv;
+    return document;
+  }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testToGenericDocument_allSupportedTypes.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testToGenericDocument_allSupportedTypes.JAVA
index 8b8c007..a3dc0a5 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testToGenericDocument_allSupportedTypes.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testToGenericDocument_allSupportedTypes.JAVA
@@ -19,7 +19,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testTokenizerType.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testTokenizerType.JAVA
index 3f4b783..b6ccd81 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testTokenizerType.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testTokenizerType.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleConventions.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleConventions.JAVA
index 049d8d1..f5e50d2 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleConventions.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleConventions.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleSetters.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleSetters.JAVA
index 9ab9158..8efe655 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleSetters.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleSetters.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_usableFactoryMethod_unusableConstructor.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_usableFactoryMethod_unusableConstructor.JAVA
index 83bbb53..d0663af 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_usableFactoryMethod_unusableConstructor.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_usableFactoryMethod_unusableConstructor.JAVA
@@ -9,7 +9,7 @@
 import javax.annotation.processing.Generated;
 
 @Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
   public static final String SCHEMA_NAME = "Gift";
 
   @Override
@@ -40,8 +40,6 @@
     String namespaceConv = genericDoc.getNamespace();
     int priceConv = (int) genericDoc.getPropertyLong("price");
     Gift document = Gift.create(idConv, namespaceConv, priceConv);
-    document.namespace = namespaceConv;
-    document.price = priceConv;
     return document;
   }
 }
diff --git a/appsearch/exportToFramework.py b/appsearch/exportToFramework.py
index e3d4c59..48ec64b 100755
--- a/appsearch/exportToFramework.py
+++ b/appsearch/exportToFramework.py
@@ -71,7 +71,7 @@
         '../../../prebuilts/tools/common/google-java-format/google-java-format')
 
 # Miscellaneous constants
-CHANGEID_FILE_NAME = 'synced_jetpack_changeid.txt'
+SHA_FILE_NAME = 'synced_jetpack_sha.txt'
 
 
 class ExportToFramework:
@@ -96,6 +96,10 @@
             print('Skipping: "%s" -> "%s"' % (source_path, dest_path), file=sys.stderr)
             return
 
+        copyToPath = re.search(r'@exportToFramework:copyToPath\(([^)]+)\)', contents)
+        if copyToPath:
+          dest_path = os.path.join(self._framework_appsearch_root, copyToPath.group(1))
+
         print('Copy: "%s" -> "%s"' % (source_path, dest_path), file=sys.stderr)
         if transform_func:
             contents = transform_func(contents)
@@ -133,7 +137,7 @@
                     flags=re.MULTILINE)
 
         # Apply in-place replacements
-        return (contents
+        contents = (contents
             .replace('androidx.appsearch.app', 'android.app.appsearch')
             .replace(
                     'androidx.appsearch.localstorage.',
@@ -161,11 +165,20 @@
             .replace('@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)', '')
             .replace('Preconditions.checkNotNull(', 'Objects.requireNonNull(')
             .replace('ObjectsCompat.', 'Objects.')
+
             .replace('/*@exportToFramework:CurrentTimeMillisLong*/', '@CurrentTimeMillisLong')
             .replace('/*@exportToFramework:UnsupportedAppUsage*/', '@UnsupportedAppUsage')
             .replace('<!--@exportToFramework:hide-->', '@hide')
             .replace('// @exportToFramework:skipFile()', '')
         )
+        contents = re.sub(r'\/\/ @exportToFramework:copyToPath\([^)]+\)', '', contents)
+
+        # Jetpack methods have the Async suffix, but framework doesn't. Strip the Async suffix
+        # to allow the same documentation to compile for both.
+        contents = re.sub(r'(#[a-zA-Z0-9_]+)Async}', r'\1}', contents)
+        contents = re.sub(
+                r'(\@see [^#]+#[a-zA-Z0-9_]+)Async$', r'\1', contents, flags=re.MULTILINE)
+        return contents
 
     def _TransformTestCode(self, contents):
         contents = (contents
@@ -318,19 +331,26 @@
         self._ExportImplCode()
         self._FormatWrittenFiles()
 
-    def WriteChangeIdFile(self, changeid):
-        """Copies the changeid of the most recent public CL into a file on the framework side.
+    def WriteShaFile(self, sha):
+        """Copies the git sha of the most recent public CL into a file on the framework side.
 
         This file is used for tracking, to determine what framework is synced to.
 
-        You must always provide a changeid of an exported, preferably even submitted CL. If you
-        abandon the CL pointed to by this changeid, the next person syncing framework will be unable
-        to find what CL it is synced to.
+        You must always provide a sha of a submitted submitted git commit. If you abandon the CL
+        pointed to by this sha, the next person syncing framework will be unable to find what CL it
+        is synced to.
+
+        The previous content of the sha file, if any, is returned.
         """
-        file_path = os.path.join(self._framework_appsearch_root, CHANGEID_FILE_NAME)
+        file_path = os.path.join(self._framework_appsearch_root, SHA_FILE_NAME)
+        old_sha = None
+        if os.path.isfile(file_path):
+          with open(file_path, 'r') as fh:
+              old_sha = fh.read().rstrip()
         with open(file_path, 'w') as fh:
-            print(changeid, file=fh)
+            print(sha, file=fh)
         print('Wrote "%s"' % file_path)
+        return old_sha
 
 
 if __name__ == '__main__':
@@ -339,6 +359,12 @@
                   sys.argv[0]),
               file=sys.stderr)
         sys.exit(1)
+    if sys.argv[2].startswith('I'):
+        print('Error: Git sha "%s" looks like a changeid. Please provide a git sha instead.' % (
+                  sys.argv[2]),
+              file=sys.stderr)
+        sys.exit(1)
+
     source_dir = os.path.normpath(os.path.dirname(sys.argv[0]))
     dest_dir = os.path.normpath(sys.argv[1])
     dest_dir = os.path.join(dest_dir, 'packages/modules/AppSearch')
@@ -349,4 +375,10 @@
         sys.exit(1)
     exporter = ExportToFramework(source_dir, dest_dir)
     exporter.ExportCode()
-    exporter.WriteChangeIdFile(sys.argv[2])
+
+    # Update the sha file
+    new_sha = sys.argv[2]
+    old_sha = exporter.WriteShaFile(new_sha)
+    if old_sha and old_sha != new_sha:
+      print('Command to diff old version to new version:')
+      print('  git log %s..%s -- appsearch/' % (old_sha, new_sha))
diff --git a/arch/core/core-testing/lint-baseline.xml b/arch/core/core-testing/lint-baseline.xml
index b92baa0..0004e63 100644
--- a/arch/core/core-testing/lint-baseline.xml
+++ b/arch/core/core-testing/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
diff --git a/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml b/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
index 25e882a..058d0f6 100644
--- a/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
+++ b/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
@@ -79,7 +79,6 @@
             </intent-filter>
         </activity>
 
-
         <activity
             android:name=".BackgroundWorkActivity"
             android:exported="true">
@@ -90,6 +89,16 @@
         </activity>
 
         <activity
+            android:name=".SingleColorActivity"
+            android:exported="true"
+            android:theme="@style/Theme.AppCompat.NoActionBar">
+            <intent-filter>
+                <action android:name="androidx.benchmark.integration.macrobenchmark.target.SINGLE_COLOR_ACTIVITY" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <activity
             android:name=".NotExportedActivity"
             android:exported="false"> <!-- intentionally not exported -->
             <intent-filter>
diff --git a/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/SingleColorActivity.kt b/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/SingleColorActivity.kt
new file mode 100644
index 0000000..6aea7c0
--- /dev/null
+++ b/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/SingleColorActivity.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2022 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.benchmark.integration.macrobenchmark.target
+
+import android.graphics.Color
+import android.os.Build
+import android.os.Bundle
+import android.view.Window
+import android.view.WindowInsets
+import androidx.annotation.DoNotInline
+import androidx.annotation.RequiresApi
+import androidx.appcompat.app.AppCompatActivity
+import androidx.constraintlayout.widget.ConstraintLayout
+
+class SingleColorActivity : AppCompatActivity() {
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.single_color)
+        if (Build.VERSION.SDK_INT >= 30) {
+            Api30Fullscreen.hideStatusBar(getWindow())
+        }
+
+        val bg = findViewById<ConstraintLayout>(R.id.color_background)
+        val color = intent.getIntExtra(BG_COLOR, Color.RED)
+        bg.setBackgroundColor(color)
+    }
+
+    companion object {
+        const val BG_COLOR = "bg_color"
+    }
+
+    @RequiresApi(30)
+    private object Api30Fullscreen {
+        @JvmStatic
+        @DoNotInline
+        fun hideStatusBar(window: Window) {
+            window.insetsController?.hide(WindowInsets.Type.statusBars())
+        }
+    }
+}
diff --git a/benchmark/integration-tests/macrobenchmark-target/src/main/res/layout/single_color.xml b/benchmark/integration-tests/macrobenchmark-target/src/main/res/layout/single_color.xml
new file mode 100644
index 0000000..52601f5
--- /dev/null
+++ b/benchmark/integration-tests/macrobenchmark-target/src/main/res/layout/single_color.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2022 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.
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/color_background"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:background="#FF000000">
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/SingleColorPowerBenchmark.kt b/benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/SingleColorPowerBenchmark.kt
new file mode 100644
index 0000000..70de30b
--- /dev/null
+++ b/benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/SingleColorPowerBenchmark.kt
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2022 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.benchmark.integration.macrobenchmark
+
+import android.os.Bundle
+import android.content.Intent
+import android.graphics.Color
+import androidx.benchmark.macro.BatteryCharge
+import androidx.benchmark.macro.CompilationMode
+import androidx.benchmark.macro.ExperimentalMetricApi
+import androidx.benchmark.macro.PowerCategory
+import androidx.benchmark.macro.PowerCategoryDisplayLevel
+import androidx.benchmark.macro.PowerMetric
+import androidx.benchmark.macro.PowerRail
+import androidx.benchmark.macro.StartupMode
+import androidx.benchmark.macro.junit4.MacrobenchmarkRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+@SdkSuppress(minSdkVersion = 29)
+@OptIn(ExperimentalMetricApi::class)
+class SingleColorPowerBenchmark {
+    @get:Rule
+    val benchmarkRule = MacrobenchmarkRule()
+
+    @Before
+    fun validateDeviceState() {
+        assumeTrue(PowerRail.hasMetrics())
+        assumeTrue(BatteryCharge.hasMinimumCharge())
+    }
+
+    fun measureScreenColorPower(color: Int) {
+        benchmarkRule.measureRepeated(
+            packageName = PACKAGE_NAME,
+            metrics = listOf(
+                PowerMetric(
+                    PowerMetric.Power(
+                        mapOf(PowerCategory.DISPLAY to PowerCategoryDisplayLevel.BREAKDOWN)
+                    )
+                ),
+            ),
+            compilationMode = CompilationMode.None(),
+            startupMode = StartupMode.COLD,
+            iterations = 5,
+            setupBlock = {
+                val intent = Intent()
+                val bundle = Bundle()
+                bundle.putInt("bg_color", color)
+                intent.action = ACTION
+                intent.putExtras(bundle)
+                startActivityAndWait(intent)
+            }
+        ) {
+            Thread.sleep(DURATION_MS.toLong())
+        }
+    }
+
+    @Test
+    fun measureDarkScreenPower() {
+        measureScreenColorPower(Color.BLACK)
+    }
+
+    @Test
+    fun measureLightScreenPower() {
+        measureScreenColorPower(Color.WHITE)
+    }
+
+    companion object {
+        private const val PACKAGE_NAME = "androidx.benchmark.integration.macrobenchmark.target"
+        private const val ACTION = "$PACKAGE_NAME.SINGLE_COLOR_ACTIVITY"
+        private const val DURATION_MS = 5000
+    }
+}
\ No newline at end of file
diff --git a/biometric/biometric/api/current.txt b/biometric/biometric/api/current.txt
index 6d8f18f..7e279b8 100644
--- a/biometric/biometric/api/current.txt
+++ b/biometric/biometric/api/current.txt
@@ -71,9 +71,11 @@
     ctor public BiometricPrompt.CryptoObject(javax.crypto.Cipher);
     ctor public BiometricPrompt.CryptoObject(javax.crypto.Mac);
     ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public BiometricPrompt.CryptoObject(android.security.identity.IdentityCredential);
+    ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public BiometricPrompt.CryptoObject(android.security.identity.PresentationSession);
     method public javax.crypto.Cipher? getCipher();
     method @RequiresApi(android.os.Build.VERSION_CODES.R) public android.security.identity.IdentityCredential? getIdentityCredential();
     method public javax.crypto.Mac? getMac();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public android.security.identity.PresentationSession? getPresentationSession();
     method public java.security.Signature? getSignature();
   }
 
diff --git a/biometric/biometric/api/public_plus_experimental_current.txt b/biometric/biometric/api/public_plus_experimental_current.txt
index 6d8f18f..7e279b8 100644
--- a/biometric/biometric/api/public_plus_experimental_current.txt
+++ b/biometric/biometric/api/public_plus_experimental_current.txt
@@ -71,9 +71,11 @@
     ctor public BiometricPrompt.CryptoObject(javax.crypto.Cipher);
     ctor public BiometricPrompt.CryptoObject(javax.crypto.Mac);
     ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public BiometricPrompt.CryptoObject(android.security.identity.IdentityCredential);
+    ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public BiometricPrompt.CryptoObject(android.security.identity.PresentationSession);
     method public javax.crypto.Cipher? getCipher();
     method @RequiresApi(android.os.Build.VERSION_CODES.R) public android.security.identity.IdentityCredential? getIdentityCredential();
     method public javax.crypto.Mac? getMac();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public android.security.identity.PresentationSession? getPresentationSession();
     method public java.security.Signature? getSignature();
   }
 
diff --git a/biometric/biometric/api/restricted_current.txt b/biometric/biometric/api/restricted_current.txt
index 6d8f18f..7e279b8 100644
--- a/biometric/biometric/api/restricted_current.txt
+++ b/biometric/biometric/api/restricted_current.txt
@@ -71,9 +71,11 @@
     ctor public BiometricPrompt.CryptoObject(javax.crypto.Cipher);
     ctor public BiometricPrompt.CryptoObject(javax.crypto.Mac);
     ctor @RequiresApi(android.os.Build.VERSION_CODES.R) public BiometricPrompt.CryptoObject(android.security.identity.IdentityCredential);
+    ctor @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public BiometricPrompt.CryptoObject(android.security.identity.PresentationSession);
     method public javax.crypto.Cipher? getCipher();
     method @RequiresApi(android.os.Build.VERSION_CODES.R) public android.security.identity.IdentityCredential? getIdentityCredential();
     method public javax.crypto.Mac? getMac();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public android.security.identity.PresentationSession? getPresentationSession();
     method public java.security.Signature? getSignature();
   }
 
diff --git a/biometric/biometric/lint-baseline.xml b/biometric/biometric/lint-baseline.xml
index 54800a2..4672a5b 100644
--- a/biometric/biometric/lint-baseline.xml
+++ b/biometric/biometric/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
diff --git a/biometric/biometric/src/main/java/androidx/biometric/BiometricPrompt.java b/biometric/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
index 2e3fb49..07442e6 100644
--- a/biometric/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
+++ b/biometric/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
@@ -230,6 +230,7 @@
         @Nullable private final Cipher mCipher;
         @Nullable private final Mac mMac;
         @Nullable private final android.security.identity.IdentityCredential mIdentityCredential;
+        @Nullable private final android.security.identity.PresentationSession mPresentationSession;
 
         /**
          * Creates a crypto object that wraps the given signature object.
@@ -241,6 +242,7 @@
             mCipher = null;
             mMac = null;
             mIdentityCredential = null;
+            mPresentationSession = null;
         }
 
         /**
@@ -253,6 +255,7 @@
             mCipher = cipher;
             mMac = null;
             mIdentityCredential = null;
+            mPresentationSession = null;
         }
 
         /**
@@ -265,6 +268,7 @@
             mCipher = null;
             mMac = mac;
             mIdentityCredential = null;
+            mPresentationSession = null;
         }
 
         /**
@@ -280,6 +284,23 @@
             mCipher = null;
             mMac = null;
             mIdentityCredential = identityCredential;
+            mPresentationSession = null;
+        }
+
+        /**
+         * Creates a crypto object that wraps the given presentation session object.
+         *
+         * @param presentationSession The presentation session to be associated with this crypto
+         *                           object.
+         */
+        @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+        public CryptoObject(
+                @NonNull android.security.identity.PresentationSession presentationSession) {
+            mSignature = null;
+            mCipher = null;
+            mMac = null;
+            mIdentityCredential = null;
+            mPresentationSession = presentationSession;
         }
 
         /**
@@ -322,6 +343,17 @@
         public android.security.identity.IdentityCredential getIdentityCredential() {
             return mIdentityCredential;
         }
+
+        /**
+         * Gets the presentation session object associated with this crypto object.
+         *
+         * @return The presentation session, or {@code null} if none is associated with this object.
+         */
+        @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+        @Nullable
+        public android.security.identity.PresentationSession getPresentationSession() {
+            return mPresentationSession;
+        }
     }
 
     /**
diff --git a/biometric/biometric/src/main/java/androidx/biometric/CryptoObjectUtils.java b/biometric/biometric/src/main/java/androidx/biometric/CryptoObjectUtils.java
index 2f28928..4cc0c30 100644
--- a/biometric/biometric/src/main/java/androidx/biometric/CryptoObjectUtils.java
+++ b/biometric/biometric/src/main/java/androidx/biometric/CryptoObjectUtils.java
@@ -103,6 +103,15 @@
             }
         }
 
+        // Presentation session is only supported on API 33 and above.
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+            final android.security.identity.PresentationSession presentationSession =
+                    Api33Impl.getPresentationSession(cryptoObject);
+            if (presentationSession != null) {
+                return new BiometricPrompt.CryptoObject(presentationSession);
+            }
+        }
+
         return null;
     }
 
@@ -146,6 +155,15 @@
             }
         }
 
+        // Presentation session is only supported on API 33 and above.
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+            final android.security.identity.PresentationSession presentationSession =
+                    cryptoObject.getPresentationSession();
+            if (presentationSession != null) {
+                return Api33Impl.create(presentationSession);
+            }
+        }
+
         return null;
     }
 
@@ -226,6 +244,12 @@
             return null;
         }
 
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
+                && cryptoObject.getPresentationSession() != null) {
+            Log.e(TAG, "Presentation session is not supported by FingerprintManager.");
+            return null;
+        }
+
         return null;
     }
 
@@ -274,7 +298,45 @@
     }
 
     /**
-     * Nested class to avoid verification errors for methods introduced in Android 9.0 (API 28).
+     * Nested class to avoid verification errors for methods introduced in Android 13.0 (API 33).
+     */
+    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+    private static class Api33Impl {
+        // Prevent instantiation.
+        private Api33Impl() {}
+
+        /**
+         * Creates an instance of the framework class
+         * {@link android.hardware.biometrics.BiometricPrompt.CryptoObject} from the given
+         * presentation session.
+         *
+         * @param presentationSession The presentation session object to be wrapped.
+         * @return An instance of {@link android.hardware.biometrics.BiometricPrompt.CryptoObject}.
+         */
+        @SuppressWarnings("deprecation")
+        @NonNull
+        static android.hardware.biometrics.BiometricPrompt.CryptoObject create(
+                @NonNull android.security.identity.PresentationSession presentationSession) {
+            return new android.hardware.biometrics.BiometricPrompt.CryptoObject(presentationSession);
+        }
+
+        /**
+         * Gets the presentation session associated with the given crypto object, if any.
+         *
+         * @param crypto An instance of
+         *               {@link android.hardware.biometrics.BiometricPrompt.CryptoObject}.
+         * @return The wrapped presentation session object, or {@code null}.
+         */
+        @SuppressWarnings("deprecation")
+        @Nullable
+        static android.security.identity.PresentationSession getPresentationSession(
+                @NonNull android.hardware.biometrics.BiometricPrompt.CryptoObject crypto) {
+            return crypto.getPresentationSession();
+        }
+    }
+
+    /**
+     * Nested class to avoid verification errors for methods introduced in Android 11.0 (API 30).
      */
     @RequiresApi(Build.VERSION_CODES.R)
     private static class Api30Impl {
diff --git a/biometric/biometric/src/test/java/androidx/biometric/CancellationSignalProviderTest.java b/biometric/biometric/src/test/java/androidx/biometric/CancellationSignalProviderTest.java
index 8547d3a..fe7c7be 100644
--- a/biometric/biometric/src/test/java/androidx/biometric/CancellationSignalProviderTest.java
+++ b/biometric/biometric/src/test/java/androidx/biometric/CancellationSignalProviderTest.java
@@ -25,6 +25,7 @@
 import android.os.Build;
 
 import androidx.annotation.NonNull;
+import androidx.test.filters.SdkSuppress;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -38,6 +39,7 @@
 @RunWith(RobolectricTestRunner.class)
 @Config(instrumentedPackages = { "androidx.core.os" })
 @DoNotInstrument
+@SdkSuppress(minSdkVersion = 16)
 public class CancellationSignalProviderTest {
     @Mock private android.os.CancellationSignal mBiometricCancellationSignal;
     @Mock private androidx.core.os.CancellationSignal mFingerprintCancellationSignal;
diff --git a/biometric/biometric/src/test/java/androidx/biometric/CryptoObjectUtilsTest.java b/biometric/biometric/src/test/java/androidx/biometric/CryptoObjectUtilsTest.java
index 0d40707..2ef9fdf3 100644
--- a/biometric/biometric/src/test/java/androidx/biometric/CryptoObjectUtilsTest.java
+++ b/biometric/biometric/src/test/java/androidx/biometric/CryptoObjectUtilsTest.java
@@ -118,6 +118,25 @@
         assertThat(unwrappedCrypto.getIdentityCredential()).isEqualTo(identityCredential);
     }
 
+    @SuppressWarnings("deprecation")
+    @Test
+    @Config(minSdk = Build.VERSION_CODES.TIRAMISU)
+    public void testUnwrapFromBiometricPrompt_WithPresentationSessionCryptoObject() {
+        final android.security.identity.PresentationSession presentationSession =
+                mock(android.security.identity.PresentationSession.class);
+        final android.hardware.biometrics.BiometricPrompt.CryptoObject wrappedCrypto =
+                new android.hardware.biometrics.BiometricPrompt.CryptoObject(presentationSession);
+
+        final BiometricPrompt.CryptoObject unwrappedCrypto =
+                CryptoObjectUtils.unwrapFromBiometricPrompt(wrappedCrypto);
+
+        assertThat(unwrappedCrypto).isNotNull();
+        assertThat(unwrappedCrypto.getCipher()).isNull();
+        assertThat(unwrappedCrypto.getSignature()).isNull();
+        assertThat(unwrappedCrypto.getMac()).isNull();
+        assertThat(unwrappedCrypto.getPresentationSession()).isEqualTo(presentationSession);
+    }
+
     @Test
     @Config(minSdk = Build.VERSION_CODES.P)
     public void testWrapForBiometricPrompt_WithNullCryptoObject() {
@@ -187,6 +206,25 @@
         assertThat(wrappedCrypto.getIdentityCredential()).isEqualTo(identityCredential);
     }
 
+    @SuppressWarnings("deprecation")
+    @Test
+    @Config(minSdk = Build.VERSION_CODES.TIRAMISU)
+    public void testWrapForBiometricPrompt_WithPresentationSessionCryptoObject() {
+        final android.security.identity.PresentationSession presentationSession =
+                mock(android.security.identity.PresentationSession.class);
+        final BiometricPrompt.CryptoObject unwrappedCrypto =
+                new BiometricPrompt.CryptoObject(presentationSession);
+
+        final android.hardware.biometrics.BiometricPrompt.CryptoObject wrappedCrypto =
+                CryptoObjectUtils.wrapForBiometricPrompt(unwrappedCrypto);
+
+        assertThat(wrappedCrypto).isNotNull();
+        assertThat(wrappedCrypto.getCipher()).isNull();
+        assertThat(wrappedCrypto.getSignature()).isNull();
+        assertThat(wrappedCrypto.getMac()).isNull();
+        assertThat(wrappedCrypto.getPresentationSession()).isEqualTo(presentationSession);
+    }
+
     @Test
     public void testUnwrapFromFingerprintManager_WithNullCryptoObject() {
         assertThat(CryptoObjectUtils.unwrapFromFingerprintManager(null)).isNull();
@@ -299,4 +337,15 @@
 
         assertThat(CryptoObjectUtils.wrapForFingerprintManager(unwrappedCrypto)).isNull();
     }
+
+    @Test
+    @Config(minSdk = Build.VERSION_CODES.TIRAMISU)
+    public void testWrapForFingerprintManager_WithPresentationSessionCryptoObject() {
+        final android.security.identity.PresentationSession presentationSession =
+                mock(android.security.identity.PresentationSession.class);
+        final BiometricPrompt.CryptoObject unwrappedCrypto =
+                new BiometricPrompt.CryptoObject(presentationSession);
+
+        assertThat(CryptoObjectUtils.wrapForFingerprintManager(unwrappedCrypto)).isNull();
+    }
 }
diff --git a/biometric/integration-tests/testapp/lint-baseline.xml b/biometric/integration-tests/testapp/lint-baseline.xml
new file mode 100644
index 0000000..1fa304a
--- /dev/null
+++ b/biometric/integration-tests/testapp/lint-baseline.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+
+    <issue
+        id="NotificationPermission"
+        message="When targeting Android 13 or higher, posting a permission requires holding the `POST_NOTIFICATIONS` permission (usage from leakcanary.NotificationEventListener)">
+        <location
+            file="$GRADLE_USER_HOME/caches/transforms-3/4366a02f2b10003dc48387e903833c2d/transformed/leakcanary-android-core-2.8.1/jars/classes.jar"/>
+    </issue>
+
+</issues>
diff --git a/bluetooth/bluetooth-core/src/main/java/androidx/bluetooth/core/BluetoothManager.kt b/bluetooth/bluetooth-core/src/main/java/androidx/bluetooth/core/BluetoothManager.kt
new file mode 100644
index 0000000..6019e4f
--- /dev/null
+++ b/bluetooth/bluetooth-core/src/main/java/androidx/bluetooth/core/BluetoothManager.kt
@@ -0,0 +1,182 @@
+/*
+ * Copyright 2022 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.bluetooth.core
+
+import android.bluetooth.BluetoothAdapter as FwkBluetoothAdapter
+import android.bluetooth.BluetoothDevice as FwkBluetoothDevice
+import android.bluetooth.BluetoothGattServer as FwkBluetoothGattServer
+import android.bluetooth.BluetoothGattServerCallback as FwkBluetoothGattServerCallback
+import android.bluetooth.BluetoothManager as FwkBluetoothManager
+import android.bluetooth.BluetoothProfile as FwkBluetoothProfile
+
+import android.Manifest
+import android.content.Context
+import android.content.pm.PackageManager
+
+import androidx.annotation.RequiresFeature
+import androidx.annotation.RequiresPermission
+
+/**
+ * High level manager used to obtain an instance of an {@link BluetoothAdapter}
+ * and to conduct overall Bluetooth Management.
+ * <p>
+ * Use {@link android.content.Context#getSystemService(java.lang.String)}
+ * with {@link Context#BLUETOOTH_SERVICE} to create an {@link BluetoothManager},
+ * then call {@link #getAdapter} to obtain the {@link BluetoothAdapter}.
+ * </p>
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>
+ * For more information about using BLUETOOTH, read the <a href=
+ * "{@docRoot}guide/topics/connectivity/bluetooth.html">Bluetooth</a> developer
+ * guide.
+ * </p>
+ * </div>
+ *
+ * @see Context#getSystemService
+ * @see BluetoothAdapter#getDefaultAdapter()
+ *
+ * @hide
+ */
+// @SystemService(Context.BLUETOOTH_SERVICE)
+@RequiresFeature(
+    name = PackageManager.FEATURE_BLUETOOTH,
+    enforcement = "android.content.pm.PackageManager#hasSystemFeature"
+)
+class BluetoothManager(context: Context) {
+
+    companion object {
+        private const val TAG = "BluetoothManager"
+        private const val DBG = false
+    }
+
+    private val fwkBluetoothManager =
+        context.getSystemService(Context.BLUETOOTH_SERVICE) as FwkBluetoothManager
+
+    /**
+     * Get the BLUETOOTH Adapter for this device.
+     *
+     * @return the BLUETOOTH Adapter
+     */
+    // TODO(ofy) Change FwkBluetoothAdapter to core.BluetoothAdapter when it is available
+//    @RequiresNoPermission
+    fun getAdapter(): FwkBluetoothAdapter {
+        return fwkBluetoothManager.adapter
+    }
+
+    /**
+     * Get the current connection state of the profile to the remote device.
+     *
+     *
+     * This is not specific to any application configuration but represents
+     * the connection state of the local Bluetooth adapter for certain profile.
+     * This can be used by applications like status bar which would just like
+     * to know the state of Bluetooth.
+     *
+     * @param device Remote bluetooth device.
+     * @param profile GATT or GATT_SERVER
+     * @return State of the profile connection. One of [FwkBluetoothProfile.STATE_CONNECTED],
+     * [FwkBluetoothProfile.STATE_CONNECTING], [FwkBluetoothProfile.STATE_DISCONNECTED],
+     * [FwkBluetoothProfile.STATE_DISCONNECTING]
+     * // TODO(ofy) Change FwkBluetoothProfile to core.BluetoothProfile when it is available
+     */
+//    @RequiresLegacyBluetoothPermission
+//    @RequiresBluetoothConnectPermission
+    @RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
+    // TODO(ofy) Change FwkBluetoothDevice to core.BluetoothDevice when it is available
+    fun getConnectionState(device: FwkBluetoothDevice, profile: Int): Int {
+        return fwkBluetoothManager.getConnectionState(device, profile)
+    }
+
+    /**
+     * Get connected devices for the specified profile.
+     *
+     *
+     *  Return the set of devices which are in state [FwkBluetoothProfile.STATE_CONNECTED]
+     *  // TODO(ofy) Change FwkBluetoothProfile to core.BluetoothProfile when it is available
+     *
+     *
+     * This is not specific to any application configuration but represents
+     * the connection state of Bluetooth for this profile.
+     * This can be used by applications like status bar which would just like
+     * to know the state of Bluetooth.
+     *
+     * @param profile GATT or GATT_SERVER
+     * @return List of devices. The list will be empty on error.
+     */
+//    @RequiresLegacyBluetoothPermission
+//    @RequiresBluetoothConnectPermission
+    @RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
+    // TODO(ofy) Change FwkBluetoothDevice to core.BluetoothDevice when it is available
+    fun getConnectedDevices(profile: Int): List<FwkBluetoothDevice> {
+        return fwkBluetoothManager.getConnectedDevices(profile)
+    }
+
+    /**
+     * Get a list of devices that match any of the given connection
+     * states.
+     *
+     *
+     *  If none of the devices match any of the given states,
+     * an empty list will be returned.
+     *
+     *
+     * This is not specific to any application configuration but represents
+     * the connection state of the local Bluetooth adapter for this profile.
+     * This can be used by applications like status bar which would just like
+     * to know the state of the local adapter.
+     *
+     * @param profile GATT or GATT_SERVER
+     * @param states Array of states. States can be one of [FwkBluetoothProfile.STATE_CONNECTED],
+     * [FwkBluetoothProfile.STATE_CONNECTING], [FwkBluetoothProfile.STATE_DISCONNECTED],
+     * [FwkBluetoothProfile.STATE_DISCONNECTING],
+     * // TODO(ofy) Change FwkBluetoothProfile to core.BluetoothProfile when it is available
+     * @return List of devices. The list will be empty on error.
+     */
+//    @RequiresLegacyBluetoothPermission
+//    @RequiresBluetoothConnectPermission
+    @RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
+    // TODO(ofy) Change FwkBluetoothDevice to core.BluetoothDevice when it is available
+    fun getDevicesMatchingConnectionStates(
+        profile: Int,
+        states: IntArray
+    ): List<FwkBluetoothDevice> {
+        return fwkBluetoothManager.getDevicesMatchingConnectionStates(profile, states)
+    }
+
+    /**
+     * Open a GATT Server
+     * The callback is used to deliver results to Caller, such as connection status as well
+     * as the results of any other GATT server operations.
+     * The method returns a BluetoothGattServer instance. You can use BluetoothGattServer
+     * to conduct GATT server operations.
+     *
+     * @param context App context
+     * @param callback GATT server callback handler that will receive asynchronous callbacks.
+     * @return BluetoothGattServer instance
+     */
+//    @RequiresBluetoothConnectPermission
+    @RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
+    // TODO(ofy) Change FwkBluetoothGattServerCallback to core.BluetoothGattServerCallback when it is available
+    // TODO(ofy) Change FwkBluetoothGattServer to core.BluetoothGattServer when it is available
+    fun openGattServer(
+        context: Context,
+        callback: FwkBluetoothGattServerCallback
+    ): FwkBluetoothGattServer {
+        return fwkBluetoothManager.openGattServer(context, callback)
+    }
+}
diff --git a/bluetooth/bluetooth/build.gradle b/bluetooth/bluetooth/build.gradle
index a83aefa..7c49ae8 100644
--- a/bluetooth/bluetooth/build.gradle
+++ b/bluetooth/bluetooth/build.gradle
@@ -24,7 +24,10 @@
 
 dependencies {
     implementation(libs.kotlinStdlib)
-    implementation 'androidx.annotation:annotation:1.4.0'
+
+    api(project(":bluetooth:bluetooth-core"))
+
+    implementation "androidx.annotation:annotation:1.4.0"
 }
 
 androidx {
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothGattCharacteristic.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothGattCharacteristic.kt
index beff108..206a2c0 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothGattCharacteristic.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothGattCharacteristic.kt
@@ -21,6 +21,7 @@
 import android.bluetooth.BluetoothGattCharacteristic as FwkBluetoothGattCharacteristic
 import androidx.annotation.RequiresApi
 import androidx.bluetooth.utils.Bundleable
+import androidx.bluetooth.utils.Utils
 
 import java.util.UUID
 /**
@@ -110,6 +111,12 @@
     val descriptors
         get() = impl.descriptors
 
+    var service
+        get() = impl.service
+        internal set(value) {
+            impl.service = value
+        }
+
     constructor (uuid: UUID, properties: Int, permissions: Int) : this(
         FwkBluetoothGattCharacteristic(uuid, properties, permissions)
     )
@@ -135,6 +142,7 @@
         val instanceId: Int
         var writeType: Int
         val descriptors: List<BluetoothGattDescriptor>
+        var service: BluetoothGattService?
 
         fun addDescriptor(descriptor: BluetoothGattDescriptor): Boolean
         fun getDescriptor(uuid: UUID): BluetoothGattDescriptor?
@@ -158,13 +166,11 @@
 
             val CREATOR: Bundleable.Creator<BluetoothGattCharacteristic> =
                 object : Bundleable.Creator<BluetoothGattCharacteristic> {
-                    @Suppress("deprecation")
                     override fun fromBundle(bundle: Bundle): BluetoothGattCharacteristic {
-                        assert(Build.VERSION.SDK_INT < 24)
                         val uuid = bundle.getString(keyForField(FIELD_FWK_CHARACTERISTIC_UUID))
                             ?: throw IllegalArgumentException("Bundle doesn't include uuid")
                         val instanceId =
-                            bundle.getInt(keyForField(FIELD_FWK_CHARACTERISTIC_INSTANCE_ID), -1)
+                            bundle.getInt(keyForField(FIELD_FWK_CHARACTERISTIC_INSTANCE_ID), 0)
                         val properties =
                             bundle.getInt(keyForField(FIELD_FWK_CHARACTERISTIC_PROPERTIES), -1)
                         val permissions =
@@ -182,18 +188,21 @@
                         if (writeType == -1) {
                             throw IllegalArgumentException("Bundle doesn't include writeType")
                         }
-                        if (instanceId == -1) {
-                            throw IllegalArgumentException("Bundle doesn't include instanceId")
-                        }
                         if (keySize == -1) {
                             throw IllegalArgumentException("Bundle doesn't include keySize")
                         }
 
                         val fwkCharacteristic =
-                            FwkBluetoothGattCharacteristic(
+                            FwkBluetoothGattCharacteristic::class.java.getConstructor(
+                                UUID::class.java,
+                                Integer.TYPE,
+                                Integer.TYPE,
+                                Integer.TYPE,
+                            ).newInstance(
                                 UUID.fromString(uuid),
+                                instanceId,
                                 properties,
-                                permissions
+                                permissions,
                             )
                         fwkCharacteristic.writeType = writeType
 
@@ -205,9 +214,11 @@
 
                         val gattCharacteristic = BluetoothGattCharacteristic(fwkCharacteristic)
 
-                        bundle.getParcelableArrayList<Bundle>(
-                            keyForField(FIELD_FWK_CHARACTERISTIC_DESCRIPTORS)
-                        )?.forEach { it ->
+                        Utils.getParcelableArrayListFromBundle(
+                            bundle,
+                            keyForField(FIELD_FWK_CHARACTERISTIC_DESCRIPTORS),
+                            Bundle::class.java
+                        ).forEach {
                             gattCharacteristic.addDescriptor(
                                 BluetoothGattDescriptor.CREATOR.fromBundle(it)
                             )
@@ -218,6 +229,50 @@
                 }
         }
 
+        init {
+            fwkCharacteristic.descriptors.forEach {
+                val descriptor = BluetoothGattDescriptor(it)
+                _descriptors.add(descriptor)
+                descriptor.characteristic = characteristic
+            }
+        }
+
+        override val uuid: UUID
+            get() = fwkCharacteristic.uuid
+        override val properties
+            get() = fwkCharacteristic.properties
+        override val permissions
+            get() = fwkCharacteristic.permissions
+        override val instanceId
+            get() = fwkCharacteristic.instanceId
+        override var writeType: Int
+            get() = fwkCharacteristic.writeType
+            set(value) {
+                fwkCharacteristic.writeType = value
+            }
+        private var _descriptors = mutableListOf<BluetoothGattDescriptor>()
+        override val descriptors
+            get() = _descriptors.toList()
+        override var service: BluetoothGattService? = null
+
+        override fun addDescriptor(
+            descriptor: BluetoothGattDescriptor,
+        ): Boolean {
+            return if (fwkCharacteristic.addDescriptor(descriptor.fwkDescriptor)) {
+                _descriptors.add(descriptor)
+                descriptor.characteristic = characteristic
+                true
+            } else {
+                false
+            }
+        }
+
+        override fun getDescriptor(uuid: UUID): BluetoothGattDescriptor? {
+            return _descriptors.firstOrNull {
+                it.uuid == uuid
+            }
+        }
+
         override fun toBundle(): Bundle {
             assert(Build.VERSION.SDK_INT < 24)
 
@@ -243,56 +298,13 @@
 
             return bundle
         }
-
-        init {
-            fwkCharacteristic.descriptors.forEach {
-                val descriptor = BluetoothGattDescriptor(it)
-                mDescriptors.add(descriptor)
-                descriptor.characteristic = characteristic
-            }
-        }
-
-        override val uuid: UUID
-            get() = fwkCharacteristic.uuid
-        override val properties
-            get() = fwkCharacteristic.properties
-        override val permissions
-            get() = fwkCharacteristic.permissions
-        override val instanceId
-            get() = fwkCharacteristic.instanceId
-        override var writeType: Int
-            get() = fwkCharacteristic.writeType
-            set(value) {
-                fwkCharacteristic.writeType = value
-            }
-        private var mDescriptors = mutableListOf<BluetoothGattDescriptor>()
-        override val descriptors
-            get() = mDescriptors.toList()
-
-        override fun addDescriptor(
-            descriptor: BluetoothGattDescriptor,
-        ): Boolean {
-            return if (fwkCharacteristic.addDescriptor(descriptor.fwkDescriptor)) {
-                mDescriptors.add(descriptor)
-                descriptor.characteristic = characteristic
-                true
-            } else {
-                false
-            }
-        }
-
-        override fun getDescriptor(uuid: UUID): BluetoothGattDescriptor? {
-            return mDescriptors.firstOrNull {
-                it.uuid == uuid
-            }
-        }
     }
 
     @RequiresApi(Build.VERSION_CODES.N)
     private class GattCharacteristicImplApi24(
         fwkCharacteristic: FwkBluetoothGattCharacteristic,
         characteristic: BluetoothGattCharacteristic,
-        ) : GattCharacteristicImplApi21(fwkCharacteristic, characteristic) {
+    ) : GattCharacteristicImplApi21(fwkCharacteristic, characteristic) {
         companion object {
             internal const val FIELD_FWK_CHARACTERISTIC = 0
 
@@ -301,8 +313,10 @@
                     @Suppress("deprecation")
                     override fun fromBundle(bundle: Bundle): BluetoothGattCharacteristic {
                         val fwkCharacteristic =
-                            bundle.getParcelable<FwkBluetoothGattCharacteristic>(
-                                keyForField(FIELD_FWK_CHARACTERISTIC)
+                            Utils.getParcelableFromBundle(
+                                bundle,
+                                keyForField(FIELD_FWK_CHARACTERISTIC),
+                                FwkBluetoothGattCharacteristic::class.java
                             ) ?: throw IllegalArgumentException(
                                 "Bundle doesn't include framework characteristic"
                             )
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothGattDescriptor.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothGattDescriptor.kt
index e381b4e..3c3c87a 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothGattDescriptor.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothGattDescriptor.kt
@@ -21,6 +21,7 @@
 import android.bluetooth.BluetoothGattDescriptor as FwkBluetoothGattDescriptor
 import androidx.annotation.RequiresApi
 import androidx.bluetooth.utils.Bundleable
+import androidx.bluetooth.utils.Utils
 
 import java.util.UUID
 /**
@@ -110,7 +111,6 @@
 
             val CREATOR: Bundleable.Creator<BluetoothGattDescriptor> =
                 object : Bundleable.Creator<BluetoothGattDescriptor> {
-                    @Suppress("DEPRECATION")
                     override fun fromBundle(bundle: Bundle): BluetoothGattDescriptor {
                         val permissions =
                             bundle.getInt(
@@ -121,21 +121,25 @@
                             keyForField(FIELD_FWK_DESCRIPTOR_UUID),
                         ) ?: throw IllegalArgumentException("Bundle doesn't include uuid")
 
+                        val instanceId = bundle.getInt(
+                            keyForField(FIELD_FWK_DESCRIPTOR_INSTANCE),
+                            0
+                        )
+
                         if (permissions == -1) {
                             throw IllegalArgumentException("Bundle doesn't include permission")
                         }
 
-                        val descriptor =
-                            FwkBluetoothGattDescriptor(
-                                UUID.fromString(uuid),
-                                permissions
-                            )
-
-                        descriptor.javaClass.getDeclaredField("mInstance").setInt(
-                            descriptor, bundle.getInt(
-                                keyForField(FIELD_FWK_DESCRIPTOR_INSTANCE), 0
-                            )
+                        val descriptor = FwkBluetoothGattDescriptor::class.java.getConstructor(
+                            UUID::class.java,
+                            Integer.TYPE,
+                            Integer.TYPE
+                        ).newInstance(
+                            UUID.fromString(uuid),
+                            instanceId,
+                            permissions
                         )
+
                         return BluetoothGattDescriptor(descriptor)
                     }
                 }
@@ -166,11 +170,12 @@
             internal const val FIELD_FWK_DESCRIPTOR = 0
             val CREATOR: Bundleable.Creator<BluetoothGattDescriptor> =
                 object : Bundleable.Creator<BluetoothGattDescriptor> {
-                    @Suppress("DEPRECATION")
                     override fun fromBundle(bundle: Bundle): BluetoothGattDescriptor {
                         val fwkDescriptor =
-                            bundle.getParcelable<android.bluetooth.BluetoothGattDescriptor>(
-                                keyForField(FIELD_FWK_DESCRIPTOR)
+                            Utils.getParcelableFromBundle(
+                                bundle,
+                                keyForField(FIELD_FWK_DESCRIPTOR),
+                                FwkBluetoothGattDescriptor::class.java
                             ) ?: throw IllegalArgumentException("Bundle doesn't contain descriptor")
 
                         return BluetoothGattDescriptor(fwkDescriptor)
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothGattService.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothGattService.kt
new file mode 100644
index 0000000..dec3d94
--- /dev/null
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothGattService.kt
@@ -0,0 +1,309 @@
+/*
+ * Copyright 2022 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.bluetooth
+
+import android.os.Build
+import android.os.Bundle
+import android.bluetooth.BluetoothGattService as FwkBluetoothGattService
+import androidx.annotation.RequiresApi
+import androidx.bluetooth.utils.Bundleable
+import androidx.bluetooth.utils.Utils
+
+import java.util.UUID
+
+/**
+ * @hide
+ */
+class BluetoothGattService internal constructor(service: FwkBluetoothGattService) :
+    Bundleable {
+
+    companion object {
+        val CREATOR: Bundleable.Creator<BluetoothGattService> =
+            if (Build.VERSION.SDK_INT >= 24) {
+                GattServiceImplApi24.CREATOR
+            } else {
+                GattServiceImplApi21.CREATOR
+            }
+
+        internal fun keyForField(field: Int): String {
+            return field.toString(Character.MAX_RADIX)
+        }
+    }
+
+    constructor(uuid: UUID, type: Int) : this(
+        FwkBluetoothGattService(
+            uuid,
+            type
+        )
+    )
+
+    private val impl =
+        if (Build.VERSION.SDK_INT >= 24) {
+            GattServiceImplApi24(service, this)
+        } else {
+            GattServiceImplApi21(service, this)
+        }
+
+    internal val fwkService: FwkBluetoothGattService
+        get() = impl.fwkService
+    val instanceId: Int
+        get() = impl.instanceId
+    val type: Int
+        get() = impl.type
+    val uuid: UUID
+        get() = impl.uuid
+
+    val characteristics: List<BluetoothGattCharacteristic>
+        get() = impl.characteristics
+
+    val includedServices: List<BluetoothGattService>
+        get() = impl.includedServices
+
+    fun addCharacteristic(characteristic: BluetoothGattCharacteristic): Boolean {
+        return impl.addCharacteristic(characteristic)
+    }
+
+    fun getCharacteristic(uuid: UUID): BluetoothGattCharacteristic? {
+        return impl.getCharacteristic(uuid)
+    }
+
+    fun addService(service: BluetoothGattService): Boolean {
+        return impl.addService(service)
+    }
+
+    fun getIncludedService(uuid: UUID): BluetoothGattService? {
+        return impl.getIncludedService(uuid)
+    }
+
+    override fun toBundle(): Bundle {
+        return impl.toBundle()
+    }
+
+    private interface GattServiceImpl {
+        val fwkService: FwkBluetoothGattService
+        val instanceId: Int
+        val type: Int
+        val uuid: UUID
+        val includedServices: List<BluetoothGattService>
+        val characteristics: List<BluetoothGattCharacteristic>
+
+        fun addCharacteristic(characteristic: BluetoothGattCharacteristic): Boolean
+
+        fun getCharacteristic(uuid: UUID): BluetoothGattCharacteristic?
+
+        fun addService(service: BluetoothGattService): Boolean
+
+        fun getIncludedService(uuid: UUID): BluetoothGattService?
+
+        fun toBundle(): Bundle
+    }
+
+    private open class GattServiceImplApi21(
+        final override val fwkService: FwkBluetoothGattService,
+        service: BluetoothGattService
+    ) : GattServiceImpl {
+
+        companion object {
+            internal const val FIELD_FWK_SERVICE_INSTANCE_ID = 1
+            internal const val FIELD_FWK_SERVICE_TYPE = 2
+            internal const val FIELD_FWK_SERVICE_CHARACTERISTICS = 3
+            internal const val FIELD_FWK_SERVICE_SERVICES = 4
+            internal const val FIELD_FWK_SERVICE_UUID = 5
+
+            val CREATOR: Bundleable.Creator<BluetoothGattService> =
+                object : Bundleable.Creator<BluetoothGattService> {
+                    override fun fromBundle(bundle: Bundle): BluetoothGattService {
+                        val uuid = bundle.getString(keyForField(FIELD_FWK_SERVICE_UUID))
+                            ?: throw IllegalArgumentException("Bundle doesn't include uuid")
+                        val instanceId =
+                            bundle.getInt(keyForField(FIELD_FWK_SERVICE_INSTANCE_ID), 0)
+                        val type = bundle.getInt(keyForField(FIELD_FWK_SERVICE_TYPE), -1)
+                        if (type == -1) {
+                            throw IllegalArgumentException("Bundle doesn't include service type")
+                        }
+
+                        val fwkService = FwkBluetoothGattService::class.java.getConstructor(
+                            UUID::class.java,
+                            Integer.TYPE,
+                            Integer.TYPE,
+                        ).newInstance(UUID.fromString(uuid), instanceId, type)
+
+                        val gattService = BluetoothGattService(fwkService)
+
+                        Utils.getParcelableArrayListFromBundle(
+                            bundle,
+                            keyForField(FIELD_FWK_SERVICE_CHARACTERISTICS),
+                            Bundle::class.java
+                        ).forEach {
+                            gattService.addCharacteristic(
+                                BluetoothGattCharacteristic.CREATOR.fromBundle(
+                                    it
+                                )
+                            )
+                        }
+
+                        Utils.getParcelableArrayListFromBundle(
+                            bundle,
+                            keyForField(FIELD_FWK_SERVICE_SERVICES),
+                            Bundle::class.java
+                        ).forEach {
+                            val includedServices = Utils.getParcelableArrayListFromBundle(
+                                it,
+                                keyForField(FIELD_FWK_SERVICE_SERVICES),
+                                Bundle::class.java
+                            )
+                            if (includedServices.isNotEmpty()) {
+                                throw IllegalArgumentException(
+                                    "Included service shouldn't pass " +
+                                        "its included services to bundle"
+                                )
+                            }
+
+                            val includedCharacteristics = Utils.getParcelableArrayListFromBundle(
+                                it,
+                                keyForField(FIELD_FWK_SERVICE_CHARACTERISTICS),
+                                Bundle::class.java
+                            )
+
+                            if (includedCharacteristics.isNotEmpty()) {
+                                throw IllegalArgumentException(
+                                    "Included service shouldn't pass characteristic to bundle"
+                                )
+                            }
+
+                            gattService.addService(BluetoothGattService.CREATOR.fromBundle(it))
+                        }
+
+                        return gattService
+                    }
+                }
+        }
+
+        override val instanceId: Int
+            get() = fwkService.instanceId
+        override val type: Int
+            get() = fwkService.type
+        override val uuid: UUID
+            get() = fwkService.uuid
+
+        private val _includedServices = mutableListOf<BluetoothGattService>()
+        override val includedServices: List<BluetoothGattService>
+            get() = _includedServices.toList()
+
+        private val _characteristics = mutableListOf<BluetoothGattCharacteristic>()
+        override val characteristics
+            get() = _characteristics.toList()
+
+        init {
+            this.fwkService.characteristics.forEach {
+                val characteristic = BluetoothGattCharacteristic(it)
+                _characteristics.add(characteristic)
+                characteristic.service = service
+            }
+            this.fwkService.includedServices.forEach {
+                _includedServices.add(BluetoothGattService(it))
+            }
+        }
+
+        override fun addCharacteristic(characteristic: BluetoothGattCharacteristic): Boolean {
+            return if (fwkService.addCharacteristic(characteristic.fwkCharacteristic)) {
+                _characteristics.add(characteristic)
+                true
+            } else {
+                false
+            }
+        }
+
+        override fun getCharacteristic(uuid: UUID): BluetoothGattCharacteristic? {
+            return _characteristics.firstOrNull {
+                it.uuid == uuid
+            }
+        }
+
+        override fun addService(service: BluetoothGattService): Boolean {
+            return if (fwkService.addService(service.fwkService)) {
+                _includedServices.add(service)
+                true
+            } else {
+                false
+            }
+        }
+
+        override fun getIncludedService(uuid: UUID): BluetoothGattService? {
+            return _includedServices.firstOrNull {
+                it.uuid == uuid
+            }
+        }
+
+        override fun toBundle(): Bundle {
+            val bundle = Bundle()
+            bundle.putString(keyForField(FIELD_FWK_SERVICE_UUID), uuid.toString())
+            bundle.putInt(keyForField(FIELD_FWK_SERVICE_INSTANCE_ID), instanceId)
+            bundle.putInt(keyForField(FIELD_FWK_SERVICE_TYPE), type)
+            bundle.putParcelableArrayList(
+                keyForField(FIELD_FWK_SERVICE_CHARACTERISTICS),
+                ArrayList(_characteristics.map { it.toBundle() })
+            )
+            bundle.putParcelableArrayList(
+                keyForField(FIELD_FWK_SERVICE_SERVICES),
+
+                // Cut all included services & characteristics of included services. Developers
+                // should directly send the included services if need it
+                ArrayList(_includedServices.map {
+                    BluetoothGattService(it.uuid,
+                                         it.type).toBundle()
+                })
+            )
+
+            return bundle
+        }
+    }
+
+    @RequiresApi(Build.VERSION_CODES.N)
+    private class GattServiceImplApi24(
+        fwkService: FwkBluetoothGattService,
+        service: BluetoothGattService
+    ) : GattServiceImplApi21(fwkService, service) {
+
+        companion object {
+            internal const val FIELD_FWK_SERVICE = 0
+
+            @Suppress("DEPRECATION")
+            val CREATOR: Bundleable.Creator<BluetoothGattService> =
+                object : Bundleable.Creator<BluetoothGattService> {
+                    override fun fromBundle(bundle: Bundle): BluetoothGattService {
+                        val fwkService =
+                            Utils.getParcelableFromBundle(
+                                bundle,
+                                keyForField(FIELD_FWK_SERVICE),
+                                FwkBluetoothGattService::class.java
+                            )
+                                ?: throw IllegalArgumentException(
+                                    "Bundle doesn't contain framework service"
+                                )
+                        return BluetoothGattService(fwkService)
+                    }
+                }
+        }
+
+        override fun toBundle(): Bundle {
+            val bundle = Bundle()
+            bundle.putParcelable(keyForField(FIELD_FWK_SERVICE), fwkService)
+            return bundle
+        }
+    }
+}
\ No newline at end of file
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/utils/Utils.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/utils/Utils.kt
new file mode 100644
index 0000000..a7cf935
--- /dev/null
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/utils/Utils.kt
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2022 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.bluetooth.utils
+
+import android.os.Build
+import android.os.Bundle
+import android.os.Parcelable
+
+/**
+ * @hide
+ */
+class Utils {
+    companion object {
+
+        // TODO: Migrate to BundleCompat when available
+        @Suppress("DEPRECATION")
+        fun <T : Parcelable> getParcelableFromBundle(
+            bundle: Bundle,
+            key: String,
+            clazz: Class<T>
+        ): T? {
+            bundle.classLoader = clazz.classLoader
+            if (Build.VERSION.SDK_INT >= 33) {
+                // TODO: Return framework's getParcelable when SDK 33 is available
+                // return bundle.getParcelable(key, clazz)
+                TODO()
+            } else {
+                val parcelable: T?
+                try {
+                    parcelable = bundle.getParcelable(key)
+                } catch (e: Exception) {
+                    return null
+                }
+                return parcelable
+            }
+        }
+
+        @Suppress("DEPRECATION")
+        fun <T : Parcelable> getParcelableArrayListFromBundle(
+            bundle: Bundle,
+            key: String,
+            clazz: Class<T>
+        ): List<T> {
+            bundle.classLoader = clazz.classLoader
+            if (Build.VERSION.SDK_INT >= 33) {
+                // TODO: Return framework's getParcelableArrayList when SDK 33 is available
+                // return bundle.getParcelableArrayList(key, clazz)
+                TODO()
+            } else {
+                val parcelable: List<T>
+                try {
+                    parcelable = bundle.getParcelableArrayList(key) ?: emptyList()
+                } catch (e: Exception) {
+                    return emptyList()
+                }
+                return parcelable
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxFragment.kt
index db47746..8edffdd 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/bluetoothx/BtxFragment.kt
@@ -17,10 +17,12 @@
 package androidx.bluetooth.integration.testapp.ui.bluetoothx
 
 import android.os.Bundle
+import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import android.widget.Toast
+
+import androidx.bluetooth.core.BluetoothManager
 import androidx.bluetooth.integration.testapp.R
 import androidx.bluetooth.integration.testapp.databinding.FragmentBtxBinding
 import androidx.fragment.app.Fragment
@@ -64,7 +66,24 @@
     }
 
     private fun scan() {
-        Toast.makeText(context, getString(R.string.scan_not_yet_implemented), Toast.LENGTH_SHORT)
-            .show()
+        Log.d(TAG, "scan() called")
+
+        val bluetoothManager = BluetoothManager(requireContext())
+
+        @Suppress("UNUSED_VARIABLE")
+        // TODO(ofy) Use below
+        val bluetoothAdapter = bluetoothManager.getAdapter()
+
+        // TODO(ofy) Convert to BluetoothX classes
+//        val bleScanner = bluetoothAdapter?.bluetoothLeScanner
+//
+//        val scanSettings = ScanSettings.Builder()
+//            .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
+//            .build()
+//
+//        bleScanner?.startScan(null, scanSettings, scanCallback)
+//
+//        Toast.makeText(context, getString(R.string.scan_start_message), Toast.LENGTH_LONG)
+//            .show()
     }
 }
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkFragment.kt
index 5261a18..5257eae 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/framework/FwkFragment.kt
@@ -128,6 +128,8 @@
     // Permissions are handled by MainActivity requestBluetoothPermissions
     @SuppressLint("MissingPermission")
     private fun startAdvertise() {
+        Log.d(TAG, "startAdvertise() called")
+
         val bluetoothManager =
             context?.getSystemService(Context.BLUETOOTH_SERVICE) as? BluetoothManager
 
diff --git a/bluetooth/integration-tests/testapp/src/main/res/values/donottranslate-strings.xml b/bluetooth/integration-tests/testapp/src/main/res/values/donottranslate-strings.xml
index 9828cdd..ff75011 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/values/donottranslate-strings.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/values/donottranslate-strings.xml
@@ -28,7 +28,6 @@
     <string name="scan_using_btx">Scan using BluetoothX APIs</string>
 
     <string name="scan_start_message">Scan should have started. Results are in Logcat</string>
-    <string name="scan_not_yet_implemented">Scan not yet implemented.</string>
 
     <string name="advertise_using_fwk">Advertise using Framework Bluetooth APIs</string>
     <string name="advertise_start_message">Advertise started</string>
diff --git a/browser/browser/api/current.txt b/browser/browser/api/current.txt
index 2f00014..32c2be1 100644
--- a/browser/browser/api/current.txt
+++ b/browser/browser/api/current.txt
@@ -353,7 +353,7 @@
     method @BinderThread public android.os.Bundle? onExtraCommand(String, android.os.Bundle, androidx.browser.trusted.TrustedWebActivityCallbackRemote?);
     method @BinderThread public android.os.Bundle onGetSmallIconBitmap();
     method @BinderThread public int onGetSmallIconId();
-    method @BinderThread public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
+    method @BinderThread @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
     method @MainThread public final boolean onUnbind(android.content.Intent?);
     field public static final String ACTION_TRUSTED_WEB_ACTIVITY_SERVICE = "android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE";
     field public static final String KEY_SMALL_ICON_BITMAP = "android.support.customtabs.trusted.SMALL_ICON_BITMAP";
diff --git a/browser/browser/api/public_plus_experimental_current.txt b/browser/browser/api/public_plus_experimental_current.txt
index 2f00014..32c2be1 100644
--- a/browser/browser/api/public_plus_experimental_current.txt
+++ b/browser/browser/api/public_plus_experimental_current.txt
@@ -353,7 +353,7 @@
     method @BinderThread public android.os.Bundle? onExtraCommand(String, android.os.Bundle, androidx.browser.trusted.TrustedWebActivityCallbackRemote?);
     method @BinderThread public android.os.Bundle onGetSmallIconBitmap();
     method @BinderThread public int onGetSmallIconId();
-    method @BinderThread public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
+    method @BinderThread @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
     method @MainThread public final boolean onUnbind(android.content.Intent?);
     field public static final String ACTION_TRUSTED_WEB_ACTIVITY_SERVICE = "android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE";
     field public static final String KEY_SMALL_ICON_BITMAP = "android.support.customtabs.trusted.SMALL_ICON_BITMAP";
diff --git a/browser/browser/api/restricted_current.txt b/browser/browser/api/restricted_current.txt
index 6f8400b..8e15b11 100644
--- a/browser/browser/api/restricted_current.txt
+++ b/browser/browser/api/restricted_current.txt
@@ -364,7 +364,7 @@
     method @BinderThread public android.os.Bundle? onExtraCommand(String, android.os.Bundle, androidx.browser.trusted.TrustedWebActivityCallbackRemote?);
     method @BinderThread public android.os.Bundle onGetSmallIconBitmap();
     method @BinderThread public int onGetSmallIconId();
-    method @BinderThread public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
+    method @BinderThread @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
     method @MainThread public final boolean onUnbind(android.content.Intent?);
     field public static final String ACTION_TRUSTED_WEB_ACTIVITY_SERVICE = "android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE";
     field public static final String KEY_SMALL_ICON_BITMAP = "android.support.customtabs.trusted.SMALL_ICON_BITMAP";
diff --git a/browser/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java b/browser/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
index 862a9ff..88036ff 100644
--- a/browser/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
+++ b/browser/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
@@ -381,6 +381,7 @@
      * @hide
      */
     @RestrictTo(LIBRARY)
+    @SuppressWarnings("deprecation")
     @NonNull
     public static List<ResolveInfo> getBrowserActionsIntentHandlers(@NonNull Context context) {
         Intent intent =
@@ -389,7 +390,7 @@
         return pm.queryIntentActivities(intent, PackageManager.MATCH_ALL);
     }
 
-    @SuppressWarnings("NullAway") // TODO: b/141869398
+    @SuppressWarnings({"NullAway", "deprecation"}) // TODO: b/141869398
     private static void openFallbackBrowserActionsMenu(Context context, Intent intent) {
         Uri uri = intent.getData();
         ArrayList<Bundle> bundles = intent.getParcelableArrayListExtra(EXTRA_MENU_ITEMS);
diff --git a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSessionToken.java b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSessionToken.java
index 40386b6..f1675f2 100644
--- a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSessionToken.java
+++ b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSessionToken.java
@@ -86,6 +86,7 @@
      *               {@link CustomTabsIntent#EXTRA_SESSION}.
      * @return The token that was generated.
      */
+    @SuppressWarnings("deprecation")
     public static @Nullable CustomTabsSessionToken getSessionTokenFromIntent(
             @NonNull Intent intent) {
         Bundle b = intent.getExtras();
diff --git a/browser/browser/src/main/java/androidx/browser/customtabs/TrustedWebUtils.java b/browser/browser/src/main/java/androidx/browser/customtabs/TrustedWebUtils.java
index b95bd78..37d604e 100644
--- a/browser/browser/src/main/java/androidx/browser/customtabs/TrustedWebUtils.java
+++ b/browser/browser/src/main/java/androidx/browser/customtabs/TrustedWebUtils.java
@@ -119,6 +119,7 @@
      * @return Whether the specified Custom Tabs provider supports the specified splash screen
      *         feature/version.
      */
+    @SuppressWarnings("deprecation")
     public static boolean areSplashScreensSupported(@NonNull Context context,
             @NonNull String packageName, @NonNull String version) {
         Intent serviceIntent = new Intent()
diff --git a/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityService.java b/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityService.java
index e0630fc..c40e0f0 100644
--- a/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityService.java
+++ b/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityService.java
@@ -16,6 +16,7 @@
 
 package androidx.browser.trusted;
 
+import android.Manifest;
 import android.annotation.SuppressLint;
 import android.app.Notification;
 import android.app.NotificationManager;
@@ -37,6 +38,7 @@
 import androidx.annotation.MainThread;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresPermission;
 import androidx.annotation.RestrictTo;
 import androidx.browser.trusted.TrustedWebActivityServiceConnection.ActiveNotificationsArgs;
 import androidx.browser.trusted.TrustedWebActivityServiceConnection.CancelNotificationArgs;
@@ -137,6 +139,7 @@
             return new ResultArgs(result).toBundle();
         }
 
+        @RequiresPermission(Manifest.permission.POST_NOTIFICATIONS)
         @Override
         public Bundle notifyNotificationWithChannel(Bundle bundle) {
             checkCaller();
@@ -259,6 +262,7 @@
      * @return Whether the notification was successfully displayed (the channel/app may be blocked
      *         by the user).
      */
+    @RequiresPermission(Manifest.permission.POST_NOTIFICATIONS)
     @BinderThread
     public boolean onNotifyNotificationWithChannel(@NonNull String platformTag, int platformId,
             @NonNull Notification notification, @NonNull String channelName) {
diff --git a/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java b/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
index f3fd01e..4a5ac59 100644
--- a/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
+++ b/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
@@ -274,6 +274,7 @@
         assertNullSessionInExtras(intent);
     }
 
+    @SuppressWarnings("deprecation")
     @Test
     public void putsSessionBinderAndId_IfSuppliedInConstructor() {
         CustomTabsSession session = TestUtil.makeMockSession();
@@ -283,6 +284,7 @@
         assertEquals(session.getId(), intent.getParcelableExtra(CustomTabsIntent.EXTRA_SESSION_ID));
     }
 
+    @SuppressWarnings("deprecation")
     @Test
     public void putsSessionBinderAndId_IfSuppliedInSetter() {
         CustomTabsSession session = TestUtil.makeMockSession();
@@ -292,6 +294,7 @@
         assertEquals(session.getId(), intent.getParcelableExtra(CustomTabsIntent.EXTRA_SESSION_ID));
     }
 
+    @SuppressWarnings("deprecation")
     @Test
     public void putsPendingSessionId() {
         CustomTabsSession.PendingSession pendingSession = TestUtil.makeMockPendingSession();
diff --git a/browser/browser/src/test/java/androidx/browser/customtabs/TestUtil.java b/browser/browser/src/test/java/androidx/browser/customtabs/TestUtil.java
index 318a99a..fa0c171 100644
--- a/browser/browser/src/test/java/androidx/browser/customtabs/TestUtil.java
+++ b/browser/browser/src/test/java/androidx/browser/customtabs/TestUtil.java
@@ -55,6 +55,7 @@
         return PendingIntent.getBroadcast(mock(Context.class), 0, new Intent(), 0);
     }
 
+    @SuppressWarnings("deprecation")
     public static void assertIntentHasSession(@NonNull Intent intent,
             @NonNull CustomTabsSession session) {
         assertEquals(session.getBinder(), intent.getExtras().getBinder(
diff --git a/buildSrc-tests/src/test/kotlin/androidx/build/dackka/MetadataEntryTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/dackka/MetadataEntryTest.kt
new file mode 100644
index 0000000..c9763cc
--- /dev/null
+++ b/buildSrc-tests/src/test/kotlin/androidx/build/dackka/MetadataEntryTest.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2022 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.build.dackka
+
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+
+class MetadataEntryTest {
+
+    @Test
+    fun toMap() {
+        val entry = MetadataEntry(
+            groupId = "AndroidX Group ID",
+            artifactId = "AndroidX Artifact ID",
+            releaseNotesUrl = "https://d.android.com/jetpack",
+            sourceDir = "androidx/"
+        )
+        val map = entry.toMap()
+
+        assertThat(map["groupId"]).isEqualTo("AndroidX Group ID")
+        assertThat(map["artifactId"]).isEqualTo("AndroidX Artifact ID")
+        assertThat(map["releaseNotesUrl"]).isEqualTo("https://d.android.com/jetpack")
+        assertThat(map["sourceDir"]).isEqualTo("androidx/")
+    }
+}
\ No newline at end of file
diff --git a/buildSrc/SampleLibraryMetadata.json b/buildSrc/SampleLibraryMetadata.json
deleted file mode 100644
index ad6e17d..0000000
--- a/buildSrc/SampleLibraryMetadata.json
+++ /dev/null
@@ -1,26 +0,0 @@
-[
-  {
-    "groupId": "androidx.paging",
-    "artifactId": "paging-compose",
-    "releaseNotesUrl": "https://developer.android.com/jetpack/androidx/releases/paging",
-    "sourceDir": "paging/compose"
-  },
-  {
-    "groupId": "androidx.paging",
-    "artifactId": "paging-runtime",
-    "releaseNotesUrl": "https://developer.android.com/jetpack/androidx/releases/paging",
-    "sourceDir": "paging"
-  },
-  {
-    "groupId": "androidx.paging",
-    "artifactId": "paging-rxjava2",
-    "releaseNotesUrl": "https://developer.android.com/jetpack/androidx/releases/paging",
-    "sourceDir": "paging/rxjava2"
-  },
-  {
-    "groupId": "androidx.paging",
-    "artifactId": "paging-rxjava3",
-    "releaseNotesUrl": "https://developer.android.com/jetpack/androidx/releases/paging",
-    "sourceDir": "paging/rxjava3"
-  }
-]
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index cd7042e..54cf195 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -25,6 +25,8 @@
 import androidx.build.SupportConfig.DEFAULT_MIN_SDK_VERSION
 import androidx.build.SupportConfig.INSTRUMENTATION_RUNNER
 import androidx.build.SupportConfig.TARGET_SDK_VERSION
+import androidx.build.buildInfo.CreateAggregateLibraryBuildInfoFileTask
+import androidx.build.buildInfo.CreateLibraryBuildInfoFileTask
 import androidx.build.checkapi.JavaApiTaskConfig
 import androidx.build.checkapi.KmpApiTaskConfig
 import androidx.build.checkapi.LibraryApiTaskConfig
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
index fe5eb3d..d406a34 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXRootImplPlugin.kt
@@ -18,6 +18,7 @@
 
 import androidx.build.AndroidXImplPlugin.Companion.ZIP_CONSTRAINED_TEST_CONFIGS_WITH_APKS_TASK
 import androidx.build.AndroidXImplPlugin.Companion.ZIP_TEST_CONFIGS_WITH_APKS_TASK
+import androidx.build.buildInfo.CreateAggregateLibraryBuildInfoFileTask
 import androidx.build.dependencyTracker.AffectedModuleDetector
 import androidx.build.gradle.isRoot
 import androidx.build.license.CheckExternalDependencyLicensesTask
@@ -102,15 +103,6 @@
         val createArchiveTask = Release.getGlobalFullZipTask(this)
         buildOnServerTask.dependsOn(createArchiveTask)
 
-        buildOnServerTask.dependsOn(
-            tasks.register(
-                "saveSystemStats",
-                SaveSystemStatsTask::class.java
-            ) { task ->
-                task.outputFile.set(File(project.getDistributionDirectory(), "system_stats.txt"))
-            }
-        )
-
         extra.set("projects", ConcurrentHashMap<String, String>())
         subprojects { project ->
             project.afterEvaluate {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
index 288c32b8..26234ab 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
@@ -216,6 +216,9 @@
             fatal.add("VisibleForTests")
         }
 
+        // Reenable after b/238892319 is resolved
+        disable.add("NotificationPermission")
+
         // Broken in 7.4.0-alpha04 due to b/236262744
         disable.add("CustomPermissionTypo")
         disable.add("KnownPermissionError")
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/SaveSystemStatsTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/SaveSystemStatsTask.kt
deleted file mode 100644
index 5035718..0000000
--- a/buildSrc/private/src/main/kotlin/androidx/build/SaveSystemStatsTask.kt
+++ /dev/null
@@ -1,59 +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.build
-
-import org.gradle.api.DefaultTask
-import org.gradle.api.provider.Property
-import org.gradle.api.tasks.Input
-import org.gradle.api.tasks.OutputFile
-import org.gradle.api.tasks.TaskAction
-import org.gradle.work.DisableCachingByDefault
-import java.io.File
-import java.lang.management.ManagementFactory
-import java.lang.Runtime
-import com.sun.management.OperatingSystemMXBean
-
-@DisableCachingByDefault(because = "Simply creates a small file and doesn't benefit from caching")
-/**
- * Saves system stats (cpu, memory) to a file
- */
-abstract class SaveSystemStatsTask : DefaultTask() {
-    @Input
-    fun getNumProcessors(): Int {
-        return Runtime.getRuntime().availableProcessors()
-    }
-
-    @Input
-    @Suppress("DEPRECATION")
-    fun getTotalMemory(): Long {
-        val bean = ManagementFactory.getOperatingSystemMXBean() as OperatingSystemMXBean
-        return bean.totalPhysicalMemorySize
-    }
-
-    @OutputFile
-    val outputFile: Property<File> = project.objects.property(File::class.java)
-    @TaskAction
-    fun exec() {
-        val outputFile = outputFile.get()
-        if (outputFile.exists()) {
-            // b/196115864 : make backup of file so we can know what changed
-            outputFile.copyTo(target = File(outputFile.path + ".prev"), overwrite = true)
-        }
-        val statsText = "num processors = ${getNumProcessors()}, total memory = ${getTotalMemory()}"
-        outputFile.writeText(statsText)
-    }
-}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/CreateAggregateLibraryBuildInfoFileTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateAggregateLibraryBuildInfoFileTask.kt
similarity index 96%
rename from buildSrc/private/src/main/kotlin/androidx/build/CreateAggregateLibraryBuildInfoFileTask.kt
rename to buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateAggregateLibraryBuildInfoFileTask.kt
index 69c5636..ef6b47f 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/CreateAggregateLibraryBuildInfoFileTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateAggregateLibraryBuildInfoFileTask.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2019 The Android Open Source Project
+ * Copyright 2022 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.
@@ -14,8 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.build
+package androidx.build.buildInfo
 
+import androidx.build.getDistributionDirectory
 import androidx.build.jetpad.LibraryBuildInfoFile
 import com.google.gson.Gson
 import org.gradle.api.DefaultTask
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/CreateLibraryBuildInfoFileTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
similarity index 60%
rename from buildSrc/private/src/main/kotlin/androidx/build/CreateLibraryBuildInfoFileTask.kt
rename to buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
index 6f8ef25..5c145f8 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/CreateLibraryBuildInfoFileTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/buildInfo/CreateLibraryBuildInfoFileTask.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 The Android Open Source Project
+ * Copyright 2022 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.
@@ -14,8 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.build
+package androidx.build.buildInfo
 
+import androidx.build.AndroidXExtension
+import androidx.build.getBuildInfoDirectory
+import androidx.build.getGroupZipPath
+import androidx.build.getProjectZipPath
+import androidx.build.getSupportRootFolder
 import androidx.build.gitclient.Commit
 import androidx.build.gitclient.GitClient
 import androidx.build.gitclient.GitCommitRange
@@ -144,75 +149,77 @@
     companion object {
         const val TASK_NAME = "createLibraryBuildInfoFiles"
 
-        fun setup(project: Project, extension: AndroidXExtension):
-            TaskProvider<CreateLibraryBuildInfoFileTask> {
-                return project.tasks.register(
-                    TASK_NAME,
-                    CreateLibraryBuildInfoFileTask::class.java
-                ) { task ->
-                    val group = project.group.toString()
-                    val name = project.name.toString()
-                    task.outputFile.set(
-                        File(
-                            project.getBuildInfoDirectory(),
-                            "${group}_${name}_build_info.txt"
-                        )
+        fun setup(
+            project: Project,
+            extension: AndroidXExtension
+        ): TaskProvider<CreateLibraryBuildInfoFileTask> {
+            return project.tasks.register(
+                TASK_NAME,
+                CreateLibraryBuildInfoFileTask::class.java
+            ) { task ->
+                val group = project.group.toString()
+                val name = project.name.toString()
+                task.outputFile.set(
+                    File(
+                        project.getBuildInfoDirectory(),
+                        "${group}_${name}_build_info.txt"
                     )
-                    task.artifactId.set(name)
-                    task.groupId.set(group)
-                    task.version.set(project.version.toString())
-                    task.kotlinVersion.set(project.getKotlinPluginVersion())
-                    task.projectDir.set(
-                        project.projectDir.absolutePath.removePrefix(
-                            project.getSupportRootFolder().absolutePath
-                        )
+                )
+                task.artifactId.set(name)
+                task.groupId.set(group)
+                task.version.set(project.version.toString())
+                task.kotlinVersion.set(project.getKotlinPluginVersion())
+                task.projectDir.set(
+                    project.projectDir.absolutePath.removePrefix(
+                        project.getSupportRootFolder().absolutePath
                     )
-                    task.commit.set(
-                        project.provider {
-                            project.getFrameworksSupportCommitShaAtHead()
-                        }
-                    )
-                    task.groupIdRequiresSameVersion.set(extension.mavenGroup?.requireSameVersion)
-                    task.groupZipPath.set(project.getGroupZipPath())
-                    task.projectZipPath.set(project.getProjectZipPath())
+                )
+                task.commit.set(
+                    project.provider {
+                        project.getFrameworksSupportCommitShaAtHead()
+                    }
+                )
+                task.groupIdRequiresSameVersion.set(extension.mavenGroup?.requireSameVersion)
+                task.groupZipPath.set(project.getGroupZipPath())
+                task.projectZipPath.set(project.getProjectZipPath())
 
-                    // Note:
-                    // `project.projectDir.toString().removePrefix(project.rootDir.toString())`
-                    // does not work because the project rootDir is not guaranteed to be a
-                    // substring of the projectDir
-                    task.projectSpecificDirectory.set(
-                        project.projectDir.absolutePath.removePrefix(
-                            project.getSupportRootFolder().absolutePath
-                        )
+                // Note:
+                // `project.projectDir.toString().removePrefix(project.rootDir.toString())`
+                // does not work because the project rootDir is not guaranteed to be a
+                // substring of the projectDir
+                task.projectSpecificDirectory.set(
+                    project.projectDir.absolutePath.removePrefix(
+                        project.getSupportRootFolder().absolutePath
                     )
-                    task.dependencyList.set(project.provider {
-                        val libraryDependencies = HashSet<LibraryBuildInfoFile.Dependency>()
-                        project.configurations.filter {
-                            it.name == "releaseRuntimeElements"
-                        }.forEach { configuration ->
-                            configuration.allDependencies.forEach { dep ->
-                                // Only consider androidx dependencies
-                                if (dep.group != null &&
-                                    dep.group.toString().startsWith("androidx.") &&
-                                    !dep.group.toString().startsWith("androidx.test")
-                                ) {
-                                    val androidXPublishedDependency =
-                                        LibraryBuildInfoFile.Dependency()
-                                    androidXPublishedDependency.artifactId = dep.name.toString()
-                                    androidXPublishedDependency.groupId = dep.group.toString()
-                                    androidXPublishedDependency.version = dep.version.toString()
-                                    androidXPublishedDependency.isTipOfTree =
-                                        dep is ProjectDependency
-                                    libraryDependencies.add(androidXPublishedDependency)
-                                }
+                )
+                task.dependencyList.set(project.provider {
+                    val libraryDependencies = HashSet<LibraryBuildInfoFile.Dependency>()
+                    project.configurations.filter {
+                        it.name == "releaseRuntimeElements"
+                    }.forEach { configuration ->
+                        configuration.allDependencies.forEach { dep ->
+                            // Only consider androidx dependencies
+                            if (dep.group != null &&
+                                dep.group.toString().startsWith("androidx.") &&
+                                !dep.group.toString().startsWith("androidx.test")
+                            ) {
+                                val androidXPublishedDependency =
+                                    LibraryBuildInfoFile.Dependency()
+                                androidXPublishedDependency.artifactId = dep.name.toString()
+                                androidXPublishedDependency.groupId = dep.group.toString()
+                                androidXPublishedDependency.version = dep.version.toString()
+                                androidXPublishedDependency.isTipOfTree =
+                                    dep is ProjectDependency
+                                libraryDependencies.add(androidXPublishedDependency)
                             }
                         }
-                        ArrayList(libraryDependencies).sortedWith(
-                            compareBy({ it.groupId }, { it.artifactId }, { it.version })
-                        )
-                    })
-                }
+                    }
+                    ArrayList(libraryDependencies).sortedWith(
+                        compareBy({ it.groupId }, { it.artifactId }, { it.version })
+                    )
+                })
             }
+        }
 
         /* For androidx release notes, the most common use case is to track and publish the last sha
          * of the build that is released.  Thus, we use frameworks/support to get the sha
@@ -226,15 +233,15 @@
             )
             val commitList: List<Commit> =
                 gitClient
-                .getGitLog(
-                    GitCommitRange(
-                        fromExclusive = "",
-                        untilInclusive = "HEAD",
-                        n = 1
-                    ),
-                    keepMerges = true,
-                    fullProjectDir = getSupportRootFolder()
-                )
+                    .getGitLog(
+                        GitCommitRange(
+                            fromExclusive = "",
+                            untilInclusive = "HEAD",
+                            n = 1
+                        ),
+                        keepMerges = true,
+                        fullProjectDir = getSupportRootFolder()
+                    )
             if (commitList.isEmpty()) {
                 throw RuntimeException("Failed to find git commit for HEAD!")
             }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
index 6ae1586..3012509 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
@@ -22,7 +22,9 @@
 import org.gradle.api.file.ConfigurableFileCollection
 import org.gradle.api.file.FileCollection
 import org.gradle.api.file.RegularFile
+import org.gradle.api.file.RegularFileProperty
 import org.gradle.api.provider.ListProperty
+import org.gradle.api.provider.Provider
 import org.gradle.api.provider.SetProperty
 import org.gradle.api.tasks.CacheableTask
 import org.gradle.api.tasks.Classpath
@@ -91,7 +93,7 @@
      * SHOW_LIBRARY_METADATA: set to "true" to display the data
      */
     @get:[InputFile PathSensitive(PathSensitivity.NONE)]
-    lateinit var libraryMetadataFile: RegularFile
+    abstract val libraryMetadataFile: RegularFileProperty
 
     @Input
     var showLibraryMetadata: Boolean = false
@@ -169,7 +171,7 @@
     val excludedPackages: ListProperty<String>
     val excludedPackagesForJava: ListProperty<String>
     val excludedPackagesForKotlin: ListProperty<String>
-    var libraryMetadataFile: RegularFile
+    var libraryMetadataFile: Provider<RegularFile>
     var showLibraryMetadata: Boolean
 }
 
@@ -180,7 +182,7 @@
     excludedPackages: Set<String>,
     excludedPackagesForJava: Set<String>,
     excludedPackagesForKotlin: Set<String>,
-    libraryMetadataFile: RegularFile,
+    libraryMetadataFile: Provider<RegularFile>,
     showLibraryMetadata: Boolean,
 ) {
     val workQueue = workerExecutor.noIsolation()
@@ -206,7 +208,7 @@
 
             // b/183989795 tracks moving these away from an environment variables
             it.environment("DEVSITE_TENANT", "androidx")
-            it.environment("LIBRARY_METADATA_FILE", parameters.libraryMetadataFile.toString())
+            it.environment("LIBRARY_METADATA_FILE", parameters.libraryMetadataFile.get().toString())
             it.environment("SHOW_LIBRARY_METADATA", parameters.showLibraryMetadata)
 
             if (parameters.excludedPackages.get().isNotEmpty())
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt
new file mode 100644
index 0000000..61f76fd
--- /dev/null
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2022 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.build.dackka
+
+import java.io.File
+import org.gradle.api.DefaultTask
+import org.gradle.api.file.RegularFileProperty
+import org.gradle.api.provider.ListProperty
+import org.gradle.api.tasks.CacheableTask
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.OutputFile
+import org.gradle.api.tasks.TaskAction
+import org.json.JSONArray
+
+@CacheableTask
+abstract class GenerateMetadataTask : DefaultTask() {
+
+    /**
+     * List of [MetadataEntry] objects to convert to JSON
+     */
+    @get:Input
+    abstract val metadataEntries: ListProperty<MetadataEntry>
+
+    /**
+     * Location of the generated JSON file
+     */
+    @get:OutputFile
+    abstract val destinationFile: RegularFileProperty
+
+    @TaskAction
+    fun generate() {
+        val jsonMapping = generateJsonMapping(metadataEntries)
+        val json = JSONArray(jsonMapping)
+
+        val outputFile = File(destinationFile.get().toString())
+        outputFile.writeText(json.toString(2))
+    }
+
+    /**
+     * Converts a list of [MetadataEntry] objects into a list of maps.
+     */
+    private fun generateJsonMapping(
+        metadataEntries: ListProperty<MetadataEntry>
+    ): List<Map<String, String>> {
+        return metadataEntries.get().map { it.toMap() }
+    }
+}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dackka/MetadataEntry.kt b/buildSrc/private/src/main/kotlin/androidx/build/dackka/MetadataEntry.kt
new file mode 100644
index 0000000..0c7f190
--- /dev/null
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dackka/MetadataEntry.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2022 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.build.dackka
+
+import java.io.Serializable
+
+/**
+ * Helper data class to store the metadata information for each library/path.
+ */
+data class MetadataEntry(
+    val groupId: String,
+    val artifactId: String,
+    val releaseNotesUrl: String,
+    val sourceDir: String,
+) : Serializable {
+
+    /**
+     * Transforms the contents of this data class into a [Map] for future conversion to JSON
+     *
+     * @return the contents of this data class as a [Map].
+     */
+    fun toMap(): Map<String, String> {
+        return mapOf(
+            "groupId" to groupId,
+            "artifactId" to artifactId,
+            "releaseNotesUrl" to releaseNotesUrl,
+            "sourceDir" to sourceDir
+        )
+    }
+}
\ No newline at end of file
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
index b548a83..eab7764 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
@@ -18,6 +18,8 @@
 
 import androidx.build.SupportConfig
 import androidx.build.dackka.DackkaTask
+import androidx.build.dackka.GenerateMetadataTask
+import androidx.build.dackka.MetadataEntry
 import androidx.build.dependencies.KOTLIN_VERSION
 import androidx.build.doclava.DacOptions
 import androidx.build.doclava.DoclavaTask
@@ -52,8 +54,10 @@
 import org.gradle.api.file.ArchiveOperations
 import org.gradle.api.file.DuplicatesStrategy
 import org.gradle.api.file.FileCollection
+import org.gradle.api.file.RegularFile
 import org.gradle.api.model.ObjectFactory
 import org.gradle.api.plugins.JavaBasePlugin
+import org.gradle.api.provider.Provider
 import org.gradle.api.tasks.InputFiles
 import org.gradle.api.tasks.Internal
 import org.gradle.api.tasks.PathSensitive
@@ -80,7 +84,7 @@
     lateinit var samplesSourcesConfiguration: Configuration
     lateinit var dependencyClasspath: FileCollection
 
-    @get:javax.inject.Inject
+    @get:Inject
     abstract val archiveOperations: ArchiveOperations
 
     override fun apply(project: Project) {
@@ -353,10 +357,19 @@
             dependencies.add(project.dependencies.create(project.getLibraryByName("dackka")))
         }
 
+        val generateMetadataTask = project.tasks.register(
+            "generateMetadata",
+            GenerateMetadataTask::class.java
+        ) { task ->
+            task.metadataEntries.set(gatherMetadataEntries())
+            task.destinationFile.set(getMetadataRegularFile(project))
+        }
+
         val dackkaTask = project.tasks.register("dackkaDocs", DackkaTask::class.java) { task ->
             task.apply {
                 dependsOn(unzipDocsTask)
                 dependsOn(unzipSamplesTask)
+                dependsOn(generateMetadataTask)
 
                 description = "Generates reference documentation using a Google devsite Dokka" +
                     " plugin. Places docs in $generatedDocsDir"
@@ -372,10 +385,7 @@
                 excludedPackages = hiddenPackages.toSet()
                 excludedPackagesForJava = hiddenPackagesJava
                 excludedPackagesForKotlin = emptySet()
-
-                // TODO(b/239095864): replace this placeholder file with a dynamically generated one
-                libraryMetadataFile = project.rootProject.layout.projectDirectory
-                    .file("buildSrc/SampleLibraryMetadata.json")
+                libraryMetadataFile.set(getMetadataRegularFile(project))
 
                 // TODO(b/223712700): change to `true` once bug is resolved
                 showLibraryMetadata = false
@@ -663,6 +673,12 @@
     }
 }
 
+/**
+ * Location of the library metadata JSON file that's used by Dackka, represented as a [RegularFile]
+ */
+private fun getMetadataRegularFile(project: Project): Provider<RegularFile> =
+    project.layout.buildDirectory.file("SampleLibraryMetadata.json")
+
 private const val DOCLAVA_DEPENDENCY = "com.android:doclava:1.0.6"
 
 // List of packages to exclude from both Java and Kotlin refdoc generation
@@ -682,3 +698,42 @@
 private val hiddenPackagesJava = setOf(
     "androidx.*compose.*"
 )
+
+/**
+ * Converts AndroidX library and path data to a list of [MetadataEntry].
+ *
+ * TODO(b/239095864) replace static data with dynamically generated data from libraries
+ */
+private fun gatherMetadataEntries(): List<MetadataEntry> {
+    val pagingCompose = MetadataEntry(
+        groupId = "androidx.paging",
+        artifactId = "paging-compose",
+        releaseNotesUrl = "https://developer.android.com/jetpack/androidx/releases/paging",
+        sourceDir = "paging/compose"
+    )
+    val pagingRuntime = MetadataEntry(
+        groupId = "androidx.paging",
+        artifactId = "paging-runtime",
+        releaseNotesUrl = "https://developer.android.com/jetpack/androidx/releases/paging",
+        sourceDir = "paging"
+    )
+    val pagingRxJava2 = MetadataEntry(
+        groupId = "androidx.paging",
+        artifactId = "paging-rxjava2",
+        releaseNotesUrl = "https://developer.android.com/jetpack/androidx/releases/paging",
+        sourceDir = "paging/rxjava2"
+    )
+    val pagingRxJava3 = MetadataEntry(
+        groupId = "androidx.paging",
+        artifactId = "paging-rxjava3",
+        releaseNotesUrl = "https://developer.android.com/jetpack/androidx/releases/paging",
+        sourceDir = "paging/rxjava3"
+    )
+
+    return listOf(
+        pagingCompose,
+        pagingRuntime,
+        pagingRxJava2,
+        pagingRxJava3,
+    )
+}
\ No newline at end of file
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt b/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
index 047cce2..f4446fb 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
@@ -34,7 +34,7 @@
      * Either an integer value or a pre-release platform code, prefixed with "android-" (ex.
      * "android-28" or "android-Q") as you would see within the SDK's platforms directory.
      */
-    const val COMPILE_SDK_VERSION = "android-32"
+    const val COMPILE_SDK_VERSION = "android-33"
 
     /**
      * The Android SDK version to use for targetSdkVersion meta-data.
@@ -47,7 +47,7 @@
      * order for tests to run on devices running released versions of the Android OS. If this is
      * set to a pre-release version, tests will only be able to run on pre-release devices.
      */
-    const val TARGET_SDK_VERSION = 32
+    const val TARGET_SDK_VERSION = 33
 }
 
 fun Project.getExternalProjectPath(): File {
diff --git a/busytown/impl/build.sh b/busytown/impl/build.sh
index ae86c01..794912e 100755
--- a/busytown/impl/build.sh
+++ b/busytown/impl/build.sh
@@ -89,7 +89,7 @@
 fi
 
 # run the build
-if run ./gradlew --ci saveSystemStats "$@"; then
+if run ./gradlew --ci "$@"; then
   echo build passed
 else
   if [ "$DIAGNOSE" == "true" ]; then
@@ -99,7 +99,7 @@
     # We probably won't have enough time to fully diagnose the problem given this timeout, but
     # we might be able to determine whether this problem is reproducible enough for a developer to
     # more easily investigate further
-    ./development/diagnose-build-failure/diagnose-build-failure.sh --timeout 600 "--ci saveSystemStats $*"
+    ./development/diagnose-build-failure/diagnose-build-failure.sh --timeout 600 "--ci $*"
   fi
   if grep "/prefab" "$DIST_DIR/logs/gradle.log" >/dev/null 2>/dev/null; then
     # error looks like it might have involved prefab, copy the prefab dir to DIST where we can find it
diff --git a/busytown/impl/check_translations.sh b/busytown/impl/check_translations.sh
index f18ec2b..35501ad 100755
--- a/busytown/impl/check_translations.sh
+++ b/busytown/impl/check_translations.sh
@@ -19,12 +19,13 @@
 expect="$tempdir/expect.txt"
 find . \
     \( \
-      -iname '*samples*' \
+      -iname '*sample*' \
+      -o -iname '*donottranslate*' \
       -o -iname '*debug*' \
       -o -iname '*test*' \
     \) \
     -prune -o \
-    -path '*/res/values/strings.xml' \
+    -path '*/res/values/*strings.xml' \
     -print \
   | sed -n 's/.\///p' \
   | sort \
@@ -33,16 +34,16 @@
 # Scrape string.xml files for platform branch
 actual="$tempdir/actual.txt"
 grep 'androidx-platform-dev' "$exports" \
-  | grep -Eo '[^ ]+/strings\.xml' \
+  | grep -Eo '[^ ]+strings\.xml' \
   | sort \
   > "$actual"
 
 # Compare and report
 diff=$(diff "${expect}" "${actual}" | { grep '<' || true; })
 if [ -n "$diff" ]; then
-  echo "Missing files in $exports:" &> 2
-  diff "$expect" "$actual" | grep strings.xml | sed -n 's/< //p' &> 2
-  echo &> 2
-  echo 'See go/androidx/playbook#translations for more information' &> 2
+  echo "Missing files in $exports:" >&2
+  diff "$expect" "$actual" | grep strings.xml | sed -n 's/< //p' >&2
+  echo >&2
+  echo 'See go/androidx/playbook#translations for more information' >&2
   exit 1
 fi
diff --git a/camera/camera-camera2/lint-baseline.xml b/camera/camera-camera2/lint-baseline.xml
index ec11370..322101d 100644
--- a/camera/camera-camera2/lint-baseline.xml
+++ b/camera/camera-camera2/lint-baseline.xml
@@ -1,41 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 30 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO`"
-        errorLine1="                CaptureRequest.CONTROL_ZOOM_RATIO, null);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/camera/camera2/internal/ZoomControlDeviceTest.java"/>
-    </issue>
-
-    <issue
-        id="BanUncheckedReflection"
-        message="Calling `Method.invoke` without an SDK check"
-        errorLine1="                return (Size) getSurfaceSize.invoke(null, surface);"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatBaseImpl.java"/>
-    </issue>
-
-    <issue
-        id="BanUncheckedReflection"
-        message="Calling `Method.invoke` without an SDK check"
-        errorLine1="                return (int) detectSurfaceType.invoke(null, surface);"
-        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatBaseImpl.java"/>
-    </issue>
-
-    <issue
-        id="BanUncheckedReflection"
-        message="Calling `Method.invoke` without an SDK check"
-        errorLine1="                return (int) getGenerationId.invoke(surface);"
-        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatBaseImpl.java"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnsafeOptInUsageError"
@@ -130,303 +94,6 @@
     <issue
         id="UnsafeOptInUsageError"
         message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="        configBuilder.setCaptureRequestOption("
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                CaptureRequest.CONTROL_AF_MODE, mCameraControl.getSupportedAfMode(afMode));"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                CaptureRequest.CONTROL_AF_MODE, mCameraControl.getSupportedAfMode(afMode));"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="            configBuilder.setCaptureRequestOption("
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                    CaptureRequest.CONTROL_AF_REGIONS, mAfRects);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                    CaptureRequest.CONTROL_AF_REGIONS, mAfRects);"
-        errorLine2="                                                       ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="            configBuilder.setCaptureRequestOption("
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                    CaptureRequest.CONTROL_AE_REGIONS, mAeRects);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                    CaptureRequest.CONTROL_AE_REGIONS, mAeRects);"
-        errorLine2="                                                       ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="            configBuilder.setCaptureRequestOption("
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                    CaptureRequest.CONTROL_AWB_REGIONS, mAwbRects);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                    CaptureRequest.CONTROL_AWB_REGIONS, mAwbRects);"
-        errorLine2="                                                        ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="        Camera2ImplConfig.Builder configBuilder = new Camera2ImplConfig.Builder();"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="        configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="        configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                CaptureRequest.CONTROL_AF_TRIGGER_START);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_MODE,"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_MODE,"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                    mCameraControl.getSupportedAeMode(CaptureRequest.CONTROL_AE_MODE_ON));"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="        builder.addImplementationOptions(configBuilder.build());"
-        errorLine2="                                                       ~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="        Camera2ImplConfig.Builder configBuilder = new Camera2ImplConfig.Builder();"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="        configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="        configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="        builder.addImplementationOptions(configBuilder.build());"
-        errorLine2="                                                       ~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="        Camera2ImplConfig.Builder configBuilder = new Camera2ImplConfig.Builder();"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                    CaptureRequest.CONTROL_AF_TRIGGER_CANCEL);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="            configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="                    CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
-        errorLine1="        builder.addImplementationOptions(configBuilder.build());"
-        errorLine2="                                                       ~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.camera2.interop.ExperimentalCamera2Interop&apos; or &apos;@OptIn(markerClass = androidx.camera.camera2.interop.ExperimentalCamera2Interop.class)&apos;"
         errorLine1="        Camera2ImplConfig.Builder camera2ConfigBuilder = new Camera2ImplConfig.Builder();"
         errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -442,85 +109,4 @@
             file="src/main/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpacker.java"/>
     </issue>
 
-    <issue
-        id="ObsoleteSdkInt"
-        message="Unnecessary; SDK_INT is always >= 24 from outer annotation (`@RequiresApi(24)`)"
-        errorLine1="    @RequiresApi(21)"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi24Impl.java"/>
-    </issue>
-
-    <issue
-        id="ObsoleteSdkInt"
-        message="Unnecessary; SDK_INT is always >= 26 from outer annotation (`@RequiresApi(26)`)"
-        errorLine1="    @RequiresApi(21)"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi26Impl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;OutputConfiguration> transformFromCompat("
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;OutputConfigurationCompat> getOutputConfigurations() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CameraCaptureSession.StateCallback getStateCallback() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Executor getExecutor() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public InputConfigurationCompat getInputConfiguration() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureRequest getSessionParameters() {"
-        errorLine2="           ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setSessionParameters(CaptureRequest params) {"
-        errorLine2="                                     ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
-    </issue>
-
 </issues>
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraImplTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraImplTest.java
index aad2b48..00153de 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraImplTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraImplTest.java
@@ -81,6 +81,7 @@
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TestRule;
@@ -530,6 +531,7 @@
     }
 
     @Test
+    @Ignore("b/239752223")
     public void cameraTransitionsThroughPendingState_whenNoCamerasAvailable() {
         @SuppressWarnings("unchecked") // Cannot mock generic type inline
         Observable.Observer<CameraInternal.State> mockObserver =
@@ -573,6 +575,7 @@
 
     @SuppressWarnings("unchecked")
     @Test
+    @Ignore("b/239752223")
     public void openNewCaptureSessionImmediateBeforePreviousCaptureSessionClosed()
             throws InterruptedException {
         mCamera2CameraImpl.open();
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
index 6839558..e5c45ee 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
@@ -42,6 +42,7 @@
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CameraDevice;
 import android.hardware.camera2.CameraManager;
+import android.hardware.camera2.CameraMetadata;
 import android.hardware.camera2.CaptureRequest;
 import android.hardware.camera2.CaptureResult;
 import android.hardware.camera2.TotalCaptureResult;
@@ -71,11 +72,15 @@
 import androidx.camera.core.impl.CameraCaptureResult;
 import androidx.camera.core.impl.CaptureConfig;
 import androidx.camera.core.impl.DeferrableSurface;
+import androidx.camera.core.impl.ImageAnalysisConfig;
+import androidx.camera.core.impl.ImageCaptureConfig;
 import androidx.camera.core.impl.ImmediateSurface;
 import androidx.camera.core.impl.MutableOptionsBundle;
+import androidx.camera.core.impl.PreviewConfig;
 import androidx.camera.core.impl.Quirks;
 import androidx.camera.core.impl.SessionConfig;
 import androidx.camera.core.impl.UseCaseConfig;
+import androidx.camera.core.impl.VideoCaptureConfig;
 import androidx.camera.core.impl.utils.executor.CameraXExecutors;
 import androidx.camera.core.impl.utils.futures.FutureCallback;
 import androidx.camera.core.impl.utils.futures.Futures;
@@ -280,6 +285,20 @@
                 == OutputConfigurationCompat.STREAM_USE_CASE_NONE);
     }
 
+    @SdkSuppress(minSdkVersion = 33)
+    @Test
+    public void setStreamUseCase() {
+        ImageReader imageReader0 = ImageReader.newInstance(640, 480, ImageFormat.YUV_420_888, 2);
+        OutputConfigurationCompat outputConfigurationCompat =
+                new OutputConfigurationCompat(imageReader0.getSurface());
+        assertTrue(outputConfigurationCompat.getStreamUseCase()
+                == CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT);
+        outputConfigurationCompat.setStreamUseCase(
+                CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW);
+        assertTrue(outputConfigurationCompat.getStreamUseCase()
+                == CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW);
+    }
+
     @SdkSuppress(maxSdkVersion = 32)
     @Test
     public void getStreamUseCaseFromUseCaseConfigsNotSupported() {
@@ -290,6 +309,102 @@
                 == OutputConfigurationCompat.STREAM_USE_CASE_NONE);
     }
 
+    @SdkSuppress(minSdkVersion = 33)
+    @Test
+    public void getStreamUseCaseFromUseCaseConfigsEmptyUseCase() {
+        Collection<UseCaseConfig<?>> useCaseConfigs = new ArrayList<>();
+        assertTrue(StreamUseCaseUtil.getStreamUseCaseFromUseCaseConfigs(useCaseConfigs,
+                new ArrayList<>())
+                == CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT);
+    }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @Test
+    public void getStreamUseCaseFromUseCaseConfigsNoPreview() {
+        Collection<UseCaseConfig<?>> useCaseConfigs = new ArrayList<>();
+        useCaseConfigs.add(new FakeUseCaseConfig.Builder().getUseCaseConfig());
+        assertTrue(StreamUseCaseUtil.getStreamUseCaseFromUseCaseConfigs(useCaseConfigs,
+                new ArrayList<>())
+                == CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT);
+    }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @Test
+    public void getStreamUseCaseFromUseCaseConfigsPreview() {
+        Collection<UseCaseConfig<?>> useCaseConfigs = new ArrayList<>();
+        PreviewConfig previewConfig = new PreviewConfig(MutableOptionsBundle.create());
+        useCaseConfigs.add(previewConfig);
+        assertTrue(StreamUseCaseUtil.getStreamUseCaseFromUseCaseConfigs(useCaseConfigs,
+                new ArrayList<>())
+                == CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW);
+    }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @Test
+    public void getStreamUseCaseFromUseCaseConfigsZSL() {
+        Collection<UseCaseConfig<?>> useCaseConfigs = new ArrayList<>();
+        PreviewConfig previewConfig = new PreviewConfig(MutableOptionsBundle.create());
+        useCaseConfigs.add(previewConfig);
+        Collection<SessionConfig> sessionConfigs = new ArrayList<>();
+        sessionConfigs.add(new SessionConfig.Builder().setTemplateType(
+                CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG).build());
+        assertTrue(StreamUseCaseUtil.getStreamUseCaseFromUseCaseConfigs(useCaseConfigs,
+                sessionConfigs)
+                == CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT);
+    }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @Test
+    public void getStreamUseCaseFromUseCaseConfigsAnalysis() {
+        Collection<UseCaseConfig<?>> useCaseConfigs = new ArrayList<>();
+        PreviewConfig previewConfig = new PreviewConfig(MutableOptionsBundle.create());
+        useCaseConfigs.add(previewConfig);
+        ImageAnalysisConfig analysisConfig = new ImageAnalysisConfig(MutableOptionsBundle.create());
+        useCaseConfigs.add(analysisConfig);
+        assertTrue(StreamUseCaseUtil.getStreamUseCaseFromUseCaseConfigs(useCaseConfigs,
+                new ArrayList<>())
+                == CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT);
+    }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @Test
+    public void getStreamUseCaseFromUseCaseConfigsImageCapture() {
+        Collection<UseCaseConfig<?>> useCaseConfigs = new ArrayList<>();
+        ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig(
+                MutableOptionsBundle.create());
+        useCaseConfigs.add(imageCaptureConfig);
+        assertTrue(StreamUseCaseUtil.getStreamUseCaseFromUseCaseConfigs(useCaseConfigs,
+                new ArrayList<>())
+                == CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_STILL_CAPTURE);
+    }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @Test
+    public void getStreamUseCaseFromUseCaseConfigsVideoCapture() {
+        Collection<UseCaseConfig<?>> useCaseConfigs = new ArrayList<>();
+        VideoCaptureConfig videoCaptureConfig =
+                new VideoCaptureConfig(MutableOptionsBundle.create());
+        useCaseConfigs.add(videoCaptureConfig);
+        assertTrue(StreamUseCaseUtil.getStreamUseCaseFromUseCaseConfigs(useCaseConfigs,
+                new ArrayList<>())
+                == CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_VIDEO_RECORD);
+    }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @Test
+    public void getStreamUseCaseFromUseCaseConfigsVideoAndImageCapture() {
+        Collection<UseCaseConfig<?>> useCaseConfigs = new ArrayList<>();
+        VideoCaptureConfig videoCaptureConfig =
+                new VideoCaptureConfig(MutableOptionsBundle.create());
+        useCaseConfigs.add(videoCaptureConfig);
+        ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig(
+                MutableOptionsBundle.create());
+        useCaseConfigs.add(imageCaptureConfig);
+        assertTrue(StreamUseCaseUtil.getStreamUseCaseFromUseCaseConfigs(useCaseConfigs,
+                new ArrayList<>())
+                == CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW_VIDEO_STILL);
+    }
+
     // Sharing surface of YUV format is supported since API 28
     @SdkSuppress(minSdkVersion = 28)
     @Test
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/StreamUseCaseUtil.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/StreamUseCaseUtil.java
index 4e50b76..17881be 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/StreamUseCaseUtil.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/StreamUseCaseUtil.java
@@ -17,6 +17,7 @@
 package androidx.camera.camera2.internal;
 
 import android.hardware.camera2.CameraDevice;
+import android.hardware.camera2.CameraMetadata;
 import android.os.Build;
 
 import androidx.annotation.NonNull;
@@ -58,22 +59,19 @@
         }
         if (useCaseConfigs.isEmpty()) {
             //If the collection is empty, return default case.
-            //TODO: b/237337336 Return SCALER_AVAILABLE_STREAM_USE_CASE_DEFAULT here
-            return OutputConfigurationCompat.STREAM_USE_CASE_NONE;
+            return CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT;
         } else {
             for (SessionConfig sessionConfig : sessionConfigs) {
                 if (sessionConfig.getTemplateType() == CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG) {
                     //If is ZSL, return default case.
-                    //TODO: b/237337336 Return SCALER_AVAILABLE_STREAM_USE_CASE_DEFAULT here
-                    return OutputConfigurationCompat.STREAM_USE_CASE_NONE;
+                    return CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT;
                 }
             }
             boolean hasImageCapture = false, hasVideoCapture = false, hasPreview = false;
             for (UseCaseConfig<?> useCaseConfig : useCaseConfigs) {
                 if (useCaseConfig instanceof ImageAnalysisConfig) {
                     //If contains analysis use case, return default case.
-                    //TODO: b/237337336 Return SCALER_AVAILABLE_STREAM_USE_CASE_DEFAULT here
-                    return OutputConfigurationCompat.STREAM_USE_CASE_NONE;
+                    return CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT;
                 }
 
                 if (useCaseConfig instanceof PreviewConfig) {
@@ -84,9 +82,7 @@
                 if (useCaseConfig instanceof ImageCaptureConfig) {
                     if (hasVideoCapture) {
                         // If has both image and video capture, return preview video still case.
-                        //TODO: b/237337336 Return
-                        // SCALER_AVAILABLE_STREAM_USE_CASE_PREVIEW_VIDEO_STILL here
-                        return OutputConfigurationCompat.STREAM_USE_CASE_NONE;
+                        return CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW_VIDEO_STILL;
                     }
                     hasImageCapture = true;
                     continue;
@@ -96,34 +92,28 @@
                 if (useCaseConfig instanceof VideoCaptureConfig) {
                     if (hasImageCapture) {
                         // If has both image and video capture, return preview video still case.
-                        //TODO: b/237337336 Return
-                        // SCALER_AVAILABLE_STREAM_USE_CASE_PREVIEW_VIDEO_STILL here
-                        return OutputConfigurationCompat.STREAM_USE_CASE_NONE;
+                        return CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW_VIDEO_STILL;
                     }
                     hasVideoCapture = true;
                     continue;
 
                 }
             }
-            if (!hasPreview) {
-                // If doesn't contain preview, we are not sure what's the situation. Return
-                // default case.
-                //TODO: b/237337336 Return SCALER_AVAILABLE_STREAM_USE_CASE_DEFAULT here
-                return OutputConfigurationCompat.STREAM_USE_CASE_NONE;
-            }
 
             if (hasImageCapture) {
                 // If contains image capture, return still capture case.
-                //TODO: b/237337336 Return SCALER_AVAILABLE_STREAM_USE_CASE_STILL_CAPTURE here
-                return OutputConfigurationCompat.STREAM_USE_CASE_NONE;
+                return CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_STILL_CAPTURE;
             } else if (hasVideoCapture) {
                 // If contains video capture, return video record case.
-                //TODO: b/237337336 Return SCALER_AVAILABLE_STREAM_USE_CASE_VIDEO_RECORD here
-                return OutputConfigurationCompat.STREAM_USE_CASE_NONE;
+                return CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_VIDEO_RECORD;
             } else {
+                if (!hasPreview) {
+                    // If doesn't contain preview, we are not sure what's the situation. Return
+                    // default case.
+                    return CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT;
+                }
                 // If contains only preview, return view finder case.
-                //TODO: b/237337336 Return SCALER_AVAILABLE_STREAM_USE_CASE_VIEW_FINDER here
-                return OutputConfigurationCompat.STREAM_USE_CASE_NONE;
+                return CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW;
             }
         }
     }
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompat.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompat.java
index 800d3bc..30212e8a 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompat.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompat.java
@@ -60,7 +60,9 @@
     }
 
     public OutputConfigurationCompat(int surfaceGroupId, @NonNull Surface surface) {
-        if (Build.VERSION.SDK_INT >= 28) {
+        if (Build.VERSION.SDK_INT >= 33) {
+            mImpl = new OutputConfigurationCompatApi33Impl(surfaceGroupId, surface);
+        } else if (Build.VERSION.SDK_INT >= 28) {
             mImpl = new OutputConfigurationCompatApi28Impl(surfaceGroupId, surface);
         } else if (Build.VERSION.SDK_INT >= 26) {
             mImpl = new OutputConfigurationCompatApi26Impl(surfaceGroupId, surface);
@@ -105,7 +107,9 @@
     public <T> OutputConfigurationCompat(@NonNull Size surfaceSize, @NonNull Class<T> klass) {
         OutputConfiguration deferredConfig =
                 ApiCompat.Api26Impl.newOutputConfiguration(surfaceSize, klass);
-        if (Build.VERSION.SDK_INT >= 28) {
+        if (Build.VERSION.SDK_INT >= 33) {
+            mImpl = OutputConfigurationCompatApi33Impl.wrap(deferredConfig);
+        } else if (Build.VERSION.SDK_INT >= 28) {
             mImpl = OutputConfigurationCompatApi28Impl.wrap(deferredConfig);
         } else {
             mImpl = OutputConfigurationCompatApi26Impl.wrap(deferredConfig);
@@ -134,7 +138,10 @@
         }
 
         OutputConfigurationCompatImpl outputConfigurationCompatImpl = null;
-        if (Build.VERSION.SDK_INT >= 28) {
+        if (Build.VERSION.SDK_INT >= 33) {
+            outputConfigurationCompatImpl = OutputConfigurationCompatApi33Impl.wrap(
+                    (OutputConfiguration) outputConfiguration);
+        } else if (Build.VERSION.SDK_INT >= 28) {
             outputConfigurationCompatImpl = OutputConfigurationCompatApi28Impl.wrap(
                     (OutputConfiguration) outputConfiguration);
         } else if (Build.VERSION.SDK_INT >= 26) {
@@ -345,6 +352,31 @@
     /**
      * Set the stream use case associated with this {@link OutputConfigurationCompat}.
      *
+     * Stream use case is used to describe the purpose of the stream, whether it's for live
+     * preview, still image capture, video recording, or their combinations. This flag is
+     * useful
+     * for scenarios where the immediate consumer target isn't sufficient to indicate the
+     * stream's usage.
+     *
+     * The main difference between stream use case and capture intent is that the former
+     * enables
+     * the camera device to optimize camera hardware and software pipelines based on user
+     * scenarios for each stream, whereas the latter is mainly a hint to camera to decide
+     * optimal
+     * 3A strategy that's applicable to the whole session. The camera device carries out
+     * configurations such as selecting tuning parameters, choosing camera sensor mode, and
+     * constructing image processing pipeline based on the streams's use cases. Capture
+     * intents
+     * are then used to fine tune 3A behaviors such as adjusting AE/AF convergence speed, and
+     * capture intents may change during the lifetime of a session. For example, for a
+     * session
+     * with a PREVIEW_VIDEO_STILL use case stream and a STILL_CAPTURE use case stream, the
+     * capture intents may be PREVIEW with fast 3A convergence speed and flash metering with
+     * automatic control for live preview, STILL_CAPTURE with best 3A parameters for still
+     * photo
+     * capture, or VIDEO_RECORD with slower 3A convergence speed for better video playback
+     * experience.
+     *
      * <p> Stream use case is a API 33 and above concept for optimizing image process pipeline
      * for a given stream session. If not set,{@value #SURFACE_GROUP_ID_NONE} is used.
      * </p>
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi33Impl.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi33Impl.java
new file mode 100644
index 0000000..78e9cab
--- /dev/null
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi33Impl.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2022 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.camera.camera2.internal.compat.params;
+
+import android.hardware.camera2.params.OutputConfiguration;
+import android.view.Surface;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+
+/**
+ * Implementation of the OutputConfiguration compat methods for API 33 and above.
+ */
+@RequiresApi(33)
+public class OutputConfigurationCompatApi33Impl extends OutputConfigurationCompatApi28Impl {
+
+    OutputConfigurationCompatApi33Impl(@NonNull Surface surface) {
+        super(new OutputConfiguration(surface));
+    }
+
+    OutputConfigurationCompatApi33Impl(int surfaceGroupId, @NonNull Surface surface) {
+        this(new OutputConfiguration(surfaceGroupId, surface));
+    }
+
+    OutputConfigurationCompatApi33Impl(@NonNull Object outputConfiguration) {
+        super(outputConfiguration);
+    }
+
+    @RequiresApi(33)
+    static OutputConfigurationCompatApi33Impl wrap(
+            @NonNull OutputConfiguration outputConfiguration) {
+        return new OutputConfigurationCompatApi33Impl(outputConfiguration);
+    }
+
+    @Override
+    public void setStreamUseCase(long streamUseCase) {
+        if (streamUseCase == OutputConfigurationCompat.STREAM_USE_CASE_NONE) {
+            return;
+        }
+        ((OutputConfiguration) getOutputConfiguration()).setStreamUseCase(streamUseCase);
+    }
+
+    /**
+     * Get the current stream use case for this OutputConfiguration.
+     */
+    @Override
+    public long getStreamUseCase() {
+        return ((OutputConfiguration) getOutputConfiguration()).getStreamUseCase();
+    }
+}
diff --git a/camera/camera-core/lint-baseline.xml b/camera/camera-core/lint-baseline.xml
index b82f249..c9366ef 100644
--- a/camera/camera-core/lint-baseline.xml
+++ b/camera/camera-core/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnsafeOptInUsageError"
@@ -7,9 +7,7 @@
         errorLine1="        if (Build.VERSION.SDK_INT >= 23 &amp;&amp; getCaptureMode() == CAPTURE_MODE_ZERO_SHUTTER_LAG) {"
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/ImageCapture.java"
-            line="385"
-            column="64"/>
+            file="src/main/java/androidx/camera/core/ImageCapture.java"/>
     </issue>
 
     <issue
@@ -18,9 +16,7 @@
         errorLine1="            case CAPTURE_MODE_ZERO_SHUTTER_LAG:"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/ImageCapture.java"
-            line="1269"
-            column="18"/>
+            file="src/main/java/androidx/camera/core/ImageCapture.java"/>
     </issue>
 
     <issue
@@ -29,63 +25,7 @@
         errorLine1="            CAPTURE_MODE_ZERO_SHUTTER_LAG})"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/core/ImageCapture.java"
-            line="1779"
-            column="13"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    ListenableFuture&lt;O> apply(@Nullable I input) throws Exception;"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/utils/futures/AsyncFunction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    boolean checkSupported(String cameraId, List&lt;SurfaceConfig> surfaceConfigList);"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    boolean checkSupported(String cameraId, List&lt;SurfaceConfig> surfaceConfigList);"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    SurfaceConfig transformSurfaceConfig(String cameraId, int imageFormat, Size size);"
-        errorLine2="    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    SurfaceConfig transformSurfaceConfig(String cameraId, int imageFormat, Size size);"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    SurfaceConfig transformSurfaceConfig(String cameraId, int imageFormat, Size size);"
-        errorLine2="                                                                           ~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
+            file="src/main/java/androidx/camera/core/ImageCapture.java"/>
     </issue>
 
     <issue
@@ -115,184 +55,4 @@
             file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onOutputSurface(Surface surface, int imageFormat);"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void process(ImageProxyBundle bundle);"
-        errorLine2="                 ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onResolutionUpdate(Size size);"
-        errorLine2="                            ~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureConfig getCaptureConfig();"
-        errorLine2="    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/CaptureStage.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public CaptureConfig getCaptureConfig() {"
-        errorLine2="               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/CaptureStage.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onFailure(Throwable t);"
-        errorLine2="                   ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/utils/futures/FutureCallback.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static Handler getInstance() {"
-        errorLine2="                  ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/utils/MainThreadAsyncHandler.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static &lt;T> Optional&lt;T> absent() {"
-        errorLine2="                      ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static &lt;T> Optional&lt;T> of(T reference) {"
-        errorLine2="                      ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static &lt;T> Optional&lt;T> fromNullable(@Nullable T nullableReference) {"
-        errorLine2="                      ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract Optional&lt;T> or(Optional&lt;? extends T> secondChoice);"
-        errorLine2="                    ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract Optional&lt;T> or(Optional&lt;? extends T> secondChoice);"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract T or(Supplier&lt;? extends T> supplier);"
-        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SurfaceSizeDefinition create("
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Size analysisSize,"
-        errorLine2="            ~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Size previewSize,"
-        errorLine2="            ~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Size recordSize) {"
-        errorLine2="            ~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract Size getAnalysisSize();"
-        errorLine2="                    ~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract Size getPreviewSize();"
-        errorLine2="                    ~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract Size getRecordSize();"
-        errorLine2="                    ~~~~">
-        <location
-            file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
-    </issue>
-
 </issues>
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/EffectBundleTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/EffectBundleTest.kt
index 85572f1..616fb90 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/EffectBundleTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/EffectBundleTest.kt
@@ -19,6 +19,7 @@
 import android.os.Build
 import androidx.camera.core.SurfaceEffect.PREVIEW
 import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
+import androidx.camera.testing.fakes.FakeSurfaceEffect
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -41,11 +42,7 @@
 
     @Test(expected = IllegalArgumentException::class)
     fun addMoreThanOnePreviewEffect_throwsException() {
-        val surfaceEffect = object : SurfaceEffect {
-            override fun onInputSurface(request: SurfaceRequest) {}
-
-            override fun onOutputSurface(surfaceOutput: SurfaceOutput) {}
-        }
+        val surfaceEffect = FakeSurfaceEffect(mainThreadExecutor())
         EffectBundle.Builder(mainThreadExecutor())
             .addEffect(PREVIEW, surfaceEffect)
             .addEffect(PREVIEW, surfaceEffect)
@@ -54,11 +51,7 @@
     @Test
     fun addPreviewEffect_hasPreviewEffect() {
         // Arrange.
-        val surfaceEffect = object : SurfaceEffect {
-            override fun onInputSurface(request: SurfaceRequest) {}
-
-            override fun onOutputSurface(surfaceOutput: SurfaceOutput) {}
-        }
+        val surfaceEffect = FakeSurfaceEffect(mainThreadExecutor())
         // Act.
         val effectBundle = EffectBundle.Builder(mainThreadExecutor())
             .addEffect(PREVIEW, surfaceEffect)
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt
index 1be7cf1..31040ff 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/PreviewTest.kt
@@ -42,6 +42,7 @@
 import androidx.camera.testing.fakes.FakeCamera
 import androidx.camera.testing.fakes.FakeCameraDeviceSurfaceManager
 import androidx.camera.testing.fakes.FakeCameraFactory
+import androidx.camera.testing.fakes.FakeSurfaceEffectInternal
 import androidx.camera.testing.fakes.FakeUseCase
 import androidx.test.core.app.ApplicationProvider
 import com.google.common.truth.Truth.assertThat
@@ -71,8 +72,6 @@
 
     private lateinit var appSurface: Surface
     private lateinit var appSurfaceTexture: SurfaceTexture
-    private lateinit var effectSurface: Surface
-    private lateinit var effectSurfaceTexture: SurfaceTexture
     private lateinit var camera: FakeCamera
     private lateinit var cameraXConfig: CameraXConfig
     private lateinit var context: Context
@@ -82,8 +81,6 @@
     fun setUp() {
         appSurfaceTexture = SurfaceTexture(0)
         appSurface = Surface(appSurfaceTexture)
-        effectSurfaceTexture = SurfaceTexture(0)
-        effectSurface = Surface(effectSurfaceTexture)
         camera = FakeCamera()
 
         val cameraFactoryProvider =
@@ -106,8 +103,6 @@
     fun tearDown() {
         appSurfaceTexture.release()
         appSurface.release()
-        effectSurfaceTexture.release()
-        effectSurface.release()
         with(cameraUseCaseAdapter) {
             this?.removeUseCases(useCases)
         }
@@ -222,27 +217,10 @@
     @Test
     fun bindAndUnbindPreview_surfacesPropagated() {
         // Arrange.
-        var surfaceOutputReceived: SurfaceOutput? = null
-        var effectSurfaceReadyToRelease = false
-        var isEffectReleased = false
-        val surfaceEffect = object : SurfaceEffectInternal {
-            override fun onInputSurface(request: SurfaceRequest) {
-                request.provideSurface(effectSurface, mainThreadExecutor()) {
-                    effectSurfaceReadyToRelease = true
-                }
-            }
-
-            override fun onOutputSurface(surfaceOutput: SurfaceOutput) {
-                surfaceOutputReceived = surfaceOutput
-            }
-
-            override fun release() {
-                isEffectReleased = true
-            }
-        }
+        val effect = FakeSurfaceEffectInternal(mainThreadExecutor(), false)
 
         // Act: create pipeline in Preview and provide Surface.
-        val preview = createPreviewPipelineAndAttachEffect(surfaceEffect)
+        val preview = createPreviewPipelineAndAttachEffect(effect)
         val surfaceRequest = preview.mCurrentSurfaceRequest!!
         var appSurfaceReadyToRelease = false
         surfaceRequest.provideSurface(appSurface, mainThreadExecutor()) {
@@ -251,30 +229,26 @@
         shadowOf(getMainLooper()).idle()
 
         // Assert: surfaceOutput received.
-        assertThat(surfaceOutputReceived).isNotNull()
-        var requestedToReleaseOutputSurface = false
-        surfaceOutputReceived!!.getSurface(mainThreadExecutor()) {
-            requestedToReleaseOutputSurface = true
-        }
-        assertThat(isEffectReleased).isFalse()
-        assertThat(requestedToReleaseOutputSurface).isFalse()
-        assertThat(effectSurfaceReadyToRelease).isFalse()
+        assertThat(effect.surfaceOutput).isNotNull()
+        assertThat(effect.isReleased).isFalse()
+        assertThat(effect.isOutputSurfaceRequestedToClose).isFalse()
+        assertThat(effect.isInputSurfaceReleased).isFalse()
         assertThat(appSurfaceReadyToRelease).isFalse()
         // effect surface is provided to camera.
-        assertThat(preview.sessionConfig.surfaces[0].surface.get()).isEqualTo(effectSurface)
+        assertThat(preview.sessionConfig.surfaces[0].surface.get()).isEqualTo(effect.inputSurface)
 
         // Act: unbind Preview.
         preview.onDetached()
         shadowOf(getMainLooper()).idle()
 
         // Assert: effect and effect surface is released.
-        assertThat(isEffectReleased).isTrue()
-        assertThat(requestedToReleaseOutputSurface).isTrue()
-        assertThat(effectSurfaceReadyToRelease).isTrue()
+        assertThat(effect.isReleased).isTrue()
+        assertThat(effect.isOutputSurfaceRequestedToClose).isTrue()
+        assertThat(effect.isInputSurfaceReleased).isTrue()
         assertThat(appSurfaceReadyToRelease).isFalse()
 
         // Act: close SurfaceOutput
-        surfaceOutputReceived!!.close()
+        effect.surfaceOutput!!.close()
         shadowOf(getMainLooper()).idle()
         assertThat(appSurfaceReadyToRelease).isTrue()
     }
@@ -282,18 +256,8 @@
     @Test
     fun invokedErrorListener_recreatePipeline() {
         // Arrange: create pipeline and get a reference of the SessionConfig.
-        val surfaceEffect = object : SurfaceEffectInternal {
-            override fun onInputSurface(request: SurfaceRequest) {}
-
-            override fun onOutputSurface(surfaceOutput: SurfaceOutput) {
-                surfaceOutput.getSurface(mainThreadExecutor()) {
-                    surfaceOutput.close()
-                }
-            }
-
-            override fun release() {}
-        }
-        val preview = createPreviewPipelineAndAttachEffect(surfaceEffect)
+        val effect = FakeSurfaceEffectInternal(mainThreadExecutor())
+        val preview = createPreviewPipelineAndAttachEffect(effect)
         val originalSessionConfig = preview.sessionConfig
 
         // Act: invoke the error listener.
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
index 42f71acb..951f021 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
@@ -19,11 +19,10 @@
 import android.os.Build
 import androidx.camera.core.EffectBundle
 import androidx.camera.core.Preview
-import androidx.camera.core.SurfaceEffect
 import androidx.camera.core.SurfaceEffect.PREVIEW
-import androidx.camera.core.SurfaceOutput
-import androidx.camera.core.SurfaceRequest
+import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
 import androidx.camera.core.processing.SurfaceEffectWithExecutor
+import androidx.camera.testing.fakes.FakeSurfaceEffect
 import com.google.common.truth.Truth.assertThat
 import java.util.concurrent.ExecutorService
 import java.util.concurrent.Executors
@@ -43,22 +42,20 @@
 @Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
 class CameraUseCaseAdapterTest {
 
-    private lateinit var surfaceEffect: SurfaceEffect
+    private lateinit var surfaceEffect: FakeSurfaceEffect
     private lateinit var mEffectBundle: EffectBundle
     private lateinit var executor: ExecutorService
 
     @Before
     fun setUp() {
-        surfaceEffect = object : SurfaceEffect {
-            override fun onInputSurface(request: SurfaceRequest) {}
-            override fun onOutputSurface(surfaceOutput: SurfaceOutput) {}
-        }
+        surfaceEffect = FakeSurfaceEffect(mainThreadExecutor())
         executor = Executors.newSingleThreadExecutor()
         mEffectBundle = EffectBundle.Builder(executor).addEffect(PREVIEW, surfaceEffect).build()
     }
 
     @After
     fun tearDown() {
+        surfaceEffect.cleanUp()
         executor.shutdown()
     }
 
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectNodeTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectNodeTest.kt
index ca79bdea..7df85dd 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectNodeTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectNodeTest.kt
@@ -24,11 +24,10 @@
 import android.util.Size
 import android.view.Surface
 import androidx.camera.core.SurfaceEffect.PREVIEW
-import androidx.camera.core.SurfaceOutput
-import androidx.camera.core.SurfaceRequest
 import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
 import androidx.camera.core.impl.utils.futures.Futures
 import androidx.camera.testing.fakes.FakeCamera
+import androidx.camera.testing.fakes.FakeSurfaceEffectInternal
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
 import org.junit.Before
@@ -55,15 +54,9 @@
         private val CROP_RECT = Rect(0, 0, 600, 400)
     }
 
-    private lateinit var surfaceEffect: SurfaceEffectInternal
-    private var isReleased = false
-    private var surfaceOutputCloseRequested = false
-    private var surfaceOutputReceived: SurfaceOutput? = null
-    private var surfaceReceivedByEffect: Surface? = null
+    private lateinit var surfaceEffectInternal: FakeSurfaceEffectInternal
     private lateinit var appSurface: Surface
     private lateinit var appSurfaceTexture: SurfaceTexture
-    private lateinit var effectSurface: Surface
-    private lateinit var effectSurfaceTexture: SurfaceTexture
     private lateinit var node: SurfaceEffectNode
     private lateinit var inputEdge: SurfaceEdge
 
@@ -71,30 +64,8 @@
     fun setup() {
         appSurfaceTexture = SurfaceTexture(0)
         appSurface = Surface(appSurfaceTexture)
-        effectSurfaceTexture = SurfaceTexture(0)
-        effectSurface = Surface(effectSurfaceTexture)
-
-        surfaceEffect = object : SurfaceEffectInternal {
-            override fun onInputSurface(request: SurfaceRequest) {
-                request.provideSurface(effectSurface, mainThreadExecutor()) {
-                    effectSurfaceTexture.release()
-                    effectSurface.release()
-                }
-            }
-
-            override fun onOutputSurface(surfaceOutput: SurfaceOutput) {
-                surfaceOutputReceived = surfaceOutput
-                surfaceReceivedByEffect = surfaceOutput.getSurface(mainThreadExecutor()) {
-                    surfaceOutput.close()
-                    surfaceOutputCloseRequested = true
-                }
-            }
-
-            override fun release() {
-                isReleased = true
-            }
-        }
-        node = SurfaceEffectNode(FakeCamera(), surfaceEffect)
+        surfaceEffectInternal = FakeSurfaceEffectInternal(mainThreadExecutor())
+        node = SurfaceEffectNode(FakeCamera(), surfaceEffectInternal)
         inputEdge = createInputEdge()
     }
 
@@ -102,8 +73,7 @@
     fun tearDown() {
         appSurfaceTexture.release()
         appSurface.release()
-        effectSurfaceTexture.release()
-        effectSurface.release()
+        surfaceEffectInternal.release()
         node.release()
         inputEdge.surfaces[0].close()
         shadowOf(getMainLooper()).idle()
@@ -140,8 +110,8 @@
         shadowOf(getMainLooper()).idle()
 
         // Assert: effect receives app Surface. CameraX receives effect Surface.
-        assertThat(surfaceReceivedByEffect).isEqualTo(appSurface)
-        assertThat(inputSurface.surface.get()).isEqualTo(effectSurface)
+        assertThat(surfaceEffectInternal.outputSurface).isEqualTo(appSurface)
+        assertThat(inputSurface.surface.get()).isEqualTo(surfaceEffectInternal.inputSurface)
     }
 
     @Test
@@ -156,8 +126,8 @@
         shadowOf(getMainLooper()).idle()
 
         // Assert: effect is released and has requested effect to close the SurfaceOutput
-        assertThat(isReleased).isTrue()
-        assertThat(surfaceOutputCloseRequested).isTrue()
+        assertThat(surfaceEffectInternal.isReleased).isTrue()
+        assertThat(surfaceEffectInternal.isOutputSurfaceRequestedToClose).isTrue()
     }
 
     private fun createInputEdge(): SurfaceEdge {
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectWithExecutorTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectWithExecutorTest.kt
index 86b492e..6a33afe 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectWithExecutorTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEffectWithExecutorTest.kt
@@ -27,6 +27,7 @@
 import androidx.camera.core.impl.utils.executor.CameraXExecutors
 import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
 import androidx.camera.testing.fakes.FakeCamera
+import androidx.camera.testing.fakes.FakeSurfaceEffectInternal
 import com.google.common.truth.Truth.assertThat
 import java.lang.Thread.currentThread
 import java.util.concurrent.Executor
@@ -69,13 +70,10 @@
 
     @Test(expected = IllegalStateException::class)
     fun initWithSurfaceEffectInternal_throwsException() {
-        SurfaceEffectWithExecutor(object : SurfaceEffectInternal {
-            override fun onInputSurface(request: SurfaceRequest) {}
-
-            override fun onOutputSurface(surfaceOutput: SurfaceOutput) {}
-
-            override fun release() {}
-        }, mainThreadExecutor())
+        SurfaceEffectWithExecutor(
+            FakeSurfaceEffectInternal(mainThreadExecutor()),
+            mainThreadExecutor()
+        )
     }
 
     @Test
diff --git a/camera/camera-extensions-stub/lint-baseline.xml b/camera/camera-extensions-stub/lint-baseline.xml
deleted file mode 100644
index 879b407..0000000
--- a/camera/camera-extensions-stub/lint-baseline.xml
+++ /dev/null
@@ -1,1219 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureProcessorImpl getCaptureProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;CaptureStageImpl> getCaptureStages() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl getCaptureStage() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorType getProcessorType() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorImpl getProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureProcessorImpl getCaptureProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;CaptureStageImpl> getCaptureStages() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl getCaptureStage() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorType getProcessorType() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorImpl getProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureProcessorImpl getCaptureProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;CaptureStageImpl> getCaptureStages() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl getCaptureStage() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorType getProcessorType() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorImpl getProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    List&lt;Pair&lt;CaptureRequest.Key, Object>> getParameters();"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/CaptureStageImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onInit(String cameraId, CameraCharacteristics cameraCharacteristics, Context context);"
-        errorLine2="                ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onInit(String cameraId, CameraCharacteristics cameraCharacteristics, Context context);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onInit(String cameraId, CameraCharacteristics cameraCharacteristics, Context context);"
-        errorLine2="                                                                              ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl onPresetSession();"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl onEnableSession();"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl onDisableSession();"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String checkApiVersion(String version) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtensionVersionImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String checkApiVersion(String version) {"
-        errorLine2="                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtensionVersionImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureProcessorImpl getCaptureProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;CaptureStageImpl> getCaptureStages() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl getCaptureStage() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorType getProcessorType() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorImpl getProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureProcessorImpl getCaptureProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;CaptureStageImpl> getCaptureStages() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl getCaptureStage() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorType getProcessorType() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorImpl getProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    boolean isExtensionAvailable(String cameraId, CameraCharacteristics cameraCharacteristics);"
-        errorLine2="                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    boolean isExtensionAvailable(String cameraId, CameraCharacteristics cameraCharacteristics);"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void init(String cameraId, CameraCharacteristics cameraCharacteristics);"
-        errorLine2="              ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void init(String cameraId, CameraCharacteristics cameraCharacteristics);"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl getCaptureStage();"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    ProcessorType getProcessorType();"
-        errorLine2="    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    ProcessorImpl getProcessor();"
-        errorLine2="    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onOutputSurface(Surface surface, int imageFormat);"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ProcessorImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onResolutionUpdate(Size size);"
-        errorLine2="                            ~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ProcessorImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl process(TotalCaptureResult result);"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/RequestUpdateProcessorImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl process(TotalCaptureResult result);"
-        errorLine2="                             ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/RequestUpdateProcessorImpl.java"/>
-    </issue>
-
-</issues>
diff --git a/camera/camera-extensions/lint-baseline.xml b/camera/camera-extensions/lint-baseline.xml
index eb45276..f6443035 100644
--- a/camera/camera-extensions/lint-baseline.xml
+++ b/camera/camera-extensions/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnsafeOptInUsageError"
diff --git a/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt b/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
index bf87a7f..35e8e77 100644
--- a/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
+++ b/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
@@ -26,10 +26,7 @@
 import androidx.camera.core.CameraXConfig
 import androidx.camera.core.EffectBundle
 import androidx.camera.core.Preview
-import androidx.camera.core.SurfaceEffect
 import androidx.camera.core.SurfaceEffect.PREVIEW
-import androidx.camera.core.SurfaceOutput
-import androidx.camera.core.SurfaceRequest
 import androidx.camera.core.UseCaseGroup
 import androidx.camera.core.impl.CameraFactory
 import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
@@ -40,6 +37,7 @@
 import androidx.camera.testing.fakes.FakeCameraFactory
 import androidx.camera.testing.fakes.FakeCameraInfoInternal
 import androidx.camera.testing.fakes.FakeLifecycleOwner
+import androidx.camera.testing.fakes.FakeSurfaceEffect
 import androidx.camera.testing.fakes.FakeUseCaseConfigFactory
 import androidx.concurrent.futures.await
 import androidx.test.core.app.ApplicationProvider
@@ -81,12 +79,7 @@
     fun bindUseCaseGroupWithEffect_effectIsSetOnUseCase() {
         // Arrange.
         ProcessCameraProvider.configureInstance(FakeAppConfig.create())
-        val surfaceEffect = object : SurfaceEffect {
-            override fun onInputSurface(request: SurfaceRequest) {}
-            override fun onOutputSurface(surfaceOutput: SurfaceOutput) {
-                surfaceOutput.close()
-            }
-        }
+        val surfaceEffect = FakeSurfaceEffect(mainThreadExecutor())
         val effectBundle =
             EffectBundle.Builder(mainThreadExecutor()).addEffect(PREVIEW, surfaceEffect).build()
         val preview = Preview.Builder().setSessionOptionUnpacker { _, _ -> }.build()
diff --git a/camera/camera-testing/lint-baseline.xml b/camera/camera-testing/lint-baseline.xml
index d2d3da4..4a8679f 100644
--- a/camera/camera-testing/lint-baseline.xml
+++ b/camera/camera-testing/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnsafeOptInUsageError"
@@ -19,193 +19,4 @@
             file="src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setAfMode(CameraCaptureMetaData.AfMode mode) {"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraCaptureResult.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setAfState(CameraCaptureMetaData.AfState state) {"
-        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraCaptureResult.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setAeState(CameraCaptureMetaData.AeState state) {"
-        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraCaptureResult.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setAwbState(CameraCaptureMetaData.AwbState state) {"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraCaptureResult.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setFlashState(CameraCaptureMetaData.FlashState state) {"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraCaptureResult.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setTag(TagBundle tag) {"
-        errorLine2="                       ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraCaptureResult.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setSuggestedResolution(String cameraId, Class&lt;? extends UseCaseConfig&lt;?>> type,"
-        errorLine2="                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setSuggestedResolution(String cameraId, Class&lt;? extends UseCaseConfig&lt;?>> type,"
-        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Size size) {"
-        errorLine2="            ~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public boolean checkSupported(String cameraId, List&lt;SurfaceConfig> surfaceConfigList) {"
-        errorLine2="                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public boolean checkSupported(String cameraId, List&lt;SurfaceConfig> surfaceConfigList) {"
-        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SurfaceConfig transformSurfaceConfig(String cameraId, int imageFormat, Size size) {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SurfaceConfig transformSurfaceConfig(String cameraId, int imageFormat, Size size) {"
-        errorLine2="                                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SurfaceConfig transformSurfaceConfig(String cameraId, int imageFormat, Size size) {"
-        errorLine2="                                                                                  ~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCameraDeviceSurfaceManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public FakeCaptureStage(int id, CaptureConfig captureConfig) {"
-        errorLine2="                                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCaptureStage.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureConfig getCaptureConfig() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeCaptureStage.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setPlanes(PlaneProxy[] planeProxy) {"
-        errorLine2="                          ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeImageProxy.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setSurface(Surface surface) {"
-        errorLine2="                           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/fakes/FakeImageReaderProxy.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static void waitForLooperToIdle(Handler handler) throws InterruptedException {"
-        errorLine2="                                           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/HandlerUtil.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static MessageQueue getQueue(Looper looper) {"
-        errorLine2="                  ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/compat/LooperCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static MessageQueue getQueue(Looper looper) {"
-        errorLine2="                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/testing/compat/LooperCompat.java"/>
-    </issue>
-
 </issues>
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCamera.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCamera.java
index 45bec37..c2a9eef 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCamera.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCamera.java
@@ -238,6 +238,7 @@
 
         Logger.d(TAG, "Use cases " + useCases + " ATTACHED for camera " + mCameraId);
         for (UseCase useCase : useCases) {
+            useCase.onStateAttached();
             mUseCaseAttachState.setUseCaseAttached(
                     useCase.getName() + useCase.hashCode(),
                     useCase.getSessionConfig(),
@@ -264,6 +265,7 @@
         Logger.d(TAG, "Use cases " + useCases + " DETACHED for camera " + mCameraId);
         for (UseCase useCase : useCases) {
             mUseCaseAttachState.setUseCaseDetached(useCase.getName() + useCase.hashCode());
+            useCase.onStateDetached();
         }
 
         if (mUseCaseAttachState.getAttachedSessionConfigs().isEmpty()) {
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffect.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffect.java
new file mode 100644
index 0000000..7465175
--- /dev/null
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffect.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2022 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.camera.testing.fakes;
+
+import android.graphics.SurfaceTexture;
+import android.os.Build;
+import android.view.Surface;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.SurfaceEffect;
+import androidx.camera.core.SurfaceOutput;
+import androidx.camera.core.SurfaceRequest;
+import androidx.camera.core.impl.DeferrableSurface;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Fake {@link SurfaceEffect} used in tests.
+ */
+@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+public class FakeSurfaceEffect implements SurfaceEffect {
+
+    final SurfaceTexture mSurfaceTexture;
+    final Surface mInputSurface;
+    private final Executor mExecutor;
+    private final boolean mAutoCloseSurfaceOutput;
+
+
+    @Nullable
+    private SurfaceRequest mSurfaceRequest;
+    @Nullable
+    private SurfaceOutput mSurfaceOutput;
+    boolean mIsInputSurfaceReleased;
+    boolean mIsOutputSurfaceRequestedToClose;
+
+    Surface mOutputSurface;
+
+    /**
+     * Creates a {@link SurfaceEffect} that closes the {@link SurfaceOutput} automatically.
+     */
+    public FakeSurfaceEffect(@NonNull Executor executor) {
+        this(executor, true);
+    }
+
+    /**
+     * @param autoCloseSurfaceOutput if true, automatically close the {@link SurfaceOutput} once
+     *                               the close request is received. Otherwise, the test needs to
+     *                               get {@link #getSurfaceOutput()} and call
+     *                               {@link SurfaceOutput#close()} to avoid the "Completer GCed"
+     *                               error in {@link DeferrableSurface}.
+     */
+    FakeSurfaceEffect(@NonNull Executor executor, boolean autoCloseSurfaceOutput) {
+        mSurfaceTexture = new SurfaceTexture(0);
+        mInputSurface = new Surface(mSurfaceTexture);
+        mExecutor = executor;
+        mIsInputSurfaceReleased = false;
+        mIsOutputSurfaceRequestedToClose = false;
+        mAutoCloseSurfaceOutput = autoCloseSurfaceOutput;
+    }
+
+    @Override
+    public void onInputSurface(@NonNull SurfaceRequest request) {
+        mSurfaceRequest = request;
+        request.provideSurface(mInputSurface, mExecutor, result -> {
+            mSurfaceTexture.release();
+            mInputSurface.release();
+            mIsInputSurfaceReleased = true;
+        });
+    }
+
+    @Override
+    public void onOutputSurface(@NonNull SurfaceOutput surfaceOutput) {
+        mSurfaceOutput = surfaceOutput;
+        mOutputSurface = surfaceOutput.getSurface(mExecutor,
+                () -> {
+                    if (mAutoCloseSurfaceOutput) {
+                        surfaceOutput.close();
+                    }
+                    mIsOutputSurfaceRequestedToClose = true;
+                }
+        );
+    }
+
+    @Nullable
+    public SurfaceRequest getSurfaceRequest() {
+        return mSurfaceRequest;
+    }
+
+    @Nullable
+    public SurfaceOutput getSurfaceOutput() {
+        return mSurfaceOutput;
+    }
+
+    @NonNull
+    public Surface getInputSurface() {
+        return mInputSurface;
+    }
+
+    @NonNull
+    public Surface getOutputSurface() {
+        return mOutputSurface;
+    }
+
+    public boolean isInputSurfaceReleased() {
+        return mIsInputSurfaceReleased;
+    }
+
+    public boolean isOutputSurfaceRequestedToClose() {
+        return mIsOutputSurfaceRequestedToClose;
+    }
+
+    /**
+     * Clear up the instance to avoid the "{@link DeferrableSurface} garbage collected" error.
+     */
+    public void cleanUp() {
+        if (mSurfaceOutput != null) {
+            mSurfaceOutput.close();
+        }
+    }
+}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffectInternal.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffectInternal.java
new file mode 100644
index 0000000..933db05
--- /dev/null
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeSurfaceEffectInternal.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2022 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.camera.testing.fakes;
+
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.processing.SurfaceEffectInternal;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Fake {@link SurfaceEffectInternal} used in tests.
+ */
+@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+public class FakeSurfaceEffectInternal extends FakeSurfaceEffect implements SurfaceEffectInternal {
+
+    private boolean mIsReleased;
+
+    /**
+     * {@inheritDoc}
+     */
+    public FakeSurfaceEffectInternal(@NonNull Executor executor) {
+        this(executor, true);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public FakeSurfaceEffectInternal(@NonNull Executor executor, boolean autoCloseSurfaceOutput) {
+        super(executor, autoCloseSurfaceOutput);
+        mIsReleased = false;
+    }
+
+    public boolean isReleased() {
+        return mIsReleased;
+    }
+
+    @Override
+    public void release() {
+        mIsReleased = true;
+    }
+}
diff --git a/camera/camera-testlib-extensions/lint-baseline.xml b/camera/camera-testlib-extensions/lint-baseline.xml
deleted file mode 100644
index 5bd16c6..0000000
--- a/camera/camera-testlib-extensions/lint-baseline.xml
+++ /dev/null
@@ -1,724 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl getCaptureStage() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorType getProcessorType() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorImpl getProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl getCaptureStage() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorType getProcessorType() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorImpl getProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl getCaptureStage() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorType getProcessorType() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorImpl getProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    List&lt;Pair&lt;CaptureRequest.Key, Object>> getParameters();"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/CaptureStageImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onInit(String cameraId, CameraCharacteristics cameraCharacteristics, Context context);"
-        errorLine2="                ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onInit(String cameraId, CameraCharacteristics cameraCharacteristics, Context context);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onInit(String cameraId, CameraCharacteristics cameraCharacteristics, Context context);"
-        errorLine2="                                                                              ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl onPresetSession();"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl onEnableSession();"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl onDisableSession();"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String checkApiVersion(String version) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtensionVersionImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String checkApiVersion(String version) {"
-        errorLine2="                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ExtensionVersionImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl getCaptureStage() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorType getProcessorType() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorImpl getProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl getCaptureStage() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorType getProcessorType() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ProcessorImpl getProcessor() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Pair&lt;Integer, Size[]&gt;> getSupportedResolutions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Context context) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onPresetSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onEnableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CaptureStageImpl onDisableSession() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    boolean isExtensionAvailable(String cameraId, CameraCharacteristics cameraCharacteristics);"
-        errorLine2="                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    boolean isExtensionAvailable(String cameraId, CameraCharacteristics cameraCharacteristics);"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void init(String cameraId, CameraCharacteristics cameraCharacteristics);"
-        errorLine2="              ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void init(String cameraId, CameraCharacteristics cameraCharacteristics);"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl getCaptureStage();"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    ProcessorType getProcessorType();"
-        errorLine2="    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    ProcessorImpl getProcessor();"
-        errorLine2="    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onOutputSurface(Surface surface, int imageFormat);"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ProcessorImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onResolutionUpdate(Size size);"
-        errorLine2="                            ~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/ProcessorImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl process(TotalCaptureResult result);"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/RequestUpdateProcessorImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    CaptureStageImpl process(TotalCaptureResult result);"
-        errorLine2="                             ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/impl/RequestUpdateProcessorImpl.java"/>
-    </issue>
-
-</issues>
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
index 333f919..470370c 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
@@ -85,6 +85,7 @@
 import org.junit.Assume.assumeFalse
 import org.junit.Assume.assumeTrue
 import org.junit.Before
+import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.rules.TestName
@@ -394,6 +395,7 @@
     }
 
     @Test
+    @Ignore("b/239752223")
     fun canPauseResume() {
         clearInvocations(videoRecordEventListener)
         invokeSurfaceRequest()
@@ -562,6 +564,7 @@
     }
 
     @Test
+    @Ignore("b/239752223")
     fun setFileSizeLimit() {
         val fileSizeLimit = 500L * 1024L // 500 KB
         runFileSizeLimitTest(fileSizeLimit)
@@ -571,6 +574,7 @@
     // the encoder. This will ensure that the recording will be finalized even if it has no data
     // written to it.
     @Test
+    @Ignore("b/239752223")
     fun setFileSizeLimitLowerThanInitialDataSize() {
         val fileSizeLimit = 1L // 1 byte
         runFileSizeLimitTest(fileSizeLimit)
@@ -1012,6 +1016,7 @@
     }
 
     @Test
+    @Ignore("b/239752223")
     fun canRecordWithoutAudio() {
         clearInvocations(videoRecordEventListener)
         invokeSurfaceRequest()
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt b/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
index c478811..2e5c7b8 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
@@ -25,10 +25,7 @@
 import androidx.camera.core.CameraSelector.LENS_FACING_FRONT
 import androidx.camera.core.EffectBundle
 import androidx.camera.core.ImageCapture
-import androidx.camera.core.SurfaceEffect
 import androidx.camera.core.SurfaceEffect.PREVIEW
-import androidx.camera.core.SurfaceOutput
-import androidx.camera.core.SurfaceRequest
 import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
 import androidx.camera.lifecycle.ProcessCameraProvider
 import androidx.camera.testing.CameraUtil
@@ -36,6 +33,7 @@
 import androidx.camera.testing.CoreAppTestUtil
 import androidx.camera.testing.fakes.FakeActivity
 import androidx.camera.testing.fakes.FakeLifecycleOwner
+import androidx.camera.testing.fakes.FakeSurfaceEffect
 import androidx.test.annotation.UiThreadTest
 import androidx.test.core.app.ActivityScenario
 import androidx.test.core.app.ApplicationProvider
@@ -105,15 +103,10 @@
 
         // Act: set an EffectBundle
         instrumentation.runOnMainSync {
-            val surfaceEffect = object : SurfaceEffect {
-                override fun onInputSurface(request: SurfaceRequest) {}
-
-                override fun onOutputSurface(surfaceOutput: SurfaceOutput) {
-                    surfaceOutput.close()
-                }
-            }
             controller.setEffectBundle(
-                EffectBundle.Builder(mainThreadExecutor()).addEffect(PREVIEW, surfaceEffect).build()
+                EffectBundle.Builder(mainThreadExecutor())
+                    .addEffect(PREVIEW, FakeSurfaceEffect(mainThreadExecutor()))
+                    .build()
             )
         }
 
diff --git a/camera/camera-viewfinder/lint-baseline.xml b/camera/camera-viewfinder/lint-baseline.xml
deleted file mode 100644
index acab748..0000000
--- a/camera/camera-viewfinder/lint-baseline.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void onFailure(Throwable t);"
-        errorLine2="                   ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/viewfinder/internal/utils/futures/FutureCallback.java"/>
-    </issue>
-
-</issues>
diff --git a/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/internal/utils/futures/FutureCallback.java b/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/internal/utils/futures/FutureCallback.java
index 58474e3..acedaa2 100644
--- a/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/internal/utils/futures/FutureCallback.java
+++ b/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/internal/utils/futures/FutureCallback.java
@@ -16,6 +16,7 @@
 
 package androidx.camera.viewfinder.internal.utils.futures;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -48,5 +49,5 @@
      * <p>If the future's {@link Future#get() get} method throws an {@link ExecutionException}, then
      * the cause is passed to this method. Any other thrown object is passed unaltered.
      */
-    void onFailure(Throwable t);
+    void onFailure(@NonNull Throwable t);
 }
diff --git a/camera/integration-tests/coretestapp/lint-baseline.xml b/camera/integration-tests/coretestapp/lint-baseline.xml
index 8ea1973..bc6c935 100644
--- a/camera/integration-tests/coretestapp/lint-baseline.xml
+++ b/camera/integration-tests/coretestapp/lint-baseline.xml
@@ -1,15 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
-        id="UnsafeOptInUsageError"
-        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.core.ExperimentalZeroShutterLag&apos; or &apos;@OptIn(markerClass = androidx.camera.core.ExperimentalZeroShutterLag.class)&apos;"
-        errorLine1="                &amp;&amp; getCameraInfo().isZslSupported() ? View.VISIBLE : View.GONE);"
-        errorLine2="                                   ~~~~~~~~~~~~~~">
+        id="NotificationPermission"
+        message="When targeting Android 13 or higher, posting a permission requires holding the `POST_NOTIFICATIONS` permission (usage from leakcanary.NotificationEventListener)">
         <location
-            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"
-            line="777"
-            column="36"/>
+            file="$GRADLE_USER_HOME/caches/transforms-3/4366a02f2b10003dc48387e903833c2d/transformed/leakcanary-android-core-2.8.1/jars/classes.jar"/>
     </issue>
 
     <issue
@@ -18,102 +14,19 @@
         errorLine1="            return ImageCapture.CAPTURE_MODE_ZERO_SHUTTER_LAG;"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"
-            line="355"
-            column="33"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mImageAnalysisResult` of class `CameraXActivity` requires synthetic accessor"
-        errorLine1="            mImageAnalysisResult.setValue("
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
-        <location
             file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
     </issue>
 
     <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAnalysisIdlingResource` of class `CameraXActivity` requires synthetic accessor"
-        errorLine1="                if (!mAnalysisIdlingResource.isIdleNow()) {"
-        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~">
+        id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@androidx.camera.core.ExperimentalZeroShutterLag&apos; or &apos;@OptIn(markerClass = androidx.camera.core.ExperimentalZeroShutterLag.class)&apos;"
+        errorLine1="                &amp;&amp; getCameraInfo().isZslSupported() ? View.VISIBLE : View.GONE);"
+        errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
     </issue>
 
     <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAnalysisIdlingResource` of class `CameraXActivity` requires synthetic accessor"
-        errorLine1="                    mAnalysisIdlingResource.decrement();"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mImageSavedIdlingResource` of class `CameraXActivity` requires synthetic accessor"
-        errorLine1="                        mImageSavedIdlingResource.increment();"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `createDefaultPictureFolderIfNotExist` of class `CameraXActivity` requires synthetic accessor"
-        errorLine1="                        createDefaultPictureFolderIfNotExist();"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mImageCaptureExecutorService` of class `CameraXActivity` requires synthetic accessor"
-        errorLine1="                                mImageCaptureExecutorService,"
-        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mImageSavedIdlingResource` of class `CameraXActivity` requires synthetic accessor"
-        errorLine1="                                            mImageSavedIdlingResource.decrement();"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mImageSavedIdlingResource` of class `CameraXActivity` requires synthetic accessor"
-        errorLine1="                                            mImageSavedIdlingResource.decrement();"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCameraProvider` of class `OpenGLActivity` requires synthetic accessor"
-        errorLine1="                            if (mCameraProvider != null) {"
-        errorLine2="                                ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/integration/core/OpenGLActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `startCamera` of class `OpenGLActivity` requires synthetic accessor"
-        errorLine1="                                startCamera();"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/integration/core/OpenGLActivity.java"/>
-    </issue>
-
-    <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/OpenCloseCaptureSessionStressTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/OpenCloseCaptureSessionStressTest.kt
index 23eed22..a6dfbca 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/OpenCloseCaptureSessionStressTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/OpenCloseCaptureSessionStressTest.kt
@@ -273,11 +273,11 @@
         }
 
         fun awaitSessionEnabledAndAssert() {
-            assertThat(sessionEnabledLatch.await(3000, TimeUnit.MILLISECONDS)).isTrue()
+            assertThat(sessionEnabledLatch.await(15000, TimeUnit.MILLISECONDS)).isTrue()
         }
 
         fun awaitSessionDisabledAndAssert() {
-            assertThat(sessionDisabledLatch.await(3000, TimeUnit.MILLISECONDS)).isTrue()
+            assertThat(sessionDisabledLatch.await(15000, TimeUnit.MILLISECONDS)).isTrue()
         }
     }
 }
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsActivityTest.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsActivityTest.kt
new file mode 100644
index 0000000..ad26829
--- /dev/null
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsActivityTest.kt
@@ -0,0 +1,227 @@
+/*
+ * Copyright 2022 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.camera.integration.extensions.camera2extensions
+
+import android.Manifest
+import android.content.Context
+import android.content.Intent
+import androidx.camera.camera2.Camera2Config
+import androidx.camera.integration.extensions.Camera2ExtensionsActivity
+import androidx.camera.integration.extensions.INTENT_EXTRA_CAMERA_ID
+import androidx.camera.integration.extensions.INTENT_EXTRA_EXTENSION_MODE
+import androidx.camera.integration.extensions.util.Camera2ExtensionsTestUtil
+import androidx.camera.integration.extensions.util.Camera2ExtensionsTestUtil.isCamera2ExtensionModeSupported
+import androidx.camera.integration.extensions.util.EXTENSIONS_TEST_APP_PACKAGE
+import androidx.camera.integration.extensions.util.waitForCaptureSessionConfiguredIdle
+import androidx.camera.integration.extensions.util.waitForImageSavedIdle
+import androidx.camera.integration.extensions.util.waitForPreviewIdle
+import androidx.camera.testing.CameraUtil
+import androidx.camera.testing.CoreAppTestUtil
+import androidx.camera.testing.LabTestRule
+import androidx.camera.testing.StressTestRule
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.rule.GrantPermissionRule
+import androidx.test.uiautomator.UiDevice
+import org.junit.After
+import org.junit.Assume
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.ClassRule
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+/**
+ * Auto validation tests for Camera2 Extensions with [Camera2ExtensionsActivity]
+ */
+@LargeTest
+@RunWith(Parameterized::class)
+@SdkSuppress(minSdkVersion = 31)
+class Camera2ExtensionsActivityTest(
+    private val cameraId: String,
+    private val extensionMode: Int
+) {
+    private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
+
+    @get:Rule
+    val useCamera = CameraUtil.grantCameraPermissionAndPreTest(
+        CameraUtil.PreTestCameraIdList(Camera2Config.defaultConfig())
+    )
+
+    @get:Rule
+    val permissionRule: GrantPermissionRule =
+        GrantPermissionRule.grant(
+            Manifest.permission.WRITE_EXTERNAL_STORAGE
+        )
+
+    @get:Rule
+    val labTest: LabTestRule = LabTestRule()
+
+    @Before
+    fun setup() {
+        Assume.assumeTrue(CameraUtil.deviceHasCamera())
+        CoreAppTestUtil.assumeCompatibleDevice()
+        // Clears the device UI and check if there is no dialog or lock screen on the top of the
+        // window before start the test.
+        CoreAppTestUtil.prepareDeviceUI(InstrumentationRegistry.getInstrumentation())
+        // Uses the natural orientation throughout these tests to ensure the activity isn't
+        // recreated unexpectedly. This will also freeze the sensors until
+        // mDevice.unfreezeRotation() in the tearDown() method. Any simulated rotations will be
+        // explicitly initiated from within the test.
+        device.setOrientationNatural()
+    }
+
+    @After
+    fun tearDown() {
+        // Unfreezes rotation so the device can choose the orientation via its own policy. Be nice
+        // to other tests :)
+        device.unfreezeRotation()
+        device.pressHome()
+    }
+
+    companion object {
+        @ClassRule
+        @JvmField val stressTest = StressTestRule()
+
+        @Parameterized.Parameters(name = "cameraId = {0}, extensionMode = {1}")
+        @JvmStatic
+        fun parameters() = Camera2ExtensionsTestUtil.getAllCameraIdExtensionModeCombinations()
+    }
+
+    @LabTestRule.LabTestOnly
+    @Test
+    fun checkPreviewUpdated() {
+        val activityScenario = launchCamera2ExtensionsActivityAndWaitForCaptureSessionConfigured(
+            cameraId,
+            extensionMode
+        )
+        with(activityScenario) { // Launches activity
+            use { // Ensures that ActivityScenario is cleaned up properly
+                // Waits for preview to receive enough frames for its IdlingResource to idle.
+                waitForPreviewIdle()
+            }
+        }
+    }
+
+    @LabTestRule.LabTestOnly
+    @Test
+    fun canCaptureSingleImage() {
+        val activityScenario = launchCamera2ExtensionsActivityAndWaitForCaptureSessionConfigured(
+            cameraId,
+            extensionMode
+        )
+        with(activityScenario) { // Launches activity
+            use { // Ensures that ActivityScenario is cleaned up properly
+                // Triggers the capture function and waits for the image being saved
+                waitForImageSavedIdle()
+            }
+        }
+    }
+
+    @LabTestRule.LabTestOnly
+    @Test
+    fun checkPreviewUpdated_afterPauseResume() {
+        val activityScenario = launchCamera2ExtensionsActivityAndWaitForCaptureSessionConfigured(
+            cameraId,
+            extensionMode
+        )
+        with(activityScenario) { // Launches activity
+            use { // Ensures that ActivityScenario is cleaned up properly
+                // Waits for preview to receive enough frames for its IdlingResource to idle.
+                waitForPreviewIdle()
+
+                // Pauses and resumes the activity
+                moveToState(Lifecycle.State.CREATED)
+                moveToState(Lifecycle.State.RESUMED)
+
+                // Waits for preview to receive enough frames again
+                waitForPreviewIdle()
+            }
+        }
+    }
+
+    @LabTestRule.LabTestOnly
+    @Test
+    fun canCaptureImage_afterPauseResume() {
+        val activityScenario = launchCamera2ExtensionsActivityAndWaitForCaptureSessionConfigured(
+            cameraId,
+            extensionMode
+        )
+        with(activityScenario) { // Launches activity
+            use { // Ensures that ActivityScenario is cleaned up properly
+                // Triggers the capture function and waits for the image being saved
+                waitForImageSavedIdle()
+
+                // Pauses and resumes the activity
+                moveToState(Lifecycle.State.CREATED)
+                moveToState(Lifecycle.State.RESUMED)
+
+                // Waits for the capture session configured again after resuming the activity
+                waitForCaptureSessionConfiguredIdle()
+
+                // Triggers the capture function and waits for the image being saved again
+                waitForImageSavedIdle()
+            }
+        }
+    }
+
+    @LabTestRule.LabTestOnly
+    @Test
+    fun canCaptureMultipleImages() {
+        val activityScenario = launchCamera2ExtensionsActivityAndWaitForCaptureSessionConfigured(
+            cameraId,
+            extensionMode
+        )
+        with(activityScenario) { // Launches activity
+            use { // Ensures that ActivityScenario is cleaned up properly
+                repeat(5) {
+                    // Triggers the capture function and waits for the image being saved
+                    waitForImageSavedIdle()
+                }
+            }
+        }
+    }
+
+    private fun launchCamera2ExtensionsActivityAndWaitForCaptureSessionConfigured(
+        cameraId: String,
+        extensionMode: Int
+    ): ActivityScenario<Camera2ExtensionsActivity> {
+        val context = ApplicationProvider.getApplicationContext<Context>()
+        assumeTrue(isCamera2ExtensionModeSupported(context, cameraId, extensionMode))
+        val intent = context.packageManager
+            .getLaunchIntentForPackage(EXTENSIONS_TEST_APP_PACKAGE)!!.apply {
+                putExtra(INTENT_EXTRA_CAMERA_ID, cameraId)
+                putExtra(INTENT_EXTRA_EXTENSION_MODE, extensionMode)
+                setClassName(context, Camera2ExtensionsActivity::class.java.name)
+                flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
+            }
+
+        val activityScenario: ActivityScenario<Camera2ExtensionsActivity> =
+            ActivityScenario.launch(intent)
+
+        // Waits for the capture session being configured
+        activityScenario.waitForCaptureSessionConfiguredIdle()
+
+        return activityScenario
+    }
+}
\ No newline at end of file
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/Camera2ExtensionsActivityTestExtensions.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/Camera2ExtensionsActivityTestExtensions.kt
new file mode 100644
index 0000000..f7a24cd
--- /dev/null
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/Camera2ExtensionsActivityTestExtensions.kt
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2022 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.camera.integration.extensions.util
+
+import androidx.annotation.RequiresApi
+import androidx.camera.integration.extensions.Camera2ExtensionsActivity
+import androidx.camera.integration.extensions.R
+import androidx.test.core.app.ActivityScenario
+import androidx.test.espresso.Espresso
+import androidx.test.espresso.IdlingRegistry
+import androidx.test.espresso.action.ViewActions
+import androidx.test.espresso.assertion.ViewAssertions
+import androidx.test.espresso.matcher.ViewMatchers
+import androidx.testutils.withActivity
+
+const val EXTENSIONS_TEST_APP_PACKAGE = "androidx.camera.integration.extensions"
+
+/**
+ * Waits until the capture session has been configured and its idling resource has become idle.
+ */
+@RequiresApi(31)
+internal fun ActivityScenario<Camera2ExtensionsActivity>.waitForCaptureSessionConfiguredIdle() {
+    val idlingResource = withActivity {
+        getCaptureSessionConfiguredIdlingResource()
+    }
+    try {
+        IdlingRegistry.getInstance().register(idlingResource)
+        // Waits for the CaptureSessionConfiguredIdlingResource becoming idle
+        Espresso.onIdle()
+    } finally { // Always releases the idling resource, in case of timeout exceptions.
+        IdlingRegistry.getInstance().unregister(idlingResource)
+    }
+}
+
+/**
+ * Waits until the preview has received frames and its idling resource has become idle.
+ */
+@RequiresApi(31)
+internal fun ActivityScenario<Camera2ExtensionsActivity>.waitForPreviewIdle() {
+    val idlingResource = withActivity {
+        resetPreviewIdlingResource()
+        getPreviewIdlingResource()
+    }
+    try {
+        IdlingRegistry.getInstance().register(idlingResource)
+        // Waits for the PreviewIdlingResource becoming idle
+        Espresso.onView(ViewMatchers.withId(R.id.viewFinder))
+            .check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
+    } finally { // Always releases the idling resource, in case of timeout exceptions.
+        IdlingRegistry.getInstance().unregister(idlingResource)
+    }
+}
+
+/**
+ * Waits until captured image has been saved and its idling resource has become idle.
+ */
+@RequiresApi(31)
+internal fun ActivityScenario<Camera2ExtensionsActivity>.waitForImageSavedIdle() {
+    val idlingResource = withActivity {
+        getImageSavedIdlingResource()
+    }
+    try {
+        IdlingRegistry.getInstance().register(idlingResource)
+        // Performs click action and waits for the ImageSavedIdlingResource becoming idle
+        Espresso.onView(ViewMatchers.withId(R.id.Picture)).perform(ViewActions.click())
+    } finally { // Always releases the idling resource, in case of timeout exceptions.
+        IdlingRegistry.getInstance().unregister(idlingResource)
+        withActivity { deleteSessionImages() }
+    }
+}
\ No newline at end of file
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/Camera2ExtensionsTestUtil.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/Camera2ExtensionsTestUtil.kt
new file mode 100644
index 0000000..d2195a8
--- /dev/null
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/Camera2ExtensionsTestUtil.kt
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2022 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.camera.integration.extensions.util
+
+import android.content.Context
+import android.hardware.camera2.CameraExtensionCharacteristics
+import android.hardware.camera2.CameraManager
+import androidx.annotation.RequiresApi
+import androidx.camera.testing.CameraUtil
+
+@RequiresApi(31)
+object Camera2ExtensionsTestUtil {
+
+    /**
+     * Gets a list of all camera id and extension mode combinations.
+     */
+    @JvmStatic
+    fun getAllCameraIdExtensionModeCombinations(): List<Array<Any>> =
+        arrayListOf<Array<Any>>().apply {
+            CameraUtil.getBackwardCompatibleCameraIdListOrThrow().forEach { cameraId ->
+                AVAILABLE_EXTENSION_MODES.forEach { mode ->
+                    add(arrayOf(cameraId, mode))
+                }
+            }
+        }
+
+    @JvmStatic
+    fun isCamera2ExtensionModeSupported(
+        context: Context,
+        cameraId: String,
+        extensionMode: Int
+    ): Boolean {
+        val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
+        val extensionCharacteristics = cameraManager.getCameraExtensionCharacteristics(cameraId)
+        return extensionCharacteristics.supportedExtensions.contains(extensionMode)
+    }
+
+    /**
+     * Camera2 extension modes
+     */
+    @Suppress("DEPRECATION") // EXTENSION_BEAUTY
+    @JvmStatic
+    val AVAILABLE_EXTENSION_MODES = arrayOf(
+        CameraExtensionCharacteristics.EXTENSION_AUTOMATIC,
+        CameraExtensionCharacteristics.EXTENSION_BEAUTY,
+        CameraExtensionCharacteristics.EXTENSION_BOKEH,
+        CameraExtensionCharacteristics.EXTENSION_HDR,
+        CameraExtensionCharacteristics.EXTENSION_NIGHT,
+    )
+}
\ No newline at end of file
diff --git a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/Camera2ExtensionsActivity.kt b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/Camera2ExtensionsActivity.kt
index d682e82..c284eb7 100644
--- a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/Camera2ExtensionsActivity.kt
+++ b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/Camera2ExtensionsActivity.kt
@@ -17,6 +17,7 @@
 package androidx.camera.integration.extensions
 
 import android.annotation.SuppressLint
+import android.content.ContentResolver
 import android.content.Context
 import android.content.Intent
 import android.graphics.SurfaceTexture
@@ -30,40 +31,46 @@
 import android.hardware.camera2.params.ExtensionSessionConfiguration
 import android.hardware.camera2.params.OutputConfiguration
 import android.media.ImageReader
+import android.net.Uri
 import android.os.Bundle
 import android.os.Handler
 import android.os.Looper
 import android.util.Log
+import android.util.Size
 import android.view.Menu
 import android.view.MenuItem
 import android.view.Surface
 import android.view.TextureView
+import android.view.View
 import android.view.ViewStub
 import android.widget.Button
+import android.widget.FrameLayout
 import android.widget.Toast
 import androidx.annotation.RequiresApi
+import androidx.annotation.VisibleForTesting
 import androidx.appcompat.app.AppCompatActivity
 import androidx.camera.core.impl.utils.futures.Futures
-import androidx.camera.integration.extensions.utils.Camera2ExtensionsUtil.calculateRelativeImageRotationDegrees
-import androidx.camera.integration.extensions.utils.Camera2ExtensionsUtil.createExtensionCaptureCallback
-import androidx.camera.integration.extensions.utils.Camera2ExtensionsUtil.getDisplayRotationDegrees
 import androidx.camera.integration.extensions.utils.Camera2ExtensionsUtil.getExtensionModeStringFromId
 import androidx.camera.integration.extensions.utils.Camera2ExtensionsUtil.getLensFacingCameraId
 import androidx.camera.integration.extensions.utils.Camera2ExtensionsUtil.pickPreviewResolution
 import androidx.camera.integration.extensions.utils.Camera2ExtensionsUtil.pickStillImageResolution
-import androidx.camera.integration.extensions.utils.Camera2ExtensionsUtil.transformPreview
 import androidx.camera.integration.extensions.utils.FileUtil
+import androidx.camera.integration.extensions.utils.TransformUtil.calculateRelativeImageRotationDegrees
+import androidx.camera.integration.extensions.utils.TransformUtil.surfaceRotationToRotationDegrees
+import androidx.camera.integration.extensions.utils.TransformUtil.transformTextureView
 import androidx.camera.integration.extensions.validation.CameraValidationResultActivity
 import androidx.concurrent.futures.CallbackToFutureAdapter
 import androidx.concurrent.futures.CallbackToFutureAdapter.Completer
 import androidx.core.util.Preconditions
 import androidx.lifecycle.lifecycleScope
+import androidx.test.espresso.idling.CountingIdlingResource
 import com.google.common.util.concurrent.ListenableFuture
 import java.text.Format
 import java.text.SimpleDateFormat
 import java.util.Calendar
 import java.util.Locale
 import java.util.concurrent.Executors
+import java.util.concurrent.atomic.AtomicLong
 import kotlin.coroutines.resume
 import kotlin.coroutines.resumeWithException
 import kotlinx.coroutines.Deferred
@@ -77,6 +84,15 @@
 
 private const val TAG = "Camera2ExtensionsAct~"
 private const val EXTENSION_MODE_INVALID = -1
+private const val FRAMES_UNTIL_VIEW_IS_READY = 10
+
+// Launch the activity with the specified camera id.
+@VisibleForTesting
+const val INTENT_EXTRA_CAMERA_ID = "camera_id"
+
+// Launch the activity with the specified extension mode.
+@VisibleForTesting
+const val INTENT_EXTRA_EXTENSION_MODE = "extension_mode"
 
 @RequiresApi(31)
 class Camera2ExtensionsActivity : AppCompatActivity() {
@@ -127,6 +143,8 @@
     private var currentExtensionIdx = -1
     private val supportedExtensionModes = mutableListOf<Int>()
 
+    private lateinit var containerView: View
+
     private lateinit var textureView: TextureView
 
     private lateinit var previewSurface: Surface
@@ -139,7 +157,7 @@
             height: Int
         ) {
             previewSurface = Surface(surfaceTexture)
-            openCameraWithExtensionMode(currentCameraId)
+            setupAndStartPreview(currentCameraId, currentExtensionMode)
         }
 
         override fun onSurfaceTextureSizeChanged(
@@ -154,10 +172,31 @@
         }
 
         override fun onSurfaceTextureUpdated(surfaceTexture: SurfaceTexture) {
+            if (captureProcessStartedIdlingResource.isIdleNow &&
+                receivedPreviewFrameCount.getAndIncrement() >= FRAMES_UNTIL_VIEW_IS_READY &&
+                !previewIdlingResource.isIdleNow
+            ) {
+                previewIdlingResource.decrement()
+            }
         }
     }
 
-    private val captureCallbacks = createExtensionCaptureCallback()
+    private val captureCallbacks = object : CameraExtensionSession.ExtensionCaptureCallback() {
+        override fun onCaptureProcessStarted(
+            session: CameraExtensionSession,
+            request: CaptureRequest
+        ) {
+            if (receivedCaptureProcessStartedCount.getAndIncrement() >=
+                FRAMES_UNTIL_VIEW_IS_READY && !captureProcessStartedIdlingResource.isIdleNow
+            ) {
+                captureProcessStartedIdlingResource.decrement()
+            }
+        }
+
+        override fun onCaptureFailed(session: CameraExtensionSession, request: CaptureRequest) {
+            Log.e(TAG, "onCaptureFailed!!")
+        }
+    }
 
     private var restartOnStart = false
 
@@ -167,6 +206,37 @@
 
     private var imageSaveTerminationFuture: ListenableFuture<Any?> = Futures.immediateFuture(null)
 
+    /**
+     * Used to wait for the capture session is configured.
+     */
+    private val captureSessionConfiguredIdlingResource =
+        CountingIdlingResource("captureSessionConfigured").apply { increment() }
+    /**
+     * Used to wait for the ExtensionCaptureCallback#onCaptureProcessStarted is called which means
+     * an image is captured and extension processing is triggered.
+     */
+    private val captureProcessStartedIdlingResource =
+        CountingIdlingResource("captureProcessStarted").apply { increment() }
+
+    /**
+     * Used to wait for the preview is ready. This will become idle after
+     * captureProcessStartedIdlingResource becomes idle and
+     * [SurfaceTextureListener#onSurfaceTextureUpdated()] is also called. It means that there has
+     * been images captured to trigger the extension processing and the preview's SurfaceTexture is
+     * also updated by [SurfaceTexture#updateTexImage()] calls.
+     */
+    private val previewIdlingResource = CountingIdlingResource("preview").apply { increment() }
+
+    /**
+     * Used to trigger a picture taking action and waits for the image being saved.
+     */
+    private val imageSavedIdlingResource = CountingIdlingResource("imageSaved")
+
+    private val receivedCaptureProcessStartedCount: AtomicLong = AtomicLong(0)
+    private val receivedPreviewFrameCount: AtomicLong = AtomicLong(0)
+
+    private lateinit var sessionImageUriSet: SessionMediaUriSet
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         Log.d(TAG, "onCreate()")
@@ -191,8 +261,15 @@
             return
         }
 
-        updateExtensionInfo()
+        sessionImageUriSet = SessionMediaUriSet(contentResolver)
 
+        // Gets params from extra bundle
+        intent.extras?.let { bundle ->
+            currentCameraId = bundle.getString(INTENT_EXTRA_CAMERA_ID, currentCameraId)
+            currentExtensionMode = bundle.getInt(INTENT_EXTRA_EXTENSION_MODE, currentExtensionMode)
+        }
+
+        updateExtensionInfo()
         setupTextureView()
         enableUiControl(false)
         setupUiControl()
@@ -240,7 +317,8 @@
     private fun setupTextureView() {
         val viewFinderStub = findViewById<ViewStub>(R.id.viewFinderStub)
         viewFinderStub.layoutResource = R.layout.full_textureview
-        textureView = viewFinderStub.inflate() as TextureView
+        containerView = viewFinderStub.inflate()
+        textureView = containerView.findViewById(R.id.textureView)
         textureView.surfaceTextureListener = surfaceTextureListener
     }
 
@@ -260,7 +338,7 @@
             restartPreview = true
             extensionModeToggleButton.text = getExtensionModeStringFromId(currentExtensionMode)
 
-            closeCaptureSession()
+            closeCaptureSessionAsync()
         }
 
         val cameraSwitchButton = findViewById<Button>(R.id.Switch)
@@ -280,12 +358,13 @@
             currentCameraId = newCameraId
             restartCamera = true
 
-            closeCamera()
+            closeCameraAsync()
         }
 
         val captureButton = findViewById<Button>(R.id.Picture)
         captureButton.setOnClickListener {
             enableUiControl(false)
+            resetImageSavedIdlingResource()
             takePicture()
         }
     }
@@ -296,7 +375,7 @@
         activityStopped = false
         if (restartOnStart) {
             restartOnStart = false
-            openCameraWithExtensionMode(currentCameraId)
+            setupAndStartPreview(currentCameraId, currentExtensionMode)
         }
     }
 
@@ -306,8 +385,8 @@
         // Needs to close the camera first. Otherwise, the next activity might be failed to open
         // the camera and configure the capture session.
         runBlocking {
-            closeCaptureSession().await()
-            closeCamera().await()
+            closeCaptureSessionAsync().await()
+            closeCameraAsync().await()
         }
         restartOnStart = true
         activityStopped = true
@@ -323,34 +402,101 @@
         Log.d(TAG, "onDestroy()--")
     }
 
-    private fun closeCamera(): Deferred<Unit> = lifecycleScope.async(cameraTaskDispatcher) {
+    private fun closeCameraAsync(): Deferred<Unit> = lifecycleScope.async(cameraTaskDispatcher) {
         Log.d(TAG, "closeCamera()++")
         cameraDevice?.close()
         cameraDevice = null
         Log.d(TAG, "closeCamera()--")
     }
 
-    private fun closeCaptureSession(): Deferred<Unit> = lifecycleScope.async(cameraTaskDispatcher) {
-        Log.d(TAG, "closeCaptureSession()++")
-        try {
-            cameraExtensionSession?.close()
-            cameraExtensionSession = null
-        } catch (e: Exception) {
-            Log.e(TAG, e.toString())
+    private fun closeCaptureSessionAsync(): Deferred<Unit> =
+        lifecycleScope.async(cameraTaskDispatcher) {
+            Log.d(TAG, "closeCaptureSession()++")
+            resetCaptureSessionConfiguredIdlingResource()
+            try {
+                cameraExtensionSession?.close()
+                cameraExtensionSession = null
+            } catch (e: Exception) {
+                Log.e(TAG, e.toString())
+            }
+            Log.d(TAG, "closeCaptureSession()--")
         }
-        Log.d(TAG, "closeCaptureSession()--")
+
+    /**
+     * Sets up the UI layout settings for the specified camera and extension mode. And then,
+     * triggers to open the camera and capture session to start the preview with the extension mode
+     * enabled.
+     */
+    @Suppress("DEPRECATION") /* defaultDisplay */
+    private fun setupAndStartPreview(cameraId: String, extensionMode: Int) {
+        if (!textureView.isAvailable) {
+            Toast.makeText(
+                this, "TextureView is invalid!!",
+                Toast.LENGTH_SHORT
+            ).show()
+            finish()
+            return
+        }
+
+        val previewResolution = pickPreviewResolution(
+            cameraManager,
+            cameraId,
+            resources.displayMetrics,
+            extensionMode
+        )
+
+        if (previewResolution == null) {
+            Toast.makeText(
+                this,
+                "Invalid preview extension sizes!.",
+                Toast.LENGTH_SHORT
+            ).show()
+            finish()
+            return
+        }
+
+        Log.d(TAG, "Set default buffer size to previewResolution: $previewResolution")
+
+        textureView.surfaceTexture?.setDefaultBufferSize(
+            previewResolution.width,
+            previewResolution.height
+        )
+
+        textureView.layoutParams =
+            FrameLayout.LayoutParams(previewResolution.width, previewResolution.height)
+
+        val containerViewSize = Size(containerView.width, containerView.height)
+
+        val lensFacing =
+            cameraManager.getCameraCharacteristics(cameraId)[CameraCharacteristics.LENS_FACING]
+
+        transformTextureView(
+            textureView,
+            containerViewSize,
+            previewResolution,
+            windowManager.defaultDisplay.rotation,
+            cameraSensorRotationDegrees,
+            lensFacing == CameraCharacteristics.LENS_FACING_BACK
+        )
+
+        startPreview(cameraId, extensionMode)
     }
 
-    private fun openCameraWithExtensionMode(cameraId: String) =
+    /**
+     * Opens the camera and capture session to start the preview with the extension mode enabled.
+     */
+    private fun startPreview(cameraId: String, extensionMode: Int) =
         lifecycleScope.launch(cameraTaskDispatcher) {
             Log.d(TAG, "openCameraWithExtensionMode()++ cameraId: $cameraId")
-            cameraDevice = openCamera(cameraManager, cameraId)
-            cameraExtensionSession = openCaptureSession()
+            if (cameraDevice == null || cameraDevice!!.id != cameraId) {
+                cameraDevice = openCamera(cameraManager, cameraId)
+            }
+            cameraExtensionSession = openCaptureSession(extensionMode)
 
             lifecycleScope.launch(Dispatchers.Main) {
                 if (activityStopped) {
-                    closeCaptureSession()
-                    closeCamera()
+                    closeCaptureSessionAsync()
+                    closeCameraAsync()
                 }
             }
             Log.d(TAG, "openCameraWithExtensionMode()--")
@@ -382,7 +528,7 @@
                         if (restartCamera) {
                             restartCamera = false
                             updateExtensionInfo()
-                            openCameraWithExtensionMode(currentCameraId)
+                            setupAndStartPreview(currentCameraId, currentExtensionMode)
                         }
                     }
                 }
@@ -407,10 +553,9 @@
     /**
      * Opens and returns the extensions session (as the result of the suspend coroutine)
      */
-    private suspend fun openCaptureSession(): CameraExtensionSession =
+    private suspend fun openCaptureSession(extensionMode: Int): CameraExtensionSession =
         suspendCancellableCoroutine { cont ->
             Log.d(TAG, "openCaptureSession")
-            setupPreview()
 
             if (stillImageReader != null) {
                 val imageReaderToClose = stillImageReader!!
@@ -426,7 +571,7 @@
             outputConfig.add(OutputConfiguration(stillImageReader!!.surface))
             outputConfig.add(OutputConfiguration(previewSurface))
             val extensionConfiguration = ExtensionSessionConfiguration(
-                currentExtensionMode, outputConfig,
+                extensionMode, outputConfig,
                 cameraTaskDispatcher.asExecutor(), object : CameraExtensionSession.StateCallback() {
                     override fun onClosed(session: CameraExtensionSession) {
                         Log.d(TAG, "CaptureSession - onClosed: $session")
@@ -435,8 +580,11 @@
                             if (restartPreview) {
                                 restartPreview = false
 
+                                val newExtensionMode = currentExtensionMode
+
                                 lifecycleScope.launch(cameraTaskDispatcher) {
-                                    cameraExtensionSession = openCaptureSession()
+                                    cameraExtensionSession =
+                                        openCaptureSession(newExtensionMode)
                                 }
                             }
                         }
@@ -453,7 +601,12 @@
                                 cameraTaskDispatcher.asExecutor(), captureCallbacks
                             )
                             cont.resume(session)
-                            runOnUiThread { enableUiControl(true) }
+                            runOnUiThread {
+                                enableUiControl(true)
+                                if (!captureSessionConfiguredIdlingResource.isIdleNow) {
+                                    captureSessionConfiguredIdlingResource.decrement()
+                                }
+                            }
                         } catch (e: CameraAccessException) {
                             Log.e(TAG, e.toString())
                             cont.resumeWithException(
@@ -478,47 +631,14 @@
             }
         }
 
-    @Suppress("DEPRECATION") /* defaultDisplay */
-    private fun setupPreview() {
-        if (!textureView.isAvailable) {
-            Toast.makeText(
-                this, "TextureView is invalid!!",
-                Toast.LENGTH_SHORT
-            ).show()
-            finish()
-            return
-        }
-
-        val previewResolution = pickPreviewResolution(
-            cameraManager,
-            currentCameraId,
-            resources.displayMetrics,
-            currentExtensionMode
-        )
-
-        if (previewResolution == null) {
-            Toast.makeText(
-                this,
-                "Invalid preview extension sizes!.",
-                Toast.LENGTH_SHORT
-            ).show()
-            finish()
-            return
-        }
-
-        textureView.surfaceTexture?.setDefaultBufferSize(
-            previewResolution.width,
-            previewResolution.height
-        )
-        transformPreview(textureView, previewResolution, windowManager.defaultDisplay.rotation)
-    }
-
     private fun setupImageReader(): ImageReader {
         val (size, format) = pickStillImageResolution(
             extensionCharacteristics,
             currentExtensionMode
         )
 
+        Log.d(TAG, "Setup image reader - size: $size, format: $format")
+
         return ImageReader.newInstance(size.width, size.height, format, 1)
     }
 
@@ -542,9 +662,15 @@
         stillImageReader!!.setOnImageAvailableListener(
             { reader: ImageReader ->
                 lifecycleScope.launch(cameraTaskDispatcher) {
-                    acquireImageAndSave(reader)
+                    acquireImageAndSave(reader)?.let { sessionImageUriSet.add(it) }
+
                     stillImageReader!!.setOnImageAvailableListener(null, null)
                     takePictureCompleter?.set(null)
+
+                    if (!imageSavedIdlingResource.isIdleNow) {
+                        imageSavedIdlingResource.decrement()
+                    }
+
                     lifecycleScope.launch(Dispatchers.Main) {
                         enableUiControl(true)
                     }
@@ -582,7 +708,8 @@
     /**
      * Acquires the latest image from the image reader and save it to the Pictures folder
      */
-    private fun acquireImageAndSave(imageReader: ImageReader) {
+    private fun acquireImageAndSave(imageReader: ImageReader): Uri? {
+        var uri: Uri? = null
         try {
             val formatter: Format =
                 SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS", Locale.US)
@@ -592,13 +719,13 @@
                 }"
 
             val rotationDegrees = calculateRelativeImageRotationDegrees(
-                (getDisplayRotationDegrees(display!!.rotation)),
+                (surfaceRotationToRotationDegrees(display!!.rotation)),
                 cameraSensorRotationDegrees,
                 currentCameraId == backCameraId
             )
 
             imageReader.acquireLatestImage().let { image ->
-                val uri = FileUtil.saveImage(
+                uri = FileUtil.saveImage(
                     image,
                     fileName,
                     ".jpg",
@@ -622,6 +749,8 @@
         } catch (e: Exception) {
             Log.e(TAG, e.toString())
         }
+
+        return uri
     }
 
     override fun onCreateOptionsMenu(menu: Menu): Boolean {
@@ -649,8 +778,8 @@
         // Needs to close the camera first. Otherwise, the next activity might be failed to open
         // the camera and configure the capture session.
         runBlocking {
-            closeCaptureSession().await()
-            closeCamera().await()
+            closeCaptureSessionAsync().await()
+            closeCameraAsync().await()
         }
 
         val intent = Intent()
@@ -658,4 +787,66 @@
         intent.setClassName(this, className)
         startActivity(intent)
     }
+
+    @VisibleForTesting
+    fun getCaptureSessionConfiguredIdlingResource(): CountingIdlingResource =
+        captureSessionConfiguredIdlingResource
+
+    @VisibleForTesting
+    fun getPreviewIdlingResource(): CountingIdlingResource = previewIdlingResource
+
+    @VisibleForTesting
+    fun getImageSavedIdlingResource(): CountingIdlingResource = imageSavedIdlingResource
+
+    private fun resetCaptureSessionConfiguredIdlingResource() {
+        if (captureSessionConfiguredIdlingResource.isIdleNow) {
+            captureSessionConfiguredIdlingResource.increment()
+        }
+    }
+
+    @VisibleForTesting
+    fun resetPreviewIdlingResource() {
+        receivedCaptureProcessStartedCount.set(0)
+        receivedPreviewFrameCount.set(0)
+
+        if (captureProcessStartedIdlingResource.isIdleNow) {
+            captureProcessStartedIdlingResource.increment()
+        }
+
+        if (previewIdlingResource.isIdleNow) {
+            previewIdlingResource.increment()
+        }
+    }
+
+    private fun resetImageSavedIdlingResource() {
+        if (imageSavedIdlingResource.isIdleNow) {
+            imageSavedIdlingResource.increment()
+        }
+    }
+
+    @VisibleForTesting
+    fun deleteSessionImages() {
+        sessionImageUriSet.deleteAllUris()
+    }
+
+    private class SessionMediaUriSet constructor(val contentResolver: ContentResolver) {
+        private val mSessionMediaUris: MutableSet<Uri> = mutableSetOf()
+
+        fun add(uri: Uri) {
+            synchronized(mSessionMediaUris) {
+                mSessionMediaUris.add(uri)
+            }
+        }
+
+        fun deleteAllUris() {
+            synchronized(mSessionMediaUris) {
+                val it =
+                    mSessionMediaUris.iterator()
+                while (it.hasNext()) {
+                    contentResolver.delete(it.next(), null, null)
+                    it.remove()
+                }
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/utils/Camera2ExtensionsUtil.kt b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/utils/Camera2ExtensionsUtil.kt
index 8bbd835..7d9f688 100644
--- a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/utils/Camera2ExtensionsUtil.kt
+++ b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/utils/Camera2ExtensionsUtil.kt
@@ -18,24 +18,16 @@
 
 import android.annotation.SuppressLint
 import android.graphics.ImageFormat
-import android.graphics.Matrix
 import android.graphics.Point
 import android.graphics.SurfaceTexture
 import android.hardware.camera2.CameraCharacteristics
 import android.hardware.camera2.CameraExtensionCharacteristics
-import android.hardware.camera2.CameraExtensionSession
-import android.hardware.camera2.CameraExtensionSession.ExtensionCaptureCallback
 import android.hardware.camera2.CameraManager
-import android.hardware.camera2.CaptureRequest
 import android.os.Build
 import android.util.DisplayMetrics
 import android.util.Log
 import android.util.Size
-import android.view.Surface
-import android.view.TextureView
 import androidx.annotation.RequiresApi
-import java.math.BigDecimal
-import java.math.RoundingMode
 import java.util.stream.Collectors
 
 private const val TAG = "Camera2ExtensionsUtil"
@@ -83,49 +75,6 @@
     }
 
     /**
-     * Creates a default extension capture callback implementation.
-     */
-    @RequiresApi(Build.VERSION_CODES.S)
-    @JvmStatic
-    fun createExtensionCaptureCallback(): ExtensionCaptureCallback {
-        return object : ExtensionCaptureCallback() {
-            override fun onCaptureStarted(
-                session: CameraExtensionSession,
-                request: CaptureRequest,
-                timestamp: Long
-            ) {
-            }
-
-            override fun onCaptureProcessStarted(
-                session: CameraExtensionSession,
-                request: CaptureRequest
-            ) {
-            }
-
-            override fun onCaptureFailed(
-                session: CameraExtensionSession,
-                request: CaptureRequest
-            ) {
-                Log.v(TAG, "onCaptureProcessFailed")
-            }
-
-            override fun onCaptureSequenceCompleted(
-                session: CameraExtensionSession,
-                sequenceId: Int
-            ) {
-                Log.v(TAG, "onCaptureProcessSequenceCompleted: $sequenceId")
-            }
-
-            override fun onCaptureSequenceAborted(
-                session: CameraExtensionSession,
-                sequenceId: Int
-            ) {
-                Log.v(TAG, "onCaptureProcessSequenceAborted: $sequenceId")
-            }
-        }
-    }
-
-    /**
      * Picks a preview resolution that is both close/same as the display size and supported by camera
      * and extensions.
      */
@@ -213,135 +162,4 @@
 
         return Pair(stillCaptureSize, stillFormat)
     }
-
-    /**
-     * Transforms the texture view to display the content of resolution in correct direction and
-     * aspect ratio.
-     */
-    @JvmStatic
-    fun transformPreview(textureView: TextureView, resolution: Size, displayRotation: Int) {
-        if (resolution.width == 0 || resolution.height == 0) {
-            return
-        }
-        if (textureView.width == 0 || textureView.height == 0) {
-            return
-        }
-        val matrix = Matrix()
-        val left: Int = textureView.left
-        val right: Int = textureView.right
-        val top: Int = textureView.top
-        val bottom: Int = textureView.bottom
-
-        // Compute the preview ui size based on the available width, height, and ui orientation.
-        val viewWidth = right - left
-        val viewHeight = bottom - top
-        val displayRotationDegrees: Int = getDisplayRotationDegrees(displayRotation)
-        val scaled: Size = calculatePreviewViewDimens(
-            resolution, viewWidth, viewHeight, displayRotation
-        )
-
-        // Compute the center of the view.
-        val centerX = (viewWidth / 2).toFloat()
-        val centerY = (viewHeight / 2).toFloat()
-
-        // Do corresponding rotation to correct the preview direction
-        matrix.postRotate((-displayRotationDegrees).toFloat(), centerX, centerY)
-
-        // Compute the scale value for center crop mode
-        var xScale = scaled.width / viewWidth.toFloat()
-        var yScale = scaled.height / viewHeight.toFloat()
-        if (displayRotationDegrees % 180 == 90) {
-            xScale = scaled.width / viewHeight.toFloat()
-            yScale = scaled.height / viewWidth.toFloat()
-        }
-
-        // Only two digits after the decimal point are valid for postScale. Need to get ceiling of
-        // two digits floating value to do the scale operation. Otherwise, the result may be scaled
-        // not large enough and will have some blank lines on the screen.
-        xScale = BigDecimal(xScale.toDouble()).setScale(2, RoundingMode.CEILING).toFloat()
-        yScale = BigDecimal(yScale.toDouble()).setScale(2, RoundingMode.CEILING).toFloat()
-
-        // Do corresponding scale to resolve the deformation problem
-        matrix.postScale(xScale, yScale, centerX, centerY)
-        textureView.setTransform(matrix)
-    }
-
-    /**
-     * Converts the display rotation to degrees value.
-     *
-     * @return One of 0, 90, 180, 270.
-     */
-    @JvmStatic
-    fun getDisplayRotationDegrees(displayRotation: Int): Int = when (displayRotation) {
-        Surface.ROTATION_0 -> 0
-        Surface.ROTATION_90 -> 90
-        Surface.ROTATION_180 -> 180
-        Surface.ROTATION_270 -> 270
-        else -> throw UnsupportedOperationException(
-            "Unsupported display rotation: $displayRotation"
-        )
-    }
-
-    /**
-     * Calculates the delta between a source rotation and destination rotation.
-     *
-     * <p>A typical use of this method would be calculating the angular difference between the
-     * display orientation (destRotationDegrees) and camera sensor orientation
-     * (sourceRotationDegrees).
-     *
-     * @param destRotationDegrees   The destination rotation relative to the device's natural
-     *                              rotation.
-     * @param sourceRotationDegrees The source rotation relative to the device's natural rotation.
-     * @param isOppositeFacing      Whether the source and destination planes are facing opposite
-     *                              directions.
-     */
-    @JvmStatic
-    fun calculateRelativeImageRotationDegrees(
-        destRotationDegrees: Int,
-        sourceRotationDegrees: Int,
-        isOppositeFacing: Boolean
-    ): Int {
-        val result: Int = if (isOppositeFacing) {
-            (sourceRotationDegrees - destRotationDegrees + 360) % 360
-        } else {
-            (sourceRotationDegrees + destRotationDegrees) % 360
-        }
-
-        return result
-    }
-
-    /**
-     * Calculates the preview size which can display the source image in correct aspect ratio.
-     */
-    @JvmStatic
-    private fun calculatePreviewViewDimens(
-        srcSize: Size,
-        parentWidth: Int,
-        parentHeight: Int,
-        displayRotation: Int
-    ): Size {
-        var inWidth = srcSize.width
-        var inHeight = srcSize.height
-        if (displayRotation == 0 || displayRotation == 180) {
-            // Need to reverse the width and height since we're in landscape orientation.
-            inWidth = srcSize.height
-            inHeight = srcSize.width
-        }
-        var outWidth = parentWidth
-        var outHeight = parentHeight
-        if (inWidth != 0 && inHeight != 0) {
-            val vfRatio = inWidth / inHeight.toFloat()
-            val parentRatio = parentWidth / parentHeight.toFloat()
-
-            // Match shortest sides together.
-            if (vfRatio < parentRatio) {
-                outWidth = parentWidth
-                outHeight = Math.round(parentWidth / vfRatio)
-            } else {
-                outWidth = Math.round(parentHeight * vfRatio)
-                outHeight = parentHeight
-            }
-        }
-        return Size(outWidth, outHeight)
-    }
 }
\ No newline at end of file
diff --git a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/utils/TransformUtil.kt b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/utils/TransformUtil.kt
new file mode 100644
index 0000000..fb3c5ef
--- /dev/null
+++ b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/utils/TransformUtil.kt
@@ -0,0 +1,255 @@
+/*
+ * Copyright 2022 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.camera.integration.extensions.utils
+
+import android.graphics.Matrix
+import android.graphics.Rect
+import android.graphics.RectF
+import android.util.Size
+import android.view.Surface
+import android.view.TextureView
+import androidx.core.graphics.toRect
+
+// Normalized space (-1, -1) - (1, 1).
+private val NORMALIZED_RECT = RectF(-1f, -1f, 1f, 1f)
+
+object TransformUtil {
+
+    /**
+     * Converts [Surface] rotation to rotation degrees: 90, 180, 270 or 0.
+     */
+    @JvmStatic
+    fun surfaceRotationToRotationDegrees(rotationValue: Int): Int = when (rotationValue) {
+        Surface.ROTATION_0 -> 0
+        Surface.ROTATION_90 -> 90
+        Surface.ROTATION_180 -> 180
+        Surface.ROTATION_270 -> 270
+        else -> throw UnsupportedOperationException(
+            "Unsupported display rotation: $rotationValue"
+        )
+    }
+
+    /**
+     * Calculates the delta between a source rotation and destination rotation.
+     *
+     * <p>A typical use of this method would be calculating the angular difference between the
+     * display orientation (destRotationDegrees) and camera sensor orientation
+     * (sourceRotationDegrees).
+     *
+     * @param destRotationDegrees   The destination rotation relative to the device's natural
+     *                              rotation.
+     * @param sourceRotationDegrees The source rotation relative to the device's natural rotation.
+     * @param isOppositeFacing      Whether the source and destination planes are facing opposite
+     *                              directions.
+     */
+    @JvmStatic
+    fun calculateRelativeImageRotationDegrees(
+        destRotationDegrees: Int,
+        sourceRotationDegrees: Int,
+        isOppositeFacing: Boolean
+    ): Int = if (isOppositeFacing) {
+        (sourceRotationDegrees - destRotationDegrees + 360) % 360
+    } else {
+        (sourceRotationDegrees + destRotationDegrees) % 360
+    }
+
+    /**
+     * Calculates the transformation and applies it to the inner view of [TextureView] preview.
+     *
+     * [TextureView] needs a preliminary correction since it doesn't handle the
+     * display rotation.
+     */
+    @JvmStatic
+    fun transformTextureView(
+        preview: TextureView,
+        containerViewSize: Size,
+        resolution: Size,
+        targetRotation: Int,
+        sensorRotationDegrees: Int,
+        isOppositeFacing: Boolean
+    ) {
+        // For TextureView, correct the orientation to match the target rotation.
+        preview.setTransform(getTextureViewCorrectionMatrix(resolution, targetRotation))
+
+        val surfaceRectInPreview = getTransformedSurfaceRect(
+            containerViewSize,
+            resolution,
+            calculateRelativeImageRotationDegrees(
+                surfaceRotationToRotationDegrees(targetRotation),
+                sensorRotationDegrees,
+                isOppositeFacing
+            )
+        )
+
+        preview.pivotX = 0f
+        preview.pivotY = 0f
+        preview.scaleX = surfaceRectInPreview.width() / resolution.width
+        preview.scaleY = surfaceRectInPreview.height() / resolution.height
+        preview.translationX = surfaceRectInPreview.left - preview.left
+        preview.translationY = surfaceRectInPreview.top - preview.top
+    }
+
+    /**
+     * Creates a matrix that makes [TextureView]'s rotation matches the target rotation.
+     *
+     * The value should be applied by calling [TextureView.setTransform]. Usually the target
+     * rotation is the display rotation. In that case, this matrix will just make a [TextureView]
+     * works like a SurfaceView. If not, then it will further correct it to the desired rotation.
+     *
+     */
+    @JvmStatic
+    private fun getTextureViewCorrectionMatrix(resolution: Size, targetRotation: Int): Matrix {
+        val surfaceRect = RectF(0f, 0f, resolution.width.toFloat(), resolution.height.toFloat())
+        val rotationDegrees = -surfaceRotationToRotationDegrees(targetRotation)
+        return getRectToRect(surfaceRect, surfaceRect, rotationDegrees)
+    }
+
+    /**
+     * Gets the transform from one {@link Rect} to another with rotation degrees.
+     *
+     * <p> Following is how the source is mapped to the target with a 90° rotation. The rect
+     * <a, b, c, d> is mapped to <a', b', c', d'>.
+     *
+     * <pre>
+     *  a----------b               d'-----------a'
+     *  |  source  |    -90°->     |            |
+     *  d----------c               |   target   |
+     *                             |            |
+     *                             c'-----------b'
+     * </pre>
+     */
+    @JvmStatic
+    private fun getRectToRect(
+        source: RectF,
+        target: RectF,
+        rotationDegrees: Int
+    ): Matrix = Matrix().apply {
+        // Map source to normalized space.
+        setRectToRect(source, NORMALIZED_RECT, Matrix.ScaleToFit.FILL)
+        // Add rotation.
+        postRotate(rotationDegrees.toFloat())
+        // Restore the normalized space to target's coordinates.
+        postConcat(getNormalizedToBuffer(target))
+    }
+
+    /**
+     * Gets the transform from a normalized space (-1, -1) - (1, 1) to the given rect.
+     */
+    @JvmStatic
+    private fun getNormalizedToBuffer(viewPortRect: RectF): Matrix = Matrix().apply {
+        setRectToRect(
+            NORMALIZED_RECT,
+            viewPortRect,
+            Matrix.ScaleToFit.FILL
+        )
+    }
+
+    /**
+     * Gets the transformed [Surface] rect in the preview coordinates.
+     *
+     * Returns desired rect of the inner view that once applied, the only part visible to
+     * end users is the crop rect.
+     */
+    @JvmStatic
+    private fun getTransformedSurfaceRect(
+        containerViewSize: Size,
+        resolution: Size,
+        rotationDegrees: Int
+    ): RectF {
+        val surfaceToPreviewMatrix = getSurfaceToPreviewMatrix(
+            containerViewSize,
+            resolution,
+            rotationDegrees
+        )
+        val rect =
+            RectF(0f, 0f, resolution.width.toFloat(), resolution.height.toFloat())
+        surfaceToPreviewMatrix.mapRect(rect)
+        return rect
+    }
+
+    /**
+     * Calculates the transformation from [Surface] coordinates to the preview coordinates.
+     *
+     *  The calculation is based on making the crop rect to center fill the preview.
+     */
+    @JvmStatic
+    private fun getSurfaceToPreviewMatrix(
+        containerViewSize: Size,
+        resolution: Size,
+        rotationDegrees: Int
+    ): Matrix {
+        val surfaceRect = RectF(0f, 0f, resolution.width.toFloat(), resolution.height.toFloat())
+
+        // Get the target of the mapping, the coordinates of the crop rect in the preview.
+        val previewCropRect = getPreviewCropRect(
+            containerViewSize, surfaceRect.toRect(), rotationDegrees
+        )
+
+        return getRectToRect(surfaceRect, previewCropRect, rotationDegrees)
+    }
+
+    /**
+     * Gets the crop rect in the preview coordinates.
+     */
+    @JvmStatic
+    private fun getPreviewCropRect(
+        containerViewSize: Size,
+        surfaceCropRect: Rect,
+        rotationDegrees: Int
+    ): RectF {
+        val containerViewRect = RectF(
+            0f, 0f, containerViewSize.width.toFloat(),
+            containerViewSize.height.toFloat()
+        )
+        val rotatedCropRectSize = getRotatedCropRectSize(surfaceCropRect, rotationDegrees)
+        val rotatedCropRect =
+            RectF(0f, 0f, rotatedCropRectSize.width.toFloat(), rotatedCropRectSize.height.toFloat())
+
+        Matrix().apply {
+            // android.graphics.Matrix doesn't support fill scale types. The workaround is
+            // mapping inversely from destination to source, then invert the matrix.
+            setRectToRect(containerViewRect, rotatedCropRect, Matrix.ScaleToFit.CENTER)
+            invert(this)
+            mapRect(rotatedCropRect)
+        }
+
+        return rotatedCropRect
+    }
+
+    /**
+     * Returns crop rect size with target rotation applied.
+     */
+    @JvmStatic
+    private fun getRotatedCropRectSize(surfaceCropRect: Rect, rotationDegrees: Int): Size =
+        if (is90or270(rotationDegrees)) {
+            Size(surfaceCropRect.height(), surfaceCropRect.width())
+        } else Size(surfaceCropRect.width(), surfaceCropRect.height())
+
+    /**
+     * Returns true if the rotation degrees is 90 or 270.
+     */
+    @JvmStatic
+    private fun is90or270(rotationDegrees: Int): Boolean {
+        if (rotationDegrees == 90 || rotationDegrees == 270) {
+            return true
+        }
+        if (rotationDegrees == 0 || rotationDegrees == 180) {
+            return false
+        }
+        throw IllegalArgumentException("Invalid rotation degrees: $rotationDegrees")
+    }
+}
\ No newline at end of file
diff --git a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/validation/ExtensionValidationResultActivity.kt b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/validation/ExtensionValidationResultActivity.kt
index c3a2051..89dbe9f 100644
--- a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/validation/ExtensionValidationResultActivity.kt
+++ b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/validation/ExtensionValidationResultActivity.kt
@@ -48,7 +48,7 @@
     private val imageValidationActivityRequestCode =
         ImageValidationActivity::class.java.hashCode() % 1000
 
-    @Suppress("UNCHECKED_CAST")
+    @Suppress("UNCHECKED_CAST", "DEPRECATION")
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.full_listview)
diff --git a/camera/integration-tests/extensionstestapp/src/main/res/layout/activity_camera_extensions.xml b/camera/integration-tests/extensionstestapp/src/main/res/layout/activity_camera_extensions.xml
index 1a8adfa..586c25a 100644
--- a/camera/integration-tests/extensionstestapp/src/main/res/layout/activity_camera_extensions.xml
+++ b/camera/integration-tests/extensionstestapp/src/main/res/layout/activity_camera_extensions.xml
@@ -26,6 +26,7 @@
 
     <ViewStub
         android:id="@+id/viewFinderStub"
+        android:inflatedId="@id/viewFinder"
         android:layout_width="0dp"
         android:layout_height="0dp"
         app:layout_constraintBottom_toBottomOf="parent"
diff --git a/camera/integration-tests/extensionstestapp/src/main/res/layout/full_textureview.xml b/camera/integration-tests/extensionstestapp/src/main/res/layout/full_textureview.xml
index 18ebf88..5d76592 100644
--- a/camera/integration-tests/extensionstestapp/src/main/res/layout/full_textureview.xml
+++ b/camera/integration-tests/extensionstestapp/src/main/res/layout/full_textureview.xml
@@ -14,6 +14,13 @@
   limitations under the License.
   -->
 
-<TextureView xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent" />
+    android:layout_height="match_parent">
+
+    <TextureView
+        android:id="@+id/textureView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</FrameLayout>
diff --git a/camera/integration-tests/extensionstestapp/src/main/res/values/ids.xml b/camera/integration-tests/extensionstestapp/src/main/res/values/ids.xml
new file mode 100644
index 0000000..18de602
--- /dev/null
+++ b/camera/integration-tests/extensionstestapp/src/main/res/values/ids.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Copyright 2022 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.
+  -->
+
+<resources>
+    <item type="id" name="viewFinder" />
+</resources>
diff --git a/car/app/app-automotive/src/main/java/androidx/car/app/activity/CarAppViewModel.java b/car/app/app-automotive/src/main/java/androidx/car/app/activity/CarAppViewModel.java
index 5e85fb7..ed7afe3 100644
--- a/car/app/app-automotive/src/main/java/androidx/car/app/activity/CarAppViewModel.java
+++ b/car/app/app-automotive/src/main/java/androidx/car/app/activity/CarAppViewModel.java
@@ -270,10 +270,10 @@
                     () -> requireNonNull(mIInsetsListener).onWindowInsetsChanged(mInsets,
                             getSafeInsets(mDisplayCutout))
             );
-        } else {
-            getServiceDispatcher().dispatch("onInsetsChanged",
-                    () -> requireNonNull(mIInsetsListener).onInsetsChanged(mInsets));
+            return;
         }
+        getServiceDispatcher().dispatch("onInsetsChanged",
+                () -> requireNonNull(mIInsetsListener).onInsetsChanged(mInsets));
     }
 
     /**
diff --git a/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppViewModelTest.java b/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppViewModelTest.java
index 353977c..335ee81 100644
--- a/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppViewModelTest.java
+++ b/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppViewModelTest.java
@@ -20,15 +20,21 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import static org.robolectric.Shadows.shadowOf;
 
 import android.app.Application;
 import android.content.ComponentName;
 import android.content.Intent;
+import android.os.RemoteException;
 
+import androidx.car.app.HandshakeInfo;
 import androidx.car.app.activity.renderer.ICarAppActivity;
+import androidx.car.app.activity.renderer.IInsetsListener;
 import androidx.test.core.app.ApplicationProvider;
 
 import org.junit.Before;
@@ -56,6 +62,8 @@
     private ShadowLooper mMainLooper;
     private final ServiceConnectionManager mServiceConnectionManager =
             mock(ServiceConnectionManager.class);
+    private final IInsetsListener mIInsetsListener = mock(IInsetsListener.class);
+    private final ServiceDispatcher mServiceDispatcher = mock(ServiceDispatcher.class);
 
     @Before
     public void setUp() {
@@ -139,4 +147,30 @@
                 .isEqualTo(CarAppViewModel.State.IDLE);
         assertThat(mCarAppViewModel.getError().getValue()).isNull();
     }
+
+    @Test
+    public void dispatchInsetsUpdates_whenApiLevel5Above_shouldCallWindowsInsetsChanged() throws
+            RemoteException {
+        mCarAppViewModel.setServiceConnectionManager(mServiceConnectionManager);
+        when(mServiceConnectionManager.getHandshakeInfo()).thenReturn(createHandshakeInfo("TestApp",
+                5));
+        when(mServiceConnectionManager.getServiceDispatcher()).thenReturn(mServiceDispatcher);
+        mCarAppViewModel.setInsetsListener(mIInsetsListener);
+        verify(mServiceDispatcher).dispatch(eq("onWindowInsetsChanged"), any());
+    }
+
+    @Test
+    public void dispatchInsetsUpdates_whenApiLevelBelow5_shouldCallInsetsChanges() throws
+            RemoteException {
+        mCarAppViewModel.setServiceConnectionManager(mServiceConnectionManager);
+        when(mServiceConnectionManager.getHandshakeInfo()).thenReturn(
+                createHandshakeInfo("TestApp", 4));
+        when(mServiceConnectionManager.getServiceDispatcher()).thenReturn(mServiceDispatcher);
+        mCarAppViewModel.setInsetsListener(mIInsetsListener);
+        verify(mServiceDispatcher).dispatch(eq("onInsetsChanged"), any());
+    }
+
+    private static HandshakeInfo createHandshakeInfo(String packageName, int hostApiLevel) {
+        return new HandshakeInfo(packageName, hostApiLevel);
+    }
 }
diff --git a/car/app/app-projected/src/test/java/androidx/car/app/hardware/common/CarResultStubMapTest.java b/car/app/app-projected/src/test/java/androidx/car/app/hardware/common/CarResultStubMapTest.java
index 04e9656..0b75733 100644
--- a/car/app/app-projected/src/test/java/androidx/car/app/hardware/common/CarResultStubMapTest.java
+++ b/car/app/app-projected/src/test/java/androidx/car/app/hardware/common/CarResultStubMapTest.java
@@ -121,7 +121,7 @@
         Integer desiredResult = 5;
         Bundleable desiredBundleable = Bundleable.create(desiredResult);
         int desiredResultType = ICarHardwareResultTypes.TYPE_SENSOR_ACCELEROMETER;
-        Integer unsupportedResult = new Integer(-1);
+        Integer unsupportedResult = -1;
         String param = "param";
         Bundleable paramBundle = Bundleable.create(param);
 
@@ -193,7 +193,7 @@
     public void addListener_multiple_listener_multiple_param() throws BundlerException,
             RemoteException {
         int desiredResultType = ICarHardwareResultTypes.TYPE_SENSOR_ACCELEROMETER;
-        Integer unsupportedResult = new Integer(-1);
+        Integer unsupportedResult = -1;
 
         CarResultStubMap<Integer, Integer> carResultStubMap = new CarResultStubMap<>(
                 desiredResultType,
diff --git a/car/app/app-samples/navigation/common/src/main/AndroidManifest.xml b/car/app/app-samples/navigation/common/src/main/AndroidManifest.xml
index 0786374..cf9481d 100644
--- a/car/app/app-samples/navigation/common/src/main/AndroidManifest.xml
+++ b/car/app/app-samples/navigation/common/src/main/AndroidManifest.xml
@@ -16,6 +16,7 @@
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android">
 
+    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
diff --git a/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationScreen.java b/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationScreen.java
index 962d81d..3d72083 100644
--- a/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationScreen.java
+++ b/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationScreen.java
@@ -141,6 +141,19 @@
 
         // Set the action strip.
         ActionStrip.Builder actionStripBuilder = new ActionStrip.Builder();
+        if (mIsNavigating) {
+            actionStripBuilder.addAction(
+                    new Action.Builder()
+                            .setIcon(
+                                    new CarIcon.Builder(
+                                            IconCompat.createWithResource(
+                                                    getCarContext(),
+                                                    R.drawable.ic_add_stop))
+                                            .build())
+                            .setOnClickListener(this::openFavorites)
+                            .build());
+        }
+
         actionStripBuilder.addAction(mSettingsAction);
         actionStripBuilder.addAction(
                 new Action.Builder()
@@ -298,15 +311,16 @@
                 .pushForResult(
                         new FavoritesScreen(getCarContext(), mSettingsAction, mSurfaceRenderer),
                         (obj) -> {
-                            if (obj != null) {
-                                // Need to copy over each element to satisfy Java type safety.
-                                List<?> results = (List<?>) obj;
-                                List<Instruction> instructions = new ArrayList<Instruction>();
-                                for (Object result : results) {
-                                    instructions.add((Instruction) result);
-                                }
-                                mListener.executeScript(instructions);
+                            if (obj == null || mIsNavigating) {
+                                return;
                             }
+                            // Need to copy over each element to satisfy Java type safety.
+                            List<?> results = (List<?>) obj;
+                            List<Instruction> instructions = new ArrayList<Instruction>();
+                            for (Object result : results) {
+                                instructions.add((Instruction) result);
+                            }
+                            mListener.executeScript(instructions);
                         });
     }
 
diff --git a/car/app/app-samples/navigation/common/src/main/res/drawable/ic_add_stop.xml b/car/app/app-samples/navigation/common/src/main/res/drawable/ic_add_stop.xml
new file mode 100644
index 0000000..3db7a4e
--- /dev/null
+++ b/car/app/app-samples/navigation/common/src/main/res/drawable/ic_add_stop.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Copyright 2022 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.
+  -->
+
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M11,12H13V10H15V8H13V6H11V8H9V10H11ZM12,22Q11.65,22 11.4,21.8Q11.15,21.6 11.025,21.275Q10.55,19.875 9.838,18.65Q9.125,17.425 7.85,15.775Q6.575,14.125 5.787,12.625Q5,11.125 5,9Q5,6.075 7.038,4.037Q9.075,2 12,2Q14.925,2 16.962,4.037Q19,6.075 19,9Q19,11.275 18.138,12.787Q17.275,14.3 16.15,15.775Q14.8,17.575 14.113,18.762Q13.425,19.95 12.975,21.275Q12.85,21.625 12.588,21.812Q12.325,22 12,22ZM12,18.425Q12.425,17.575 12.963,16.75Q13.5,15.925 14.55,14.55Q15.625,13.15 16.312,11.962Q17,10.775 17,9Q17,6.925 15.538,5.463Q14.075,4 12,4Q9.925,4 8.463,5.463Q7,6.925 7,9Q7,10.775 7.688,11.962Q8.375,13.15 9.45,14.55Q10.5,15.925 11.038,16.75Q11.575,17.575 12,18.425ZM12,9Q12,9 12,9Q12,9 12,9Q12,9 12,9Q12,9 12,9Q12,9 12,9Q12,9 12,9Q12,9 12,9Q12,9 12,9Q12,9 12,9Q12,9 12,9Q12,9 12,9Q12,9 12,9Z"/>
+</vector>
\ No newline at end of file
diff --git a/car/app/app-samples/showcase/common/lint-baseline.xml b/car/app/app-samples/showcase/common/lint-baseline.xml
index ec7df9b..08c9828 100644
--- a/car/app/app-samples/showcase/common/lint-baseline.xml
+++ b/car/app/app-samples/showcase/common/lint-baseline.xml
@@ -1,5 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+
+    <issue
+        id="NotificationPermission"
+        message="When targeting Android 13 or higher, posting a permission requires holding the `POST_NOTIFICATIONS` permission (usage from leakcanary.NotificationEventListener)">
+        <location
+            file="$GRADLE_USER_HOME/caches/transforms-3/4366a02f2b10003dc48387e903833c2d/transformed/leakcanary-android-core-2.8.1/jars/classes.jar"/>
+    </issue>
 
     <issue
         id="ClassVerificationFailure"
diff --git a/car/app/app-testing/lint-baseline.xml b/car/app/app-testing/lint-baseline.xml
deleted file mode 100644
index a43e379..0000000
--- a/car/app/app-testing/lint-baseline.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofMinutes`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(1)).build();"
-        errorLine2="                                                                         ~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(1)).build();"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofHours`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(1)).build();"
-        errorLine2="                                                                         ~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(1)).build();"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofMinutes`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(2)).build();"
-        errorLine2="                                                                         ~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(2)).build();"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofHours`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(2)).build();"
-        errorLine2="                                                                         ~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(2)).build();"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofMinutes`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(3)).build();"
-        errorLine2="                                                                         ~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(3)).build();"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofHours`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(3)).build();"
-        errorLine2="                                                                         ~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
-        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(3)).build();"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"/>
-    </issue>
-
-</issues>
diff --git a/car/app/app/lint-baseline.xml b/car/app/app/lint-baseline.xml
index fc546b9..1ee1cdd 100644
--- a/car/app/app/lint-baseline.xml
+++ b/car/app/app/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="cli" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
@@ -22,7 +22,7 @@
     <issue
         id="NewApi"
         message="Call requires API level 24 (current min is 23): `android.content.res.Configuration#getLocales`"
-        errorLine1="        assertThat(mCarContext.getResources().getConfiguration().getLocales().get(0))"
+        errorLine1="        assertThat(mCarContext.getResources().getConfiguration().getLocales().get(0)).isEqualTo("
         errorLine2="                                                                 ~~~~~~~~~~">
         <location
             file="src/test/java/androidx/car/app/CarContextTest.java"/>
@@ -31,7 +31,7 @@
     <issue
         id="NewApi"
         message="Call requires API level 24 (current min is 23): `android.os.LocaleList#get`"
-        errorLine1="        assertThat(mCarContext.getResources().getConfiguration().getLocales().get(0))"
+        errorLine1="        assertThat(mCarContext.getResources().getConfiguration().getLocales().get(0)).isEqualTo("
         errorLine2="                                                                              ~~~">
         <location
             file="src/test/java/androidx/car/app/CarContextTest.java"/>
diff --git a/car/app/app/src/main/java/androidx/car/app/navigation/model/Trip.java b/car/app/app/src/main/java/androidx/car/app/navigation/model/Trip.java
index e4a620d..2835ce3 100644
--- a/car/app/app/src/main/java/androidx/car/app/navigation/model/Trip.java
+++ b/car/app/app/src/main/java/androidx/car/app/navigation/model/Trip.java
@@ -34,7 +34,23 @@
  * Represents information about a trip including destinations, steps, and travel estimates.
  *
  * <p>This information data <b>may</b> be displayed in different places in the car such as the
- * instrument cluster screens and heads-up display.
+ * instrument cluster screens, heads-up display and floating navigation bar.
+ *
+ * <p>Floating navigation bar can show current navigating info in three templates including
+ * {@link MapTemplate}, {@link RoutePreviewNavigationTemplate} and
+ * {@link PlaceListNavigationTemplate}. The navigating steps can be added with the use of
+ * {@link Builder#addStep}. There are three navigation info showing in the floating nav bar
+ * including:
+ * <ul>
+ *     <li>The current road description get from {@link Step#getCue} of the current {@link Step},
+ *     which gets from the first element of {@link #getSteps()}</li>
+ *     <li>The remaining distance of the current road get from
+ *     {@link TravelEstimate#getRemainingDistance} of the first element of
+ *     {@link #getStepTravelEstimates()} </li>
+ *     <li>The turn icon get from {@link Maneuver#getIcon()} from the {@link Maneuver} of the
+ *     current {@link Step}
+ *     </li>
+ * </ul>
  */
 @CarProtocol
 public final class Trip {
diff --git a/car/app/app/src/main/java/androidx/car/app/notification/CarAppNotificationBroadcastReceiver.java b/car/app/app/src/main/java/androidx/car/app/notification/CarAppNotificationBroadcastReceiver.java
index 9a9bd33..49c96d4 100644
--- a/car/app/app/src/main/java/androidx/car/app/notification/CarAppNotificationBroadcastReceiver.java
+++ b/car/app/app/src/main/java/androidx/car/app/notification/CarAppNotificationBroadcastReceiver.java
@@ -47,6 +47,7 @@
 public class CarAppNotificationBroadcastReceiver extends BroadcastReceiver {
     private static final String TAG = LogTags.TAG + ".NBR";
 
+    @SuppressWarnings("deprecation")
     @Override
     public void onReceive(@NonNull Context context, @NonNull Intent intent) {
         ComponentName appComponent =
diff --git a/car/app/app/src/test/java/androidx/car/app/notification/CarPendingIntentTest.java b/car/app/app/src/test/java/androidx/car/app/notification/CarPendingIntentTest.java
index 5a03bb1..86daab0 100644
--- a/car/app/app/src/test/java/androidx/car/app/notification/CarPendingIntentTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/notification/CarPendingIntentTest.java
@@ -52,6 +52,7 @@
     private final ComponentName mComponentName = new ComponentName(mContext, CarAppService.class);
     private final Intent mIntent = new Intent("fooAction").setComponent(mComponentName);
 
+    @SuppressWarnings("deprecation")
     @Test
     public void getCarApp_returnsTheExpectedPendingIntent() throws PendingIntent.CanceledException {
         PendingIntent pendingIntent = CarPendingIntent.getCarApp(mContext, 1, mIntent,
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt
index ca257d7..bacd5b2 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt
@@ -572,6 +572,85 @@
         """
     )
 
+    @Test // Regression test for b/180168881
+    fun testFunctionReferenceWithinInferredComposableLambda(): Unit = verifyComposeIrTransform(
+        """
+            import androidx.compose.runtime.Composable
+
+            fun Problem() {
+                fun foo() { }
+                val lambda: @Composable ()->Unit = {
+                    ::foo
+                }
+            }
+        """,
+        """
+            fun Problem() {
+              fun foo() { }
+              val lambda = composableLambdaInstance(<>, false) { %composer: Composer?, %changed: Int ->
+                sourceInformation(%composer, "C:Test.kt")
+                if (%changed and 0b1011 !== 0b0010 || !%composer.skipping) {
+                  if (isTraceInProgress()) {
+                    traceEventStart(<>, %changed, -1, <>)
+                  }
+                  foo
+                  if (isTraceInProgress()) {
+                    traceEventEnd()
+                  }
+                } else {
+                  %composer.skipToGroupEnd()
+                }
+              }
+            }
+        """
+    )
+
+    @Test
+    fun testFunctionReferenceNonComposableMemoization(): Unit = verifyComposeIrTransform(
+        """
+            import androidx.compose.runtime.Composable
+            @Composable fun Example(x: Int) {
+                fun foo() { use(x) }
+                val shouldMemoize: ()->(()->Unit) = { ::foo }
+            }
+        """,
+        """
+            @Composable
+            fun Example(x: Int, %composer: Composer?, %changed: Int) {
+              %composer = %composer.startRestartGroup(<>)
+              sourceInformation(%composer, "C(Example)<{>:Test.kt")
+              val %dirty = %changed
+              if (%changed and 0b1110 === 0) {
+                %dirty = %dirty or if (%composer.changed(x)) 0b0100 else 0b0010
+              }
+              if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
+                if (isTraceInProgress()) {
+                  traceEventStart(<>, %dirty, -1, <>)
+                }
+                fun foo() {
+                  use(x)
+                }
+                val shouldMemoize = remember(x, {
+                  {
+                    foo
+                  }
+                }, %composer, 0b1110 and %dirty)
+                if (isTraceInProgress()) {
+                  traceEventEnd()
+                }
+              } else {
+                %composer.skipToGroupEnd()
+              }
+              %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+                Example(x, %composer, %changed or 0b0001)
+              }
+            }
+        """,
+        """
+            fun use(x: Any) = println(x)
+        """.trimIndent()
+    )
+
     @Test // regression of b/162575428
     fun testComposableInAFunctionParameter(): Unit = verifyComposeIrTransform(
         """
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralTransformTests.kt
index bf549ed..4aa8dad 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralTransformTests.kt
@@ -20,7 +20,6 @@
 import androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer
 import org.intellij.lang.annotations.Language
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
-import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
 import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
 import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapper
 import org.junit.Test
@@ -557,7 +556,6 @@
 
     private var builtKeys = mutableSetOf<String>()
 
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     override fun postProcessingStep(
         module: IrModuleFragment,
         context: IrPluginContext
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralV2TransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralV2TransformTests.kt
index e8b2913..4436c8a 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralV2TransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralV2TransformTests.kt
@@ -20,7 +20,6 @@
 import androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer
 import org.intellij.lang.annotations.Language
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
-import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
 import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
 import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapper
 import org.junit.Test
@@ -559,7 +558,6 @@
 
     private var builtKeys = mutableSetOf<String>()
 
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     override fun postProcessingStep(
         module: IrModuleFragment,
         context: IrPluginContext
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/SanityCheckCodegenTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/SanityCheckCodegenTests.kt
index 38c974d..6c1f46b 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/SanityCheckCodegenTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/SanityCheckCodegenTests.kt
@@ -74,4 +74,20 @@
         """
         )
     }
+
+    // Regression test for b/180168881
+    fun testFunctionReferenceWithinInferredComposableLambda() = ensureSetup {
+        testCompile(
+            """
+                import androidx.compose.runtime.Composable
+
+                fun Problem() {
+                    fun foo() { }
+                    val lambda: @Composable ()->Unit = {
+                        ::foo
+                    }
+                }
+        """
+        )
+    }
 }
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
index c642dff..dd2a1cc 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
@@ -83,8 +83,10 @@
             7101 to "1.2.0-rc02",
             7102 to "1.2.0-rc03",
             7103 to "1.2.0",
+            7104 to "1.2.1",
             8000 to "1.3.0-alpha01",
             8100 to "1.3.0-alpha02",
+            8200 to "1.3.0-alpha03",
         )
 
         /**
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/WeakBindingTrace.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/WeakBindingTrace.kt
index 9761db0..bc0b920 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/WeakBindingTrace.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/WeakBindingTrace.kt
@@ -17,13 +17,11 @@
 package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.util.keyFMap.KeyFMap
+import java.util.WeakHashMap
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
-import org.jetbrains.kotlin.codegen.state.GenerationState
 import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer
-import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
 import org.jetbrains.kotlin.util.slicedMap.ReadOnlySlice
 import org.jetbrains.kotlin.util.slicedMap.WritableSlice
-import java.util.WeakHashMap
 
 /**
  * This class is meant to have the shape of a BindingTrace object that could exist and flow
@@ -52,8 +50,4 @@
 private val ComposeTemporaryGlobalBindingTrace = WeakBindingTrace()
 
 @Suppress("unused")
-val GeneratorContext.irTrace: WeakBindingTrace get() = ComposeTemporaryGlobalBindingTrace
-@Suppress("unused")
-val GenerationState.irTrace: WeakBindingTrace get() = ComposeTemporaryGlobalBindingTrace
-@Suppress("unused")
 val IrPluginContext.irTrace: WeakBindingTrace get() = ComposeTemporaryGlobalBindingTrace
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/AbstractComposeLowering.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/AbstractComposeLowering.kt
index 6af98ac..4e6580f 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/AbstractComposeLowering.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/AbstractComposeLowering.kt
@@ -34,8 +34,6 @@
 import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType
 import org.jetbrains.kotlin.builtins.getValueParameterTypesFromFunctionType
 import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
-import org.jetbrains.kotlin.descriptors.ClassDescriptor
-import org.jetbrains.kotlin.descriptors.ClassKind
 import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
 import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource
 import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
@@ -364,10 +362,6 @@
         return context.irTrace[ComposeWritableSlices.IS_COMPOSABLE_SINGLETON_CLASS, this] == true
     }
 
-    protected val KotlinType.isEnum
-        get() =
-            (constructor.declarationDescriptor as? ClassDescriptor)?.kind == ClassKind.ENUM_CLASS
-
     fun Stability.irStableExpression(
         resolve: (IrTypeParameter) -> IrExpression? = { null }
     ): IrExpression? = when (this) {
@@ -402,9 +396,6 @@
         is Stability.Unknown -> null
     }
 
-    fun KotlinType.isFinal(): Boolean = (constructor.declarationDescriptor as? ClassDescriptor)
-        ?.modality == Modality.FINAL
-
     @OptIn(ObsoleteDescriptorBasedAPI::class)
     private fun IrFunction.createParameterDeclarations() {
         fun ParameterDescriptor.irValueParameter() = IrValueParameterImpl(
@@ -822,7 +813,7 @@
         null
     )
 
-    @ObsoleteDescriptorBasedAPI
+    @OptIn(ObsoleteDescriptorBasedAPI::class)
     protected fun irForLoop(
         elementType: IrType,
         subject: IrExpression,
@@ -1069,7 +1060,6 @@
         }
     }
 
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     fun IrExpression.isStatic(): Boolean {
         return when (this) {
             // A constant by definition is static
@@ -1085,8 +1075,7 @@
             is IrConstructorCall -> isStatic()
             is IrCall -> isStatic()
             is IrGetValue -> {
-                val owner = symbol.owner
-                when (owner) {
+                when (val owner = symbol.owner) {
                     is IrVariable -> {
                         // If we have an immutable variable whose initializer is also static,
                         // then we can determine that the variable reference is also static.
@@ -1111,7 +1100,7 @@
         return false
     }
 
-    @ObsoleteDescriptorBasedAPI
+    @OptIn(ObsoleteDescriptorBasedAPI::class)
     fun IrCall.isStatic(): Boolean {
         val function = symbol.owner
         val fqName = function.descriptor.fqNameSafe
@@ -1309,15 +1298,13 @@
 fun IrPluginContext.function(arity: Int): IrClassSymbol =
     referenceClass(FqName("kotlin.Function$arity"))!!
 
-@ObsoleteDescriptorBasedAPI
 val DeclarationDescriptorWithSource.startOffset: Int? get() =
     (this.source as? PsiSourceElement)?.psi?.startOffset
 
-@ObsoleteDescriptorBasedAPI
 val DeclarationDescriptorWithSource.endOffset: Int? get() =
     (this.source as? PsiSourceElement)?.psi?.endOffset
 
-@ObsoleteDescriptorBasedAPI
+@OptIn(ObsoleteDescriptorBasedAPI::class)
 fun IrAnnotationContainer.hasAnnotationSafe(fqName: FqName): Boolean =
     annotations.any {
         // compiler helper getAnnotation fails during remapping in [ComposableTypeRemapper], so we
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
index 7d23c51..c8987c1 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
@@ -954,7 +954,6 @@
     // 2. cannot have default parameters, so have no default handling
     // 3. they cannot be skipped since we do not know their capture scope, so no skipping logic
     // 4. proper groups around control flow structures in the body
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     private fun visitComposableLambda(
         declaration: IrFunction,
         scope: Scope.FunctionScope,
@@ -986,7 +985,7 @@
         // safely mark this as `isVar = false`.
             changedParam.irCopyToTemporary(
                 // LLVM validation doesn't allow us to have val here.
-                isVar = if (context.platform.isJvm() || context.platform.isJs()) false else true,
+                isVar = !context.platform.isJvm() && !context.platform.isJs(),
                 nameHint = "\$dirty",
                 exactName = true
             )
@@ -1102,7 +1101,6 @@
     // 3. generate handling of default parameters if necessary
     // 4. generate skipping logic based on parameters passed into the function
     // 5. generate groups around control flow structures in the body
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     private fun visitRestartableComposableFunction(
         declaration: IrFunction,
         scope: Scope.FunctionScope,
@@ -1123,7 +1121,7 @@
         val dirty = if (scope.allTrackedParams.isNotEmpty())
             changedParam.irCopyToTemporary(
                 // LLVM validation doesn't allow us to have val here.
-                isVar = if (context.platform.isJvm() || context.platform.isJs()) false else true,
+                isVar = !context.platform.isJvm() && !context.platform.isJs(),
                 nameHint = "\$dirty",
                 exactName = true
             )
@@ -1306,7 +1304,6 @@
         return parametersScope
     }
 
-    @ObsoleteDescriptorBasedAPI
     private fun buildPreambleStatementsAndReturnIfSkippingPossible(
         sourceElement: IrElement,
         skipPreamble: IrStatementContainer,
@@ -2262,7 +2259,6 @@
         }
     }
 
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     private fun irTemporary(
         value: IrExpression,
         nameHint: String? = null,
@@ -2725,7 +2721,6 @@
         }
     }
 
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     override fun visitCall(expression: IrCall): IrExpression {
         if (expression.isTransformedComposableCall() || expression.isSyntheticComposableCall()) {
             return visitComposableCall(expression)
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
index cb0bb80..de3293f 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
@@ -61,21 +61,18 @@
 import org.jetbrains.kotlin.ir.util.SymbolRemapper
 import org.jetbrains.kotlin.ir.util.SymbolRenamer
 import org.jetbrains.kotlin.ir.util.TypeRemapper
-import org.jetbrains.kotlin.ir.util.TypeTranslator
 import org.jetbrains.kotlin.ir.util.fqNameForIrSerialization
 import org.jetbrains.kotlin.ir.util.functions
 import org.jetbrains.kotlin.ir.util.hasAnnotation
 import org.jetbrains.kotlin.ir.util.patchDeclarationParents
 import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
 import org.jetbrains.kotlin.name.FqName
-import org.jetbrains.kotlin.types.KotlinType
 import org.jetbrains.kotlin.types.Variance
 
 class DeepCopyIrTreeWithSymbolsPreservingMetadata(
     private val context: IrPluginContext,
     private val symbolRemapper: DeepCopySymbolRemapper,
-    private val typeRemapper: TypeRemapper,
-    private val typeTranslator: TypeTranslator,
+    typeRemapper: TypeRemapper,
     symbolRenamer: SymbolRenamer = SymbolRenamer.DEFAULT
 ) : DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper, symbolRenamer) {
 
@@ -348,14 +345,11 @@
     private fun IrType.isComposable(): Boolean {
         return annotations.hasAnnotation(ComposeFqNames.Composable)
     }
-
-    private fun KotlinType.toIrType(): IrType = typeTranslator.translateType(this)
 }
 
 class ComposerTypeRemapper(
     private val context: IrPluginContext,
     private val symbolRemapper: SymbolRemapper,
-    private val typeTranslator: TypeTranslator,
     private val composerType: IrType
 ) : TypeRemapper {
 
@@ -381,8 +375,6 @@
     private fun List<IrConstructorCall>.hasAnnotation(fqName: FqName): Boolean =
         any { it.annotationClass?.isClassWithFqName(fqName.toUnsafe()) ?: false }
 
-    private fun KotlinType.toIrType(): IrType = typeTranslator.translateType(this)
-
     @OptIn(ObsoleteDescriptorBasedAPI::class)
     private fun IrType.isFunction(): Boolean {
         val classifier = classifierOrNull ?: return false
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerLambdaMemoization.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerLambdaMemoization.kt
index c3410b9..332ef2a 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerLambdaMemoization.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerLambdaMemoization.kt
@@ -451,6 +451,9 @@
 
     override fun visitFunctionReference(expression: IrFunctionReference): IrExpression {
         // Memoize the instance created by using the :: operator
+        if (expression.symbol.owner.isLocal) {
+            declarationContextStack.recordLocalCapture(expression.symbol.owner)
+        }
         val result = super.visitFunctionReference(expression)
         val functionContext = currentFunctionContext ?: return result
         if (expression.valueArgumentsCount != 0) {
@@ -568,7 +571,7 @@
         return super.visitConstructorCall(expression)
     }
 
-    @ObsoleteDescriptorBasedAPI
+    @OptIn(ObsoleteDescriptorBasedAPI::class)
     private fun visitComposableFunctionExpression(
         expression: IrFunctionExpression,
         declarationContext: DeclarationContext
@@ -674,7 +677,6 @@
         ).markAsComposableSingleton()
     }
 
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     override fun visitFunctionExpression(expression: IrFunctionExpression): IrExpression {
         val declarationContext = declarationContextStack.peek()
             ?: return super.visitFunctionExpression(expression)
@@ -696,7 +698,6 @@
         }
     }
 
-    @ObsoleteDescriptorBasedAPI
     private fun wrapFunctionExpression(
         declarationContext: DeclarationContext,
         expression: IrFunctionExpression,
@@ -705,7 +706,7 @@
         val function = expression.function
         val argumentCount = function.valueParameters.size
 
-        val isJs = context.moduleDescriptor.platform.isJs()
+        val isJs = context.platform.isJs()
         if (argumentCount > MAX_RESTART_ARGUMENT_COUNT && isJs) {
             error(
                 "only $MAX_RESTART_ARGUMENT_COUNT parameters " +
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
index e3a5ab0..436f7b3 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
@@ -110,7 +110,6 @@
 
     private var inlineLambdaInfo = ComposeInlineLambdaLocator(context)
 
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     override fun lower(module: IrModuleFragment) {
         currentModule = module
 
@@ -123,7 +122,6 @@
         val typeRemapper = ComposerTypeRemapper(
             context,
             symbolRemapper,
-            typeTranslator,
             composerType
         )
         // for each declaration, we create a deepCopy transformer It is important here that we
@@ -132,8 +130,7 @@
         val transformer = DeepCopyIrTreeWithSymbolsPreservingMetadata(
             context,
             symbolRemapper,
-            typeRemapper,
-            typeTranslator
+            typeRemapper
         ).also { typeRemapper.deepCopy = it }
         module.transformChildren(
             transformer,
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/LiveLiteralTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/LiveLiteralTransformer.kt
index f540715..746843b 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/LiveLiteralTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/LiveLiteralTransformer.kt
@@ -26,7 +26,6 @@
 import org.jetbrains.kotlin.descriptors.ClassKind
 import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
 import org.jetbrains.kotlin.ir.IrStatement
-import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
 import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
 import org.jetbrains.kotlin.ir.builders.declarations.IrFunctionBuilder
 import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
@@ -393,7 +392,6 @@
         }
     }
 
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     override fun visitConst(expression: IrConst<*>): IrExpression {
         when (expression.kind) {
             IrConstKind.Null -> return expression
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/CreateDecoysTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/CreateDecoysTransformer.kt
index 3644fe5..c1e44f7 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/CreateDecoysTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/CreateDecoysTransformer.kt
@@ -28,7 +28,6 @@
 import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder
 import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer
 import org.jetbrains.kotlin.ir.IrStatement
-import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
 import org.jetbrains.kotlin.ir.builders.declarations.IrFunctionBuilder
 import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
 import org.jetbrains.kotlin.ir.builders.declarations.buildFun
@@ -171,7 +170,6 @@
         )
     }
 
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     private fun IrFunction.copyWithName(
         newName: Name,
         factory: (IrFunctionBuilder.() -> Unit) -> IrFunction = context.irFactory::buildFun
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyTransformBase.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyTransformBase.kt
index 2d67806..540a91f 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyTransformBase.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyTransformBase.kt
@@ -176,11 +176,9 @@
     ): IrSymbol = resolveBySignatureInModule(idSignature, FUNCTION_SYMBOL, moduleDescriptor.name)
 }
 
-@OptIn(ObsoleteDescriptorBasedAPI::class)
 fun IrDeclaration.isDecoy(): Boolean =
     hasAnnotationSafe(DecoyFqNames.Decoy)
 
-@OptIn(ObsoleteDescriptorBasedAPI::class)
 fun IrDeclaration.isDecoyImplementation(): Boolean =
     hasAnnotationSafe(DecoyFqNames.DecoyImplementation)
 
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTest.kt
index b3ca612..8e8e473 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTest.kt
@@ -16,12 +16,6 @@
 
 package androidx.compose.foundation
 
-import android.view.KeyEvent.ACTION_DOWN
-import android.view.KeyEvent.ACTION_UP
-import android.view.KeyEvent.KEYCODE_DPAD_CENTER
-import android.view.KeyEvent.KEYCODE_ENTER
-import android.view.KeyEvent.KEYCODE_NUMPAD_ENTER
-import android.view.KeyEvent as AndroidKeyEvent
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.gestures.detectTapGestures
 import androidx.compose.foundation.gestures.draggable
@@ -32,6 +26,7 @@
 import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.interaction.PressInteraction
 import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.requiredHeight
 import androidx.compose.foundation.layout.requiredWidth
 import androidx.compose.foundation.layout.size
@@ -41,13 +36,15 @@
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.setValue
+import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clipToBounds
 import androidx.compose.ui.focus.FocusManager
 import androidx.compose.ui.focus.FocusRequester
 import androidx.compose.ui.focus.focusRequester
 import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.input.key.KeyEvent
+import androidx.compose.ui.input.key.Key
+import androidx.compose.ui.input.key.onKeyEvent
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.platform.InspectableValue
 import androidx.compose.ui.platform.LocalFocusManager
@@ -72,10 +69,11 @@
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.onNodeWithText
 import androidx.compose.ui.test.performClick
-import androidx.compose.ui.test.performKeyPress
+import androidx.compose.ui.test.performKeyInput
 import androidx.compose.ui.test.performMouseInput
 import androidx.compose.ui.test.performSemanticsAction
 import androidx.compose.ui.test.performTouchInput
+import androidx.compose.ui.test.pressKey
 import androidx.compose.ui.unit.dp
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
@@ -83,7 +81,6 @@
 import androidx.test.platform.app.InstrumentationRegistry
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.flow.collect
 import kotlinx.coroutines.launch
 import org.junit.After
 import org.junit.Before
@@ -107,6 +104,7 @@
     @After
     fun after() {
         isDebugInspectorInfoEnabled = false
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(true)
     }
 
     @Test
@@ -207,6 +205,7 @@
     }
 
     @Test
+    @OptIn(ExperimentalTestApi::class, ExperimentalComposeUiApi::class)
     fun clickableTest_clickWithEnterKey() {
         InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
         var counter = 0
@@ -223,18 +222,17 @@
 
         rule.runOnIdle { focusRequester.requestFocus() }
 
-        rule.onNodeWithTag("myClickable")
-            .performKeyPress(KeyEvent(AndroidKeyEvent(ACTION_DOWN, KEYCODE_ENTER)))
+        rule.onNodeWithTag("myClickable").performKeyInput { keyDown(Key.Enter) }
 
         rule.runOnIdle { assertThat(counter).isEqualTo(0) }
 
-        rule.onNodeWithTag("myClickable")
-            .performKeyPress(KeyEvent(AndroidKeyEvent(ACTION_UP, KEYCODE_ENTER)))
+        rule.onNodeWithTag("myClickable").performKeyInput { keyUp(Key.Enter) }
 
         rule.runOnIdle { assertThat(counter).isEqualTo(1) }
     }
 
     @Test
+    @OptIn(ExperimentalTestApi::class, ExperimentalComposeUiApi::class)
     fun clickableTest_clickWithNumPadEnterKey() {
         InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
         var counter = 0
@@ -251,18 +249,17 @@
 
         rule.runOnIdle { focusRequester.requestFocus() }
 
-        rule.onNodeWithTag("myClickable")
-            .performKeyPress(KeyEvent(AndroidKeyEvent(ACTION_DOWN, KEYCODE_NUMPAD_ENTER)))
+        rule.onNodeWithTag("myClickable").performKeyInput { keyDown(Key.NumPadEnter) }
 
         rule.runOnIdle { assertThat(counter).isEqualTo(0) }
 
-        rule.onNodeWithTag("myClickable")
-            .performKeyPress(KeyEvent(AndroidKeyEvent(ACTION_UP, KEYCODE_NUMPAD_ENTER)))
+        rule.onNodeWithTag("myClickable").performKeyInput { keyUp(Key.NumPadEnter) }
 
         rule.runOnIdle { assertThat(counter).isEqualTo(1) }
     }
 
     @Test
+    @OptIn(ExperimentalTestApi::class, ExperimentalComposeUiApi::class)
     fun clickableTest_clickWithDPadCenter() {
         InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
         var counter = 0
@@ -279,13 +276,11 @@
 
         rule.runOnIdle { focusRequester.requestFocus() }
 
-        rule.onNodeWithTag("myClickable")
-            .performKeyPress(KeyEvent(AndroidKeyEvent(ACTION_DOWN, KEYCODE_DPAD_CENTER)))
+        rule.onNodeWithTag("myClickable").performKeyInput { keyDown(Key.DirectionCenter) }
 
         rule.runOnIdle { assertThat(counter).isEqualTo(0) }
 
-        rule.onNodeWithTag("myClickable")
-            .performKeyPress(KeyEvent(AndroidKeyEvent(ACTION_UP, KEYCODE_DPAD_CENTER)))
+        rule.onNodeWithTag("myClickable").performKeyInput { keyUp(Key.DirectionCenter) }
 
         rule.runOnIdle { assertThat(counter).isEqualTo(1) }
     }
@@ -1921,4 +1916,292 @@
             assertThat(clicked).isTrue()
         }
     }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun clickableTest_enterKey_emitsIndication() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("ClickableText",
+                    modifier = Modifier
+                        .testTag("clickable")
+                        .focusRequester(focusRequester)
+                        .clickable(
+                            interactionSource = interactionSource,
+                            indication = null
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        rule.onNodeWithTag("clickable").performKeyInput { keyDown(Key.Enter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(1)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+        }
+
+        rule.onNodeWithTag("clickable").performKeyInput { keyUp(Key.Enter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(2)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions.last()).isInstanceOf(PressInteraction.Release::class.java)
+        }
+    }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun clickableTest_numPadEnterKey_emitsIndication() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("ClickableText",
+                    modifier = Modifier
+                        .testTag("clickable")
+                        .focusRequester(focusRequester)
+                        .clickable(
+                            interactionSource = interactionSource,
+                            indication = null
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        rule.onNodeWithTag("clickable").performKeyInput { keyDown(Key.NumPadEnter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(1)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+        }
+
+        rule.onNodeWithTag("clickable").performKeyInput { keyUp(Key.NumPadEnter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(2)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions.last()).isInstanceOf(PressInteraction.Release::class.java)
+        }
+    }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun clickableTest_dpadCenter_emitsIndication() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("ClickableText",
+                    modifier = Modifier
+                        .testTag("clickable")
+                        .focusRequester(focusRequester)
+                        .clickable(
+                            interactionSource = interactionSource,
+                            indication = null
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+        rule.waitForIdle()
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        rule.onNodeWithTag("clickable").performKeyInput { keyDown(Key.DirectionCenter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(1)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+        }
+
+        rule.onNodeWithTag("clickable").performKeyInput { keyUp(Key.DirectionCenter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(2)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions.last()).isInstanceOf(PressInteraction.Release::class.java)
+        }
+    }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun clickableTest_otherKey_doesNotEmitIndication() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("ClickableText",
+                    modifier = Modifier
+                        .testTag("clickable")
+                        .focusRequester(focusRequester)
+                        .clickable(
+                            interactionSource = interactionSource,
+                            indication = null
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        rule.onNodeWithTag("clickable").performKeyInput { pressKey(Key.Spacebar) }
+        rule.runOnIdle {
+            assertThat(interactions).isEmpty()
+        }
+    }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun clickableTest_doubleEnterKey_emitsFurtherInteractions() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("ClickableText",
+                    modifier = Modifier
+                        .testTag("clickable")
+                        .focusRequester(focusRequester)
+                        .clickable(
+                            interactionSource = interactionSource,
+                            indication = null
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        val clickableNode = rule.onNodeWithTag("clickable")
+
+        clickableNode.performKeyInput { pressKey(Key.Enter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(2)
+            assertThat(interactions[0]).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions[1]).isInstanceOf(PressInteraction.Release::class.java)
+        }
+
+        clickableNode.performKeyInput { keyDown(Key.Enter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(3)
+            assertThat(interactions[0]).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions[1]).isInstanceOf(PressInteraction.Release::class.java)
+            assertThat(interactions[2]).isInstanceOf(PressInteraction.Press::class.java)
+        }
+
+        clickableNode.performKeyInput { keyUp(Key.Enter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(4)
+            assertThat(interactions[0]).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions[1]).isInstanceOf(PressInteraction.Release::class.java)
+            assertThat(interactions[2]).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions[3]).isInstanceOf(PressInteraction.Release::class.java)
+        }
+    }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun clickableTest_repeatKeyEvents_doNotEmitFurtherInteractions() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        var repeatCounter = 0
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("ClickableText",
+                    modifier = Modifier
+                        .testTag("clickable")
+                        .focusRequester(focusRequester)
+                        .onKeyEvent {
+                            if (it.nativeKeyEvent.repeatCount != 0)
+                                repeatCounter++
+                            false
+                        }
+                        .clickable(
+                            interactionSource = interactionSource,
+                            indication = null,
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        rule.onNodeWithTag("clickable").performKeyInput {
+            keyDown(Key.Enter)
+
+            advanceEventTime(500) // First repeat
+            advanceEventTime(50) // Second repeat
+        }
+
+        rule.runOnIdle {
+            // Ensure that expected number of repeats occurred and did not cause press interactions.
+            assertThat(repeatCounter).isEqualTo(2)
+            assertThat(interactions).hasSize(1)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+        }
+
+        rule.onNodeWithTag("clickable").performKeyInput { keyUp(Key.Enter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(2)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions.last()).isInstanceOf(PressInteraction.Release::class.java)
+        }
+    }
 }
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollAccessibilityTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollAccessibilityTest.kt
index 26edb9b..dea797b 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollAccessibilityTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollAccessibilityTest.kt
@@ -213,7 +213,7 @@
     private fun verifyNodeInfoScrollActions(expectForward: Boolean, expectBackward: Boolean) {
         val nodeInfo = rule.onNodeWithTag(scrollerTag).withSemanticsNode {
             rule.runOnUiThread {
-                accessibilityNodeProvider.createAccessibilityNodeInfo(id)
+                accessibilityNodeProvider.createAccessibilityNodeInfo(id)!!
             }
         }
 
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt
index a5447a8..2ea1f22 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt
@@ -22,6 +22,7 @@
 import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.interaction.PressInteraction
 import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.selection.selectable
 import androidx.compose.foundation.text.BasicText
 import androidx.compose.runtime.getValue
@@ -30,11 +31,14 @@
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.setValue
 import androidx.compose.testutils.first
+import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.focus.FocusManager
 import androidx.compose.ui.focus.FocusRequester
 import androidx.compose.ui.focus.focusRequester
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.key.Key
+import androidx.compose.ui.input.key.onKeyEvent
 import androidx.compose.ui.platform.InspectableValue
 import androidx.compose.ui.platform.LocalFocusManager
 import androidx.compose.ui.platform.isDebugInspectorInfoEnabled
@@ -52,14 +56,16 @@
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.onNodeWithText
 import androidx.compose.ui.test.performClick
+import androidx.compose.ui.test.performKeyInput
 import androidx.compose.ui.test.performMouseInput
 import androidx.compose.ui.test.performTouchInput
+import androidx.compose.ui.test.pressKey
+import androidx.compose.ui.unit.dp
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import androidx.test.platform.app.InstrumentationRegistry
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.flow.collect
 import kotlinx.coroutines.launch
 import org.junit.After
 import org.junit.Before
@@ -82,6 +88,7 @@
     @After
     fun after() {
         isDebugInspectorInfoEnabled = false
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(true)
     }
 
     @Test
@@ -616,4 +623,381 @@
             )
         }
     }
+
+    @Test
+    @OptIn(ExperimentalTestApi::class, ExperimentalComposeUiApi::class)
+    fun selectableTest_clickWithEnterKey() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        var counter = 0
+        val focusRequester = FocusRequester()
+        rule.setContent {
+            BasicText(
+                "SelectableText",
+                modifier = Modifier
+                    .testTag("selectable")
+                    .focusRequester(focusRequester)
+                    .selectable(selected = false) { counter++ }
+            )
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyDown(Key.Enter) }
+
+        rule.runOnIdle { assertThat(counter).isEqualTo(0) }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyUp(Key.Enter) }
+
+        rule.runOnIdle { assertThat(counter).isEqualTo(1) }
+    }
+
+    @Test
+    @OptIn(ExperimentalTestApi::class, ExperimentalComposeUiApi::class)
+    fun selectableTest_clickWithNumPadEnterKey() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        var counter = 0
+        val focusRequester = FocusRequester()
+        rule.setContent {
+            BasicText(
+                "SelectableText",
+                modifier = Modifier
+                    .testTag("selectable")
+                    .focusRequester(focusRequester)
+                    .selectable(selected = false) { counter++ }
+            )
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyDown(Key.NumPadEnter) }
+
+        rule.runOnIdle { assertThat(counter).isEqualTo(0) }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyUp(Key.NumPadEnter) }
+
+        rule.runOnIdle { assertThat(counter).isEqualTo(1) }
+    }
+
+    @Test
+    @OptIn(ExperimentalTestApi::class, ExperimentalComposeUiApi::class)
+    fun selectableTest_clickWithDPadCenter() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        var counter = 0
+        val focusRequester = FocusRequester()
+        rule.setContent {
+            BasicText(
+                "SelectableText",
+                modifier = Modifier
+                    .testTag("selectable")
+                    .focusRequester(focusRequester)
+                    .selectable(selected = false) { counter++ }
+            )
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyDown(Key.DirectionCenter) }
+
+        rule.runOnIdle { assertThat(counter).isEqualTo(0) }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyUp(Key.DirectionCenter) }
+
+        rule.runOnIdle { assertThat(counter).isEqualTo(1) }
+    }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun selectableTest_enterKey_emitsIndication() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("SelectableText",
+                    modifier = Modifier
+                        .testTag("selectable")
+                        .focusRequester(focusRequester)
+                        .selectable(
+                            selected = true,
+                            interactionSource = interactionSource,
+                            indication = null
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyDown(Key.Enter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(1)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+        }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyUp(Key.Enter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(2)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions.last()).isInstanceOf(PressInteraction.Release::class.java)
+        }
+    }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun selectableTest_numPadEnterKey_emitsIndication() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("SelectableText",
+                    modifier = Modifier
+                        .testTag("selectable")
+                        .focusRequester(focusRequester)
+                        .selectable(
+                            selected = true,
+                            interactionSource = interactionSource,
+                            indication = null
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyDown(Key.NumPadEnter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(1)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+        }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyUp(Key.NumPadEnter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(2)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions.last()).isInstanceOf(PressInteraction.Release::class.java)
+        }
+    }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun selectableTest_dpadCenter_emitsIndication() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("SelectableText",
+                    modifier = Modifier
+                        .testTag("selectable")
+                        .focusRequester(focusRequester)
+                        .selectable(
+                            selected = true,
+                            interactionSource = interactionSource,
+                            indication = null
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+        rule.waitForIdle()
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyDown(Key.DirectionCenter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(1)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+        }
+
+        rule.onNodeWithTag("selectable").performKeyInput { keyUp(Key.DirectionCenter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(2)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions.last()).isInstanceOf(PressInteraction.Release::class.java)
+        }
+    }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun selectableTest_otherKey_doesNotEmitIndication() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("SelectableText",
+                    modifier = Modifier
+                        .testTag("selectable")
+                        .focusRequester(focusRequester)
+                        .selectable(
+                            selected = true,
+                            interactionSource = interactionSource,
+                            indication = null
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        rule.onNodeWithTag("selectable").performKeyInput { pressKey(Key.Spacebar) }
+        rule.runOnIdle {
+            assertThat(interactions).isEmpty()
+        }
+    }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun selectableTest_doubleEnterKey_emitsFurtherInteractions() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("SelectableText",
+                    modifier = Modifier
+                        .testTag("selectable")
+                        .focusRequester(focusRequester)
+                        .selectable(
+                            selected = true,
+                            interactionSource = interactionSource,
+                            indication = null
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        val selectableNode = rule.onNodeWithTag("selectable")
+
+        selectableNode.performKeyInput { pressKey(Key.Enter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(2)
+            assertThat(interactions[0]).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions[1]).isInstanceOf(PressInteraction.Release::class.java)
+        }
+
+        selectableNode.performKeyInput { keyDown(Key.Enter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(3)
+            assertThat(interactions[0]).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions[1]).isInstanceOf(PressInteraction.Release::class.java)
+            assertThat(interactions[2]).isInstanceOf(PressInteraction.Press::class.java)
+        }
+
+        selectableNode.performKeyInput { keyUp(Key.Enter) }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(4)
+            assertThat(interactions[0]).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions[1]).isInstanceOf(PressInteraction.Release::class.java)
+            assertThat(interactions[2]).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions[3]).isInstanceOf(PressInteraction.Release::class.java)
+        }
+    }
+
+    @Test
+    @OptIn(ExperimentalComposeUiApi::class, ExperimentalTestApi::class)
+    fun selectableTest_repeatKeyEvents_doNotEmitFurtherInteractions() {
+        InstrumentationRegistry.getInstrumentation().setInTouchMode(false)
+        val interactionSource = MutableInteractionSource()
+        val focusRequester = FocusRequester()
+        lateinit var scope: CoroutineScope
+        var repeatCounter = 0
+        rule.setContent {
+            scope = rememberCoroutineScope()
+            Box(Modifier.padding(10.dp)) {
+                BasicText("SelectableText",
+                    modifier = Modifier
+                        .testTag("selectable")
+                        .focusRequester(focusRequester)
+                        .onKeyEvent {
+                            if (it.nativeKeyEvent.repeatCount != 0)
+                                repeatCounter++
+                            false
+                        }
+                        .selectable(
+                            selected = true,
+                            interactionSource = interactionSource,
+                            indication = null,
+                        ) {}
+                )
+            }
+        }
+
+        rule.runOnIdle { focusRequester.requestFocus() }
+
+        val interactions = mutableListOf<Interaction>()
+        scope.launch {
+            interactionSource.interactions.collect { interactions.add(it) }
+        }
+
+        rule.onNodeWithTag("selectable").performKeyInput {
+            keyDown(Key.Enter)
+
+            advanceEventTime(500) // First repeat
+            advanceEventTime(50) // Second repeat
+        }
+
+        rule.runOnIdle {
+            // Ensure that expected number of repeats occurred and did not cause press interactions.
+            assertThat(repeatCounter).isEqualTo(2)
+            assertThat(interactions).hasSize(1)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+        }
+
+        rule.onNodeWithTag("selectable").performKeyInput {
+            keyUp(Key.Enter)
+        }
+
+        rule.runOnIdle {
+            assertThat(interactions).hasSize(2)
+            assertThat(interactions.first()).isInstanceOf(PressInteraction.Press::class.java)
+            assertThat(interactions.last()).isInstanceOf(PressInteraction.Release::class.java)
+        }
+    }
 }
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
index f2a9052..a3a9ef1 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
@@ -226,7 +226,7 @@
     private fun verifyNodeInfoScrollActions(expectForward: Boolean, expectBackward: Boolean) {
         val nodeInfo = rule.onNodeWithTag(scrollerTag).withSemanticsNode {
             rule.runOnUiThread {
-                accessibilityNodeProvider.createAccessibilityNodeInfo(id)
+                accessibilityNodeProvider.createAccessibilityNodeInfo(id)!!
             }
         }
 
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt
index 0b2aa0e..87f9928 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt
@@ -233,7 +233,7 @@
     private fun verifyNodeInfoScrollActions(expectForward: Boolean, expectBackward: Boolean) {
         val nodeInfo = rule.onNodeWithTag(scrollerTag).withSemanticsNode {
             rule.runOnUiThread {
-                accessibilityNodeProvider.createAccessibilityNodeInfo(id)
+                accessibilityNodeProvider.createAccessibilityNodeInfo(id)!!
             }
         }
 
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSelectionOnBackTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSelectionOnBackTest.kt
index ace8b61..1acbc14 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSelectionOnBackTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSelectionOnBackTest.kt
@@ -29,7 +29,8 @@
 import androidx.compose.ui.input.key.key
 import androidx.compose.ui.input.key.onKeyEvent
 import androidx.compose.ui.input.key.type
-import androidx.compose.ui.platform.LocalTextInputService
+import androidx.compose.ui.platform.LocalSoftwareKeyboardController
+import androidx.compose.ui.platform.SoftwareKeyboardController
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.test.ExperimentalTestApi
 import androidx.compose.ui.test.assertIsDisplayed
@@ -42,7 +43,6 @@
 import androidx.compose.ui.test.performTouchInput
 import androidx.compose.ui.text.TextRange
 import androidx.compose.ui.text.input.TextFieldValue
-import androidx.compose.ui.text.input.TextInputService
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import com.google.common.truth.Truth.assertThat
@@ -134,9 +134,9 @@
     @Test
     fun whenBackPressed_andReleased_whenCursorHandleShown_doesNotConsumeEvent() {
         var backPressCount = 0
-        var textInputService: TextInputService? = null
+        var softwareKeyboardController: SoftwareKeyboardController? = null
         rule.setContent {
-            textInputService = LocalTextInputService.current
+            softwareKeyboardController = LocalSoftwareKeyboardController.current
             BasicTextField(
                 "hello world",
                 onValueChange = {},
@@ -159,7 +159,7 @@
             // Hide the keyboard before pressing back, since the first back should be consumed by
             // the keyboard.
             rule.runOnUiThread {
-                textInputService!!.hideSoftwareKeyboard()
+                softwareKeyboardController!!.hide()
             }
 
             // Press back.
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/Clickable.android.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/Clickable.android.kt
index 03252aa..6b5cef6 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/Clickable.android.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/Clickable.android.kt
@@ -24,6 +24,7 @@
 import android.view.ViewGroup
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.input.key.KeyEvent
+import androidx.compose.ui.input.key.KeyEventType.Companion.KeyDown
 import androidx.compose.ui.input.key.KeyEventType.Companion.KeyUp
 import androidx.compose.ui.input.key.key
 import androidx.compose.ui.input.key.nativeKeyCode
@@ -53,13 +54,21 @@
 internal actual val TapIndicationDelay: Long = ViewConfiguration.getTapTimeout().toLong()
 
 /**
- * Whether the specified [KeyEvent] represents a user intent to perform a click.
- * (eg. When you press Enter on a focused button, it should perform a click).
+ * Whether the specified [KeyEvent] should trigger a press for a clickable component, i.e. whether
+ * it is associated with a press of an enter key or dpad centre.
+ */
+internal actual val KeyEvent.isPress: Boolean
+    get() = type == KeyDown && isEnter
+
+/**
+ * Whether the specified [KeyEvent] should trigger a click for a clickable component, i.e. whether
+ * it is associated with a release of an enter key or dpad centre.
  */
 internal actual val KeyEvent.isClick: Boolean
-    get() = type == KeyUp && when (key.nativeKeyCode) {
-            KEYCODE_DPAD_CENTER,
-            KEYCODE_ENTER,
-            KEYCODE_NUMPAD_ENTER -> true
-            else -> false
+    get() = type == KeyUp && isEnter
+
+private val KeyEvent.isEnter: Boolean
+    get() = when (key.nativeKeyCode) {
+        KEYCODE_DPAD_CENTER, KEYCODE_ENTER, KEYCODE_NUMPAD_ENTER -> true
+        else -> false
     }
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt
index b358b54..0a72c93 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt
@@ -28,11 +28,14 @@
 import androidx.compose.runtime.State
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.rememberUpdatedState
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.composed
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.key.Key
 import androidx.compose.ui.input.key.KeyEvent
+import androidx.compose.ui.input.key.key
 import androidx.compose.ui.input.key.onKeyEvent
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.modifier.ModifierLocalConsumer
@@ -44,6 +47,9 @@
 import androidx.compose.ui.semantics.onLongClick
 import androidx.compose.ui.semantics.role
 import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.unit.center
+import androidx.compose.ui.unit.toOffset
+import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.cancelAndJoin
 import kotlinx.coroutines.coroutineScope
 import kotlinx.coroutines.delay
@@ -109,7 +115,7 @@
  * @param interactionSource [MutableInteractionSource] that will be used to dispatch
  * [PressInteraction.Press] when this clickable is pressed. Only the initial (first) press will be
  * recorded and dispatched with [MutableInteractionSource].
- * @param indication indication to be shown when modified element is pressed. Be default,
+ * @param indication indication to be shown when modified element is pressed. By default,
  * indication from [LocalIndication] will be used. Pass `null` to show no indication, or
  * current value from [LocalIndication] to show theme default
  * @param enabled Controls the enabled state. When `false`, [onClick], and this modifier will
@@ -138,7 +144,12 @@
         val delayPressInteraction = rememberUpdatedState {
             isClickableInScrollableContainer.value || isRootInScrollableContainer()
         }
+
+        val centreOffset = remember { mutableStateOf(Offset.Zero) }
+        val currentKeyPressInteractions = remember { mutableMapOf<Key, PressInteraction.Press>() }
+
         val gesture = Modifier.pointerInput(interactionSource, enabled) {
+            centreOffset.value = size.center.toOffset()
             detectTapAndPress(
                 onPress = { offset ->
                     if (enabled) {
@@ -170,6 +181,9 @@
                 gestureModifiers = gesture,
                 interactionSource = interactionSource,
                 indication = indication,
+                indicationScope = rememberCoroutineScope(),
+                currentKeyPressInteractions = currentKeyPressInteractions,
+                keyClickOffset = centreOffset,
                 enabled = enabled,
                 onClickLabel = onClickLabel,
                 role = role,
@@ -262,7 +276,7 @@
  * @param interactionSource [MutableInteractionSource] that will be used to emit
  * [PressInteraction.Press] when this clickable is pressed. Only the initial (first) press will be
  * recorded and emitted with [MutableInteractionSource].
- * @param indication indication to be shown when modified element is pressed. Be default,
+ * @param indication indication to be shown when modified element is pressed. By default,
  * indication from [LocalIndication] will be used. Pass `null` to show no indication, or
  * current value from [LocalIndication] to show theme default
  * @param enabled Controls the enabled state. When `false`, [onClick], [onLongClick] or
@@ -313,8 +327,12 @@
         val delayPressInteraction = rememberUpdatedState {
             isClickableInScrollableContainer.value || isRootInScrollableContainer()
         }
+        val centreOffset = remember { mutableStateOf(Offset.Zero) }
+        val currentKeyPressInteractions = remember { mutableMapOf<Key, PressInteraction.Press>() }
+
         val gesture =
             Modifier.pointerInput(interactionSource, hasLongClick, hasDoubleClick, enabled) {
+                centreOffset.value = size.center.toOffset()
                 detectTapGestures(
                     onDoubleTap = if (hasDoubleClick && enabled) {
                         { onDoubleClickState.value?.invoke() }
@@ -356,6 +374,9 @@
                 gestureModifiers = gesture,
                 interactionSource = interactionSource,
                 indication = indication,
+                indicationScope = rememberCoroutineScope(),
+                currentKeyPressInteractions = currentKeyPressInteractions,
+                keyClickOffset = centreOffset,
                 enabled = enabled,
                 onClickLabel = onClickLabel,
                 role = role,
@@ -456,8 +477,12 @@
 internal expect fun isComposeRootInScrollableContainer(): () -> Boolean
 
 /**
- * Whether the specified [KeyEvent] represents a user intent to perform a click.
- * (eg. When you press Enter on a focused button, it should perform a click).
+ * Whether the specified [KeyEvent] should trigger a press for a clickable component.
+ */
+internal expect val KeyEvent.isPress: Boolean
+
+/**
+ * Whether the specified [KeyEvent] should trigger a click for a clickable component.
  */
 internal expect val KeyEvent.isClick: Boolean
 
@@ -465,6 +490,9 @@
     gestureModifiers: Modifier,
     interactionSource: MutableInteractionSource,
     indication: Indication?,
+    indicationScope: CoroutineScope,
+    currentKeyPressInteractions: MutableMap<Key, PressInteraction.Press>,
+    keyClickOffset: State<Offset>,
     enabled: Boolean = true,
     onClickLabel: String? = null,
     role: Role? = null,
@@ -488,17 +516,37 @@
             disabled()
         }
     }
-    fun Modifier.detectClickFromKey() = this.onKeyEvent {
-        if (enabled && it.isClick) {
-            onClick()
-            true
-        } else {
-            false
+
+    fun Modifier.detectPressAndClickFromKey() = this.onKeyEvent { keyEvent ->
+        when {
+            enabled && keyEvent.isPress -> {
+                // If the key already exists in the map, keyEvent is a repeat event.
+                // We ignore it as we only want to emit an interaction for the initial key press.
+                if (!currentKeyPressInteractions.containsKey(keyEvent.key)) {
+                    val press = PressInteraction.Press(keyClickOffset.value)
+                    currentKeyPressInteractions[keyEvent.key] = press
+                    indicationScope.launch { interactionSource.emit(press) }
+                    true
+                } else {
+                    false
+                }
+            }
+            enabled && keyEvent.isClick -> {
+                val press = currentKeyPressInteractions.remove(keyEvent.key)
+                if (press != null) {
+                    indicationScope.launch {
+                        interactionSource.emit(PressInteraction.Release(press))
+                    }
+                }
+                onClick()
+                true
+            }
+            else -> false
         }
     }
     return this
         .clickSemantics()
-        .detectClickFromKey()
+        .detectPressAndClickFromKey()
         .indication(interactionSource, indication)
         .hoverable(enabled = enabled, interactionSource = interactionSource)
         .focusableInNonTouchMode(enabled = enabled, interactionSource = interactionSource)
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt
index 8c28355..57cab46 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt
@@ -42,18 +42,20 @@
 ): LazyListItemProvider {
     val latestContent = rememberUpdatedState(content)
     val nearestItemsRangeState = rememberLazyNearestItemsRangeState(
-        firstVisibleItemIndex = remember(state) { { state.firstVisibleItemIndex } },
+        firstVisibleItemIndex = { state.firstVisibleItemIndex },
         slidingWindowSize = { NearestItemsSlidingWindowSize },
         extraItemCount = { NearestItemsExtraItemCount }
     )
 
     return remember(nearestItemsRangeState) {
+        val itemScope = LazyItemScopeImpl()
         val itemProviderState = derivedStateOf {
             val listScope = LazyListScopeImpl().apply(latestContent.value)
             LazyListItemProviderImpl(
                 listScope.intervals,
                 nearestItemsRangeState.value,
                 listScope.headerIndexes,
+                itemScope
             )
         }
         object : LazyListItemProvider,
@@ -69,7 +71,7 @@
     intervals: IntervalList<LazyListIntervalContent>,
     nearestItemsRange: IntRange,
     override val headerIndexes: List<Int>,
-    override val itemScope: LazyItemScopeImpl = LazyItemScopeImpl()
+    override val itemScope: LazyItemScopeImpl
 ) : LazyListItemProvider,
     LazyLayoutItemProvider by LazyLayoutItemProvider(
         intervals = intervals,
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
index 2450479..c0e243f 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
@@ -312,8 +312,8 @@
 
     // Hide the keyboard if made disabled or read-only while focused (b/237308379).
     if (enabled && !readOnly) {
-        // Workaround for b/230536793. We don't get an explicit focus blur event when the text field
-        // is removed from the composition entirely.
+        // TODO(b/230536793) This is a workaround since we don't get an explicit focus blur event
+        //  when the text field is removed from the composition entirely.
         DisposableEffect(state) {
             onDispose {
                 if (state.hasFocus) {
diff --git a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Clickable.desktop.kt b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Clickable.desktop.kt
index da6ac46f..f03d71f 100644
--- a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Clickable.desktop.kt
+++ b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Clickable.desktop.kt
@@ -18,13 +18,20 @@
 
 import androidx.compose.foundation.gestures.forEachGesture
 import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.interaction.PressInteraction
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.rememberUpdatedState
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.composed
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.key.Key
 import androidx.compose.ui.input.key.KeyEvent
+import androidx.compose.ui.input.key.KeyEventType.Companion.KeyDown
 import androidx.compose.ui.input.key.KeyEventType.Companion.KeyUp
 import androidx.compose.ui.input.key.key
 import androidx.compose.ui.input.key.nativeKeyCode
@@ -40,6 +47,8 @@
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.platform.debugInspectorInfo
 import androidx.compose.ui.semantics.Role
+import androidx.compose.ui.unit.center
+import androidx.compose.ui.unit.toOffset
 import androidx.compose.ui.util.fastAll
 import java.awt.event.KeyEvent.VK_ENTER
 import kotlinx.coroutines.coroutineScope
@@ -51,14 +60,18 @@
 internal actual val TapIndicationDelay: Long = 0L
 
 /**
- * Whether the specified [KeyEvent] represents a user intent to perform a click.
- * (eg. When you press Enter on a focused button, it should perform a click).
+ * Whether the specified [KeyEvent] should trigger a press for a clickable component, i.e. whether
+ * it is associated with a press of the enter key.
+ */
+internal actual val KeyEvent.isPress: Boolean
+    get() = type == KeyDown && key.nativeKeyCode == VK_ENTER
+
+/**
+ * Whether the specified [KeyEvent] should trigger a click for a clickable component, i.e. whether
+ * it is associated with a release of the enter key.
  */
 internal actual val KeyEvent.isClick: Boolean
-    get() = type == KeyUp && when (key.nativeKeyCode) {
-        VK_ENTER -> true
-        else -> false
-    }
+    get() = type == KeyUp && key.nativeKeyCode == VK_ENTER
 
 @Immutable @ExperimentalFoundationApi
 class MouseClickScope constructor(
@@ -85,8 +98,11 @@
 ) = composed(
     factory = {
         val onClickState = rememberUpdatedState(onClick)
+        val centreOffset = remember { mutableStateOf(Offset.Zero) }
+        val currentKeyPressInteractions = remember { mutableMapOf<Key, PressInteraction.Press>() }
         val gesture = if (enabled) {
             Modifier.pointerInput(Unit) {
+                centreOffset.value = size.center.toOffset()
                 detectTapWithContext(
                     onTap = { down, _ ->
                         onClickState.value.invoke(
@@ -104,13 +120,16 @@
         Modifier
             .genericClickableWithoutGesture(
                 gestureModifiers = gesture,
+                interactionSource = remember { MutableInteractionSource() },
+                indication = null,
+                indicationScope = rememberCoroutineScope(),
+                keyClickOffset = centreOffset,
                 enabled = enabled,
                 onClickLabel = onClickLabel,
+                currentKeyPressInteractions = currentKeyPressInteractions,
                 role = role,
                 onLongClickLabel = null,
                 onLongClick = null,
-                indication = null,
-                interactionSource = remember { MutableInteractionSource() },
                 onClick = { onClick(EmptyClickContext) }
             )
     },
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tooling/Tooling.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tooling/Tooling.kt
index b099042..c415400 100644
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tooling/Tooling.kt
+++ b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tooling/Tooling.kt
@@ -19,8 +19,10 @@
 
 package androidx.compose.integration.docs.tooling
 
+import android.content.res.Configuration.UI_MODE_NIGHT_YES
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.Box
+import androidx.compose.material.Surface
 import androidx.compose.material.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
@@ -64,6 +66,45 @@
     }
 }
 
+private class ToolingSnippetMultipreviewDefinition {
+    @Preview(
+        name = "small font",
+        group = "font scales",
+        fontScale = 0.5f
+    )
+    @Preview(
+        name = "large font",
+        group = "font scales",
+        fontScale = 1.5f
+    )
+    annotation class FontScalePreviews
+}
+
+private class ToolingSnippetMultipreviewUsage {
+    @FontScalePreviews
+    @Composable
+    fun HelloWorldPreview() {
+        Text("Hello World")
+    }
+}
+
+private class ToolingSnippetMultipreviewCombine {
+    @Preview(
+        name = "dark theme",
+        group = "themes",
+        uiMode = UI_MODE_NIGHT_YES
+    )
+    @FontScalePreviews
+    @DevicePreviews
+    annotation class CompletePreviews
+
+    @CompletePreviews
+    @Composable
+    fun HelloWorldPreview() {
+        MyTheme { Surface { Text("Hello world") } }
+    }
+}
+
 private class ToolingSnippet3 {
     @Preview(showBackground = true, backgroundColor = 0xFF00FF00)
     @Composable
@@ -146,6 +187,12 @@
     }
 }
 
+private annotation class FontScalePreviews
+private annotation class DevicePreviews
+
+@Composable
+private fun MyTheme(content: @Composable () -> Unit) {}
+
 /*
  * Fakes needed for snippets to build:
  */
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTextSelectionColorsScreenshotTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTextSelectionColorsScreenshotTest.kt
index 26fe952..dc04bd0 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTextSelectionColorsScreenshotTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTextSelectionColorsScreenshotTest.kt
@@ -86,7 +86,7 @@
             .isEqualTo(darkPrimary.copy(alpha = 0.375f))
     }
 
-    @FlakyTest(bugId = 191141357)
+    @FlakyTest(bugId = 230475771)
     @Test
     fun text_lightThemeSelectionColors() {
         rule.setContent {
diff --git a/compose/material3/material3/api/current.txt b/compose/material3/material3/api/current.txt
index c8b9406..c2adf73 100644
--- a/compose/material3/material3/api/current.txt
+++ b/compose/material3/material3/api/current.txt
@@ -41,8 +41,6 @@
   }
 
   public final class BadgeKt {
-    method @androidx.compose.runtime.Composable public static void Badge(optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? content);
-    method @androidx.compose.runtime.Composable public static void BadgedBox(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> badge, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
 
   public final class BottomAppBarDefaults {
@@ -328,8 +326,14 @@
   }
 
   public final class IconButtonKt {
+    method @androidx.compose.runtime.Composable public static void FilledIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void FilledIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void FilledTonalIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void FilledTonalIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class IconKt {
diff --git a/compose/material3/material3/api/public_plus_experimental_current.txt b/compose/material3/material3/api/public_plus_experimental_current.txt
index 9717b74..e0bda3a9 100644
--- a/compose/material3/material3/api/public_plus_experimental_current.txt
+++ b/compose/material3/material3/api/public_plus_experimental_current.txt
@@ -61,8 +61,8 @@
   }
 
   public final class BadgeKt {
-    method @androidx.compose.runtime.Composable public static void Badge(optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? content);
-    method @androidx.compose.runtime.Composable public static void BadgedBox(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> badge, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void Badge(optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? content);
+    method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void BadgedBox(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> badge, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
 
   public final class BottomAppBarDefaults {
@@ -466,14 +466,14 @@
   }
 
   public final class IconButtonKt {
-    method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void FilledIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void FilledIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void FilledTonalIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void FilledTonalIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void FilledIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void FilledIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void FilledTonalIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void FilledTonalIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void OutlinedIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public static void OutlinedIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class IconKt {
diff --git a/compose/material3/material3/api/restricted_current.txt b/compose/material3/material3/api/restricted_current.txt
index c8b9406..c2adf73 100644
--- a/compose/material3/material3/api/restricted_current.txt
+++ b/compose/material3/material3/api/restricted_current.txt
@@ -41,8 +41,6 @@
   }
 
   public final class BadgeKt {
-    method @androidx.compose.runtime.Composable public static void Badge(optional androidx.compose.ui.Modifier modifier, optional long containerColor, optional long contentColor, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? content);
-    method @androidx.compose.runtime.Composable public static void BadgedBox(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> badge, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
   }
 
   public final class BottomAppBarDefaults {
@@ -328,8 +326,14 @@
   }
 
   public final class IconButtonKt {
+    method @androidx.compose.runtime.Composable public static void FilledIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void FilledIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void FilledTonalIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void FilledTonalIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedIconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material3.IconButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedIconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.BorderStroke? border, optional androidx.compose.material3.IconToggleButtonColors colors, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class IconKt {
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/AppBarSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/AppBarSamples.kt
index 8cfa713..c9ce766 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/AppBarSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/AppBarSamples.kt
@@ -46,6 +46,7 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.input.nestedscroll.nestedScroll
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.compose.ui.unit.dp
 
 /**
@@ -60,7 +61,13 @@
     Scaffold(
         topBar = {
             SmallTopAppBar(
-                title = { Text("Simple TopAppBar") },
+                title = {
+                    Text(
+                        "Simple TopAppBar",
+                        maxLines = 1,
+                        overflow = TextOverflow.Ellipsis
+                    )
+                },
                 navigationIcon = {
                     IconButton(onClick = { /* doSomething() */ }) {
                         Icon(
@@ -111,7 +118,13 @@
     Scaffold(
         topBar = {
             CenterAlignedTopAppBar(
-                title = { Text("Centered TopAppBar") },
+                title = {
+                    Text(
+                        "Centered TopAppBar",
+                        maxLines = 1,
+                        overflow = TextOverflow.Ellipsis
+                    )
+                },
                 navigationIcon = {
                     IconButton(onClick = { /* doSomething() */ }) {
                         Icon(
@@ -165,7 +178,13 @@
         modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
         topBar = {
             SmallTopAppBar(
-                title = { Text("Small TopAppBar") },
+                title = {
+                    Text(
+                        "Small TopAppBar",
+                        maxLines = 1,
+                        overflow = TextOverflow.Ellipsis
+                    )
+                },
                 navigationIcon = {
                     IconButton(onClick = { /* doSomething() */ }) {
                         Icon(
@@ -225,7 +244,13 @@
         modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
         topBar = {
             SmallTopAppBar(
-                title = { Text("Small TopAppBar") },
+                title = {
+                    Text(
+                        "Small TopAppBar",
+                        maxLines = 1,
+                        overflow = TextOverflow.Ellipsis
+                    )
+                },
                 navigationIcon = {
                     IconButton(onClick = { /* doSomething() */ }) {
                         Icon(
@@ -282,7 +307,13 @@
         modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
         topBar = {
             MediumTopAppBar(
-                title = { Text("Medium TopAppBar") },
+                title = {
+                    Text(
+                        "Medium TopAppBar",
+                        maxLines = 1,
+                        overflow = TextOverflow.Ellipsis
+                    )
+                },
                 navigationIcon = {
                     IconButton(onClick = { /* doSomething() */ }) {
                         Icon(
@@ -339,7 +370,13 @@
         modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
         topBar = {
             LargeTopAppBar(
-                title = { Text("Large TopAppBar") },
+                title = {
+                    Text(
+                        "Large TopAppBar",
+                        maxLines = 1,
+                        overflow = TextOverflow.Ellipsis
+                    )
+                },
                 navigationIcon = {
                     IconButton(onClick = { /* doSomething() */ }) {
                         Icon(
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/BadgeSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/BadgeSamples.kt
index d8b01c2..670f8d7 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/BadgeSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/BadgeSamples.kt
@@ -21,6 +21,7 @@
 import androidx.compose.material.icons.filled.Star
 import androidx.compose.material3.Badge
 import androidx.compose.material3.BadgedBox
+import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.Icon
 import androidx.compose.material3.NavigationBar
 import androidx.compose.material3.NavigationBarItem
@@ -30,6 +31,7 @@
 import androidx.compose.ui.semantics.contentDescription
 import androidx.compose.ui.semantics.semantics
 
+@OptIn(ExperimentalMaterial3Api::class)
 @Sampled
 @Composable
 fun NavigationBarItemWithBadge() {
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/FloatingActionButtonSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/FloatingActionButtonSamples.kt
index de643b8..7af43f0 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/FloatingActionButtonSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/FloatingActionButtonSamples.kt
@@ -108,7 +108,7 @@
             ExtendedFloatingActionButton(
                 onClick = { /* do something */ },
                 expanded = expandedFab,
-                icon = { Icon(Icons.Filled.Add, "Add") },
+                icon = { Icon(Icons.Filled.Add, "Localized Description") },
                 text = { Text(text = "Extended FAB") },
             )
         },
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ScaffoldSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ScaffoldSamples.kt
index 5e1ebd9..d602ea5 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ScaffoldSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ScaffoldSamples.kt
@@ -184,7 +184,7 @@
         override val withDismissAction: Boolean
             get() = false
         override val duration: SnackbarDuration
-            get() = SnackbarDuration.Long
+            get() = SnackbarDuration.Indefinite
     }
 
     val snackbarHostState = remember { SnackbarHostState() }
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt
index 27aed3a..facfde7 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TabSamples.kt
@@ -55,6 +55,7 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.compose.ui.unit.dp
 
 @Sampled
@@ -66,7 +67,7 @@
         TabRow(selectedTabIndex = state) {
             titles.forEachIndexed { index, title ->
                 Tab(
-                    text = { Text(title) },
+                    text = { Text(text = title, maxLines = 2, overflow = TextOverflow.Ellipsis) },
                     selected = state == index,
                     onClick = { state = index }
                 )
@@ -114,7 +115,7 @@
         TabRow(selectedTabIndex = state) {
             titlesAndIcons.forEachIndexed { index, (title, icon) ->
                 Tab(
-                    text = { Text(title) },
+                    text = { Text(text = title, maxLines = 2, overflow = TextOverflow.Ellipsis) },
                     icon = { Icon(icon, contentDescription = null) },
                     selected = state == index,
                     onClick = { state = index }
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/BadgeScreenshotTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/BadgeScreenshotTest.kt
index a70e83b..52f4eb4 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/BadgeScreenshotTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/BadgeScreenshotTest.kt
@@ -51,6 +51,7 @@
     @get:Rule
     val screenshotRule = AndroidXScreenshotTestRule(GOLDEN_MATERIAL3)
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun lightTheme_noContent() {
         composeTestRule.setMaterialContent(lightColorScheme()) {
@@ -69,6 +70,7 @@
         )
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun darkTheme_noContent() {
         composeTestRule.setMaterialContent(darkColorScheme()) {
@@ -87,6 +89,7 @@
         )
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun lightTheme_withContent() {
         composeTestRule.setMaterialContent(lightColorScheme()) {
@@ -105,6 +108,7 @@
         )
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun darkTheme_withContent() {
         composeTestRule.setMaterialContent(darkColorScheme()) {
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/BadgeTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/BadgeTest.kt
index 962da37..93da69a 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/BadgeTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/BadgeTest.kt
@@ -57,6 +57,7 @@
     @get:Rule
     val rule = createComposeRule()
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun badge_noContent_size() {
         rule
@@ -67,6 +68,7 @@
             .assertWidthIsEqualTo(BadgeTokens.Size)
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun badge_shortContent_size() {
         rule
@@ -77,6 +79,7 @@
             .assertWidthIsEqualTo(BadgeTokens.LargeSize)
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun badge_longContent_size() {
         rule
@@ -87,6 +90,7 @@
             .assertWidthIsAtLeast(BadgeTokens.LargeSize)
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun badge_shortContent_customSizeModifier_size() {
         val customWidth = 24.dp
@@ -101,6 +105,7 @@
             .assertWidthIsEqualTo(customWidth)
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
     @Test
     fun badge_noContent_shape() {
@@ -123,6 +128,7 @@
             )
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun badgeBox_noContent_position() {
         rule
@@ -146,6 +152,7 @@
         )
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun badgeBox_shortContent_position() {
         rule
@@ -173,6 +180,7 @@
         )
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun badgeBox_longContent_position() {
         rule
@@ -197,6 +205,7 @@
         )
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun badge_notMergingDescendants_withOwnContentDescription() {
         rule.setMaterialContent(lightColorScheme()) {
@@ -221,6 +230,7 @@
         rule.onNodeWithTag(TestAnchorTag).assertContentDescriptionEquals("inbox")
     }
 
+    @OptIn(ExperimentalMaterial3Api::class)
     @Test
     fun badgeBox_size() {
         rule.setMaterialContentForSizeAssertions {
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt
index 1b1df83b..8fa1e61 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SnackbarHostTest.kt
@@ -134,7 +134,7 @@
         val job2 = scope.launch {
             val result = hostState.showSnackbar(
                 message = "1",
-                actionLabel = "do not press"
+                actionLabel = null
             )
             Truth.assertThat(result).isEqualTo(SnackbarResult.Dismissed)
         }
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TabTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TabTest.kt
index 42039cf..d8ded67 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TabTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TabTest.kt
@@ -19,14 +19,15 @@
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
-import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Favorite
+import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset
 import androidx.compose.material3.samples.LeadingIconTabs
 import androidx.compose.material3.samples.ScrollingTextTabs
 import androidx.compose.material3.samples.TextTabs
 import androidx.compose.material3.tokens.PrimaryNavigationTabTokens
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
@@ -35,6 +36,7 @@
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.platform.InspectableValue
+import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.isDebugInspectorInfoEnabled
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.semantics.Role
@@ -43,6 +45,7 @@
 import androidx.compose.ui.test.assert
 import androidx.compose.ui.test.assertCountEquals
 import androidx.compose.ui.test.assertHasClickAction
+import androidx.compose.ui.test.assertHeightIsAtLeast
 import androidx.compose.ui.test.assertHeightIsEqualTo
 import androidx.compose.ui.test.assertIsDisplayed
 import androidx.compose.ui.test.assertIsEnabled
@@ -57,6 +60,7 @@
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.onParent
 import androidx.compose.ui.test.performClick
+import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.height
 import androidx.compose.ui.unit.width
@@ -838,4 +842,28 @@
             assertThat(clicks).isEqualTo(0)
         }
     }
+
+    @Test
+    fun fontScaleChange_height() {
+        rule
+            .setMaterialContentForSizeAssertions {
+                CompositionLocalProvider(
+                    LocalDensity provides
+                        Density(
+                            density = LocalDensity.current.density,
+                            fontScale = 2.0f
+                        )
+                ) {
+                    Surface {
+                        Tab(
+                            text = { Text("Text") },
+                            icon = { Icon(icon, null) },
+                            selected = true,
+                            onClick = {}
+                        )
+                    }
+                }
+            }
+            .assertHeightIsAtLeast(100.dp)
+    }
 }
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Badge.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Badge.kt
index 8fe2b12b..50ec60e 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Badge.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Badge.kt
@@ -57,6 +57,7 @@
  * @param content the anchor to which this badge will be positioned
  *
  */
+@ExperimentalMaterial3Api
 @Composable
 fun BadgedBox(
     badge: @Composable BoxScope.() -> Unit,
@@ -134,6 +135,7 @@
  * [containerColor] is not a color from the theme.
  * @param content optional content to be rendered inside this badge
  */
+@ExperimentalMaterial3Api
 @Composable
 fun Badge(
     modifier: Modifier = Modifier,
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
index 9ea80f4..dcb813d 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
@@ -56,6 +56,7 @@
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.semantics.clearAndSetSemantics
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 
@@ -305,6 +306,9 @@
  *
  * The other extended floating action button overload is for FABs without an icon.
  *
+ * Default content description for accessibility is extended from the extended fabs icon. For custom
+ * behavior, you can provide your own via [Modifier.semantics].
+ *
  * @sample androidx.compose.material3.samples.ExtendedFloatingActionButtonSample
  * @sample androidx.compose.material3.samples.AnimatedExtendedFloatingActionButtonSample
  *
@@ -369,7 +373,7 @@
                 enter = ExtendedFabExpandAnimation,
                 exit = ExtendedFabCollapseAnimation,
             ) {
-                Row {
+                Row(Modifier.clearAndSetSemantics {}) {
                     Spacer(Modifier.width(ExtendedFabEndIconPadding))
                     text()
                 }
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/IconButton.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/IconButton.kt
index 9f39073..970d9c4 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/IconButton.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/IconButton.kt
@@ -193,7 +193,7 @@
  * button in different states. See [IconButtonDefaults.filledIconButtonColors].
  * @param content the content of this icon button, typically an [Icon]
  */
-@ExperimentalMaterial3Api
+@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun FilledIconButton(
     onClick: () -> Unit,
@@ -254,7 +254,7 @@
  * button in different states. See [IconButtonDefaults.filledIconButtonColors].
  * @param content the content of this icon button, typically an [Icon]
  */
-@ExperimentalMaterial3Api
+@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun FilledTonalIconButton(
     onClick: () -> Unit,
@@ -311,7 +311,7 @@
  * button in different states. See [IconButtonDefaults.filledIconToggleButtonColors].
  * @param content the content of this icon button, typically an [Icon]
  */
-@ExperimentalMaterial3Api
+@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun FilledIconToggleButton(
     checked: Boolean,
@@ -375,7 +375,7 @@
  * button in different states. See [IconButtonDefaults.filledIconToggleButtonColors].
  * @param content the content of this icon button, typically an [Icon]
  */
-@ExperimentalMaterial3Api
+@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun FilledTonalIconToggleButton(
     checked: Boolean,
@@ -441,7 +441,7 @@
  * button in different states. See [IconButtonDefaults.outlinedIconButtonColors].
  * @param content the content of this icon button, typically an [Icon]
  */
-@ExperimentalMaterial3Api
+@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun OutlinedIconButton(
     onClick: () -> Unit,
@@ -502,7 +502,7 @@
  * button in different states. See [IconButtonDefaults.outlinedIconToggleButtonColors].
  * @param content the content of this icon button, typically an [Icon]
  */
-@ExperimentalMaterial3Api
+@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun OutlinedIconToggleButton(
     checked: Boolean,
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SnackbarHost.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SnackbarHost.kt
index 7562d4bf..331c1b6 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SnackbarHost.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SnackbarHost.kt
@@ -100,7 +100,8 @@
         message: String,
         actionLabel: String? = null,
         withDismissAction: Boolean = false,
-        duration: SnackbarDuration = SnackbarDuration.Short
+        duration: SnackbarDuration =
+            if (actionLabel == null) SnackbarDuration.Short else SnackbarDuration.Indefinite
     ): SnackbarResult =
         showSnackbar(SnackbarVisualsImpl(message, actionLabel, withDismissAction, duration))
 
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tab.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tab.kt
index a21019a..105eb59 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tab.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Tab.kt
@@ -308,7 +308,9 @@
         {
             if (text != null) {
                 Box(
-                    Modifier.layoutId("text").padding(horizontal = HorizontalTextPadding)
+                    Modifier
+                        .layoutId("text")
+                        .padding(horizontal = HorizontalTextPadding)
                 ) { text() }
             }
             if (icon != null) {
@@ -330,12 +332,18 @@
 
         val tabWidth = max(textPlaceable?.width ?: 0, iconPlaceable?.width ?: 0)
 
-        val tabHeight = if (textPlaceable != null && iconPlaceable != null) {
+        val specHeight = if (textPlaceable != null && iconPlaceable != null) {
             LargeTabHeight
         } else {
             SmallTabHeight
         }.roundToPx()
 
+        val tabHeight = max(
+            specHeight,
+            (iconPlaceable?.height ?: 0) + (textPlaceable?.height ?: 0) +
+                IconDistanceFromBaseline.roundToPx()
+        )
+
         val firstBaseline = textPlaceable?.get(FirstBaseline)
         val lastBaseline = textPlaceable?.get(LastBaseline)
 
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
index d55c461..8da4791 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
@@ -25,8 +25,8 @@
 import androidx.compose.foundation.horizontalScroll
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.foundation.rememberScrollState
@@ -148,11 +148,19 @@
             val tabMeasurables = subcompose(TabSlots.Tabs, tabs)
             val tabCount = tabMeasurables.size
             val tabWidth = (tabRowWidth / tabCount)
-            val tabPlaceables = tabMeasurables.map {
-                it.measure(constraints.copy(minWidth = tabWidth, maxWidth = tabWidth))
+            val tabRowHeight = tabMeasurables.fold(initial = 0) { max, curr ->
+                maxOf(curr.maxIntrinsicHeight(tabWidth), max)
             }
 
-            val tabRowHeight = tabPlaceables.maxByOrNull { it.height }?.height ?: 0
+            val tabPlaceables = tabMeasurables.map {
+                it.measure(
+                    constraints.copy(
+                        minWidth = tabWidth,
+                        maxWidth = tabWidth,
+                        minHeight = tabRowHeight
+                    )
+                )
+            }
 
             val tabPositions = List(tabCount) { index ->
                 TabPosition(tabWidth.toDp() * index, tabWidth.toDp())
@@ -250,16 +258,19 @@
         ) { constraints ->
             val minTabWidth = ScrollableTabRowMinimumTabWidth.roundToPx()
             val padding = edgePadding.roundToPx()
-            val tabConstraints = constraints.copy(minWidth = minTabWidth)
 
-            val tabPlaceables = subcompose(TabSlots.Tabs, tabs)
+            val tabMeasurables = subcompose(TabSlots.Tabs, tabs)
+
+            val layoutHeight = tabMeasurables.fold(initial = 0) { curr, measurable ->
+                maxOf(curr, measurable.maxIntrinsicHeight(Constraints.Infinity))
+            }
+
+            val tabConstraints = constraints.copy(minWidth = minTabWidth, minHeight = layoutHeight)
+            val tabPlaceables = tabMeasurables
                 .map { it.measure(tabConstraints) }
 
-            var layoutWidth = padding * 2
-            var layoutHeight = 0
-            tabPlaceables.forEach {
-                layoutWidth += it.width
-                layoutHeight = maxOf(layoutHeight, it.height)
+            val layoutWidth = tabPlaceables.fold(initial = padding * 2) { curr, measurable ->
+                curr + measurable.width
             }
 
             // Position the children.
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
index 5972977..122eb3c 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
@@ -28,5 +28,5 @@
      * IMPORTANT: Whenever updating this value, please make sure to also update `versionTable` and
      * `minimumRuntimeVersionInt` in `VersionChecker.kt` of the compiler.
      */
-    const val version: Int = 8100
+    const val version: Int = 8200
 }
diff --git a/compose/test-utils/src/commonMain/kotlin/androidx/compose/testutils/ComposeExecutionControl.kt b/compose/test-utils/src/commonMain/kotlin/androidx/compose/testutils/ComposeExecutionControl.kt
index 03ee4ec..2e04559 100644
--- a/compose/test-utils/src/commonMain/kotlin/androidx/compose/testutils/ComposeExecutionControl.kt
+++ b/compose/test-utils/src/commonMain/kotlin/androidx/compose/testutils/ComposeExecutionControl.kt
@@ -132,7 +132,7 @@
 }
 
 /**
- * Asserts that last recomposition had no some changes.
+ * Asserts that last recomposition had no changes.
  */
 fun ComposeExecutionControl.assertLastRecomposeHadNoChanges() {
     assertLastRecomposeResult(expectingChanges = false)
@@ -167,7 +167,7 @@
 }
 
 /**
- * Performs recomposition and asserts that there were some pending changes.
+ * Performs recomposition and asserts that there were no pending changes.
  *
  * @throws AssertionError if recomposition has pending changes.
  */
diff --git a/compose/ui/ui-text/api/current.txt b/compose/ui/ui-text/api/current.txt
index 9a78ca2..0f4ee9f 100644
--- a/compose/ui/ui-text/api/current.txt
+++ b/compose/ui/ui-text/api/current.txt
@@ -1059,8 +1059,8 @@
 
   public class TextInputService {
     ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
-    method public final void hideSoftwareKeyboard();
-    method public final void showSoftwareKeyboard();
+    method @Deprecated public final void hideSoftwareKeyboard();
+    method @Deprecated public final void showSoftwareKeyboard();
     method public androidx.compose.ui.text.input.TextInputSession startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.ImeOptions imeOptions, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditCommand>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
     method public void stopInput(androidx.compose.ui.text.input.TextInputSession session);
   }
diff --git a/compose/ui/ui-text/api/public_plus_experimental_current.txt b/compose/ui/ui-text/api/public_plus_experimental_current.txt
index 60c4110..e614389c 100644
--- a/compose/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-text/api/public_plus_experimental_current.txt
@@ -1173,8 +1173,8 @@
 
   public class TextInputService {
     ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
-    method public final void hideSoftwareKeyboard();
-    method public final void showSoftwareKeyboard();
+    method @Deprecated public final void hideSoftwareKeyboard();
+    method @Deprecated public final void showSoftwareKeyboard();
     method public androidx.compose.ui.text.input.TextInputSession startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.ImeOptions imeOptions, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditCommand>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
     method public void stopInput(androidx.compose.ui.text.input.TextInputSession session);
   }
diff --git a/compose/ui/ui-text/api/restricted_current.txt b/compose/ui/ui-text/api/restricted_current.txt
index 9a78ca2..0f4ee9f 100644
--- a/compose/ui/ui-text/api/restricted_current.txt
+++ b/compose/ui/ui-text/api/restricted_current.txt
@@ -1059,8 +1059,8 @@
 
   public class TextInputService {
     ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
-    method public final void hideSoftwareKeyboard();
-    method public final void showSoftwareKeyboard();
+    method @Deprecated public final void hideSoftwareKeyboard();
+    method @Deprecated public final void showSoftwareKeyboard();
     method public androidx.compose.ui.text.input.TextInputSession startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.ImeOptions imeOptions, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditCommand>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
     method public void stopInput(androidx.compose.ui.text.input.TextInputSession session);
   }
diff --git a/compose/ui/ui-text/benchmark/lint-baseline.xml b/compose/ui/ui-text/benchmark/lint-baseline.xml
index 59e7642..94985f2 100644
--- a/compose/ui/ui-text/benchmark/lint-baseline.xml
+++ b/compose/ui/ui-text/benchmark/lint-baseline.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha08)" variant="all" version="7.3.0-alpha08">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="SoonBlockedPrivateApi"
-        message="Reflective access to freeTextLayoutCaches will throw an exception when targeting API 32 and above"
+        message="Reflective access to freeTextLayoutCaches will throw an exception when targeting API 33 and above"
         errorLine1="            val freeCaches = Canvas::class.java.getDeclaredMethod(&quot;freeTextLayoutCaches&quot;)"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/compose/ui/ui-text/build.gradle b/compose/ui/ui-text/build.gradle
index 29431bf..2173042 100644
--- a/compose/ui/ui-text/build.gradle
+++ b/compose/ui/ui-text/build.gradle
@@ -45,7 +45,7 @@
 
         implementation(project(":compose:ui:ui-util"))
         implementation(libs.kotlinStdlib)
-        implementation("androidx.core:core:1.5.0")
+        implementation("androidx.core:core:1.7.0")
         implementation('androidx.collection:collection:1.0.0')
 
         testImplementation(project(":internal-testutils-fonts"))
@@ -126,7 +126,7 @@
 
             androidMain.dependencies {
                 api("androidx.annotation:annotation:1.1.0")
-                implementation("androidx.core:core:1.5.0")
+                implementation("androidx.core:core:1.7.0")
                 implementation('androidx.collection:collection:1.0.0')
             }
 
diff --git a/compose/ui/ui-text/lint-baseline.xml b/compose/ui/ui-text/lint-baseline.xml
index af7ab19..84c081a 100644
--- a/compose/ui/ui-text/lint-baseline.xml
+++ b/compose/ui/ui-text/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanInlineOptIn"
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt
index 79cbf37..b41257c 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt
@@ -87,6 +87,11 @@
      * There is no guarantee that the keyboard will be shown. The software keyboard or
      * system service may silently ignore this request.
      */
+    @Deprecated(
+        message = "Use SoftwareKeyboardController.showSoftwareKeyboard or " +
+            "TextInputSession.showSoftwareKeyboard instead.",
+        replaceWith = ReplaceWith("textInputSession.showSoftwareKeyboard()")
+    )
     // TODO(b/183448615) @InternalTextApi
     fun showSoftwareKeyboard() {
         if (_currentInputSession.get() != null) {
@@ -97,6 +102,11 @@
     /**
      * Hide onscreen keyboard.
      */
+    @Deprecated(
+        message = "Use SoftwareKeyboardController.hideSoftwareKeyboard or " +
+            "TextInputSession.hideSoftwareKeyboard instead.",
+        replaceWith = ReplaceWith("textInputSession.hideSoftwareKeyboard()")
+    )
     // TODO(b/183448615) @InternalTextApi
     fun hideSoftwareKeyboard(): Unit = platformTextInputService.hideSoftwareKeyboard()
 }
diff --git a/compose/ui/ui/api/current.txt b/compose/ui/ui/api/current.txt
index 6d14189..c23d869d 100644
--- a/compose/ui/ui/api/current.txt
+++ b/compose/ui/ui/api/current.txt
@@ -1884,6 +1884,7 @@
     method public static androidx.compose.ui.geometry.Rect boundsInParent(androidx.compose.ui.layout.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Rect boundsInRoot(androidx.compose.ui.layout.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Rect boundsInWindow(androidx.compose.ui.layout.LayoutCoordinates);
+    method public static androidx.compose.ui.layout.LayoutCoordinates findRootCoordinates(androidx.compose.ui.layout.LayoutCoordinates);
     method public static long positionInParent(androidx.compose.ui.layout.LayoutCoordinates);
     method public static long positionInRoot(androidx.compose.ui.layout.LayoutCoordinates);
     method public static long positionInWindow(androidx.compose.ui.layout.LayoutCoordinates);
diff --git a/compose/ui/ui/api/public_plus_experimental_current.txt b/compose/ui/ui/api/public_plus_experimental_current.txt
index 0f28225..d9ab742 100644
--- a/compose/ui/ui/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui/api/public_plus_experimental_current.txt
@@ -2030,6 +2030,7 @@
     method public static androidx.compose.ui.geometry.Rect boundsInParent(androidx.compose.ui.layout.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Rect boundsInRoot(androidx.compose.ui.layout.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Rect boundsInWindow(androidx.compose.ui.layout.LayoutCoordinates);
+    method public static androidx.compose.ui.layout.LayoutCoordinates findRootCoordinates(androidx.compose.ui.layout.LayoutCoordinates);
     method public static long positionInParent(androidx.compose.ui.layout.LayoutCoordinates);
     method public static long positionInRoot(androidx.compose.ui.layout.LayoutCoordinates);
     method public static long positionInWindow(androidx.compose.ui.layout.LayoutCoordinates);
diff --git a/compose/ui/ui/api/restricted_current.txt b/compose/ui/ui/api/restricted_current.txt
index 2b300fe..ed2ddc6 100644
--- a/compose/ui/ui/api/restricted_current.txt
+++ b/compose/ui/ui/api/restricted_current.txt
@@ -1884,6 +1884,7 @@
     method public static androidx.compose.ui.geometry.Rect boundsInParent(androidx.compose.ui.layout.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Rect boundsInRoot(androidx.compose.ui.layout.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Rect boundsInWindow(androidx.compose.ui.layout.LayoutCoordinates);
+    method public static androidx.compose.ui.layout.LayoutCoordinates findRootCoordinates(androidx.compose.ui.layout.LayoutCoordinates);
     method public static long positionInParent(androidx.compose.ui.layout.LayoutCoordinates);
     method public static long positionInRoot(androidx.compose.ui.layout.LayoutCoordinates);
     method public static long positionInWindow(androidx.compose.ui.layout.LayoutCoordinates);
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/AndroidPointerInputTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/AndroidPointerInputTest.kt
index 2c1a1c49..3e31665 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/AndroidPointerInputTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/AndroidPointerInputTest.kt
@@ -27,7 +27,9 @@
 import android.view.MotionEvent.ACTION_HOVER_EXIT
 import android.view.MotionEvent.ACTION_HOVER_MOVE
 import android.view.MotionEvent.ACTION_MOVE
+import android.view.MotionEvent.ACTION_POINTER_DOWN
 import android.view.MotionEvent.ACTION_POINTER_INDEX_SHIFT
+import android.view.MotionEvent.ACTION_POINTER_UP
 import android.view.MotionEvent.ACTION_SCROLL
 import android.view.MotionEvent.ACTION_UP
 import android.view.MotionEvent.TOOL_TYPE_FINGER
@@ -63,7 +65,7 @@
 import androidx.compose.ui.graphics.graphicsLayer
 import androidx.compose.ui.layout.Layout
 import androidx.compose.ui.layout.LayoutCoordinates
-import androidx.compose.ui.layout.findRoot
+import androidx.compose.ui.layout.findRootCoordinates
 import androidx.compose.ui.layout.layout
 import androidx.compose.ui.layout.onGloballyPositioned
 import androidx.compose.ui.layout.onPlaced
@@ -220,6 +222,206 @@
         }
     }
 
+    /**
+     * Recreates dispatch of non-system created cancellation [MotionEvent] (that is, developer
+     * created) while system is already handling multiple [MotionEvent]s. Due to the platform not
+     * allowing reentrancy while handling [MotionEvent]s, the cancellation event will be ignored.
+     */
+    @Test
+    fun dispatchTouchEvents_eventCancelledDuringProcessing_doesNotCancel() {
+        // Arrange
+        var topBoxInnerCoordinates: LayoutCoordinates? = null
+        var bottomBoxInnerCoordinates: LayoutCoordinates? = null
+
+        val latch = CountDownLatch(2)
+
+        val pointerEventsLog = mutableListOf<PointerEvent>()
+
+        rule.runOnUiThread {
+            container.setContent {
+                Box(modifier = Modifier.fillMaxSize()) {
+                    // Top Box
+                    Box(modifier = Modifier
+                        .size(50.dp)
+                        .align(AbsoluteAlignment.TopLeft)
+                        .pointerInput(Unit) {
+                            awaitPointerEventScope {
+                                while (true) {
+                                    val event = awaitPointerEvent()
+                                    event.changes.forEach { it.consume() }
+                                    pointerEventsLog += event
+
+                                    // Actual dispatch of non-system created cancellation
+                                    // [MotionEvent] while other [MotionEvent]s are being handled.
+                                    if (event.type == PointerEventType.Move) {
+                                        dispatchTouchEvent(ACTION_CANCEL, topBoxInnerCoordinates!!)
+                                    }
+                                }
+                            }
+                        }
+                        .onGloballyPositioned {
+                            topBoxInnerCoordinates = it
+                            latch.countDown()
+                        }
+                    )
+
+                    // Bottom Box
+                    Box(modifier = Modifier
+                        .size(60.dp)
+                        .align(AbsoluteAlignment.BottomRight)
+                        .pointerInput(Unit) {
+                            awaitPointerEventScope {
+                                while (true) {
+                                    val event = awaitPointerEvent()
+                                    event.changes.forEach { it.consume() }
+                                    pointerEventsLog += event
+                                }
+                            }
+                        }
+                        .onGloballyPositioned {
+                            bottomBoxInnerCoordinates = it
+                            latch.countDown()
+                        }
+                    )
+                }
+            }
+        }
+
+        assertTrue(latch.await(1, TimeUnit.SECONDS))
+
+        rule.runOnUiThread {
+            // Arrange continued
+            val root = topBoxInnerCoordinates!!.findRootCoordinates()
+            val topBoxOffset = root.localPositionOf(topBoxInnerCoordinates!!, Offset.Zero)
+            val bottomBoxOffset = root.localPositionOf(bottomBoxInnerCoordinates!!, Offset.Zero)
+
+            val topBoxFingerPointerPropertiesId = 0
+            val bottomBoxFingerPointerPropertiesId = 1
+
+            val topBoxPointerProperties =
+                PointerProperties(topBoxFingerPointerPropertiesId).also {
+                    it.toolType = MotionEvent.TOOL_TYPE_FINGER
+                }
+            val bottomBoxPointerProperties =
+                PointerProperties(bottomBoxFingerPointerPropertiesId).also {
+                    it.toolType = MotionEvent.TOOL_TYPE_FINGER
+                }
+
+            var eventStartTime = 0
+
+            val downTopBoxEvent = MotionEvent(
+                eventStartTime,
+                action = ACTION_DOWN,
+                numPointers = 1,
+                actionIndex = 0,
+                pointerProperties = arrayOf(topBoxPointerProperties),
+                pointerCoords = arrayOf(PointerCoords(topBoxOffset.x, topBoxOffset.y))
+            )
+
+            eventStartTime += 500
+            val downBottomBoxEvent = MotionEvent(
+                eventStartTime,
+                action = ACTION_POINTER_DOWN,
+                numPointers = 2,
+                actionIndex = 1,
+                pointerProperties = arrayOf(
+                    topBoxPointerProperties,
+                    bottomBoxPointerProperties
+                ),
+                pointerCoords = arrayOf(
+                    PointerCoords(topBoxOffset.x, topBoxOffset.y),
+                    PointerCoords(bottomBoxOffset.x, bottomBoxOffset.y)
+                )
+            )
+
+            eventStartTime += 500
+            val moveTopBoxEvent = MotionEvent(
+                eventStartTime,
+                action = ACTION_MOVE,
+                numPointers = 2,
+                actionIndex = 0,
+                pointerProperties = arrayOf(
+                    topBoxPointerProperties,
+                    bottomBoxPointerProperties
+                ),
+                pointerCoords = arrayOf(
+                    PointerCoords(topBoxOffset.x + 10, topBoxOffset.y),
+                    PointerCoords(bottomBoxOffset.x + 10, bottomBoxOffset.y)
+                )
+            )
+
+            eventStartTime += 500
+            val moveBottomBoxEvent = MotionEvent(
+                eventStartTime,
+                action = ACTION_MOVE,
+                numPointers = 2,
+                actionIndex = 1,
+                pointerProperties = arrayOf(
+                    topBoxPointerProperties,
+                    bottomBoxPointerProperties
+                ),
+                pointerCoords = arrayOf(
+                    PointerCoords(topBoxOffset.x + 10, topBoxOffset.y),
+                    PointerCoords(bottomBoxOffset.x + 10, bottomBoxOffset.y)
+                )
+            )
+
+            eventStartTime += 500
+            val upTopBoxEvent = MotionEvent(
+                eventStartTime,
+                action = ACTION_POINTER_UP,
+                numPointers = 2,
+                actionIndex = 0,
+                pointerProperties = arrayOf(
+                    topBoxPointerProperties,
+                    bottomBoxPointerProperties
+                ),
+                pointerCoords = arrayOf(
+                    PointerCoords(topBoxOffset.x + 10, topBoxOffset.y),
+                    PointerCoords(bottomBoxOffset.x + 10, bottomBoxOffset.y)
+                )
+            )
+
+            eventStartTime += 500
+            val upBottomBoxEvent = MotionEvent(
+                eventStartTime,
+                action = ACTION_UP,
+                numPointers = 1,
+                actionIndex = 0,
+                pointerProperties = arrayOf(bottomBoxPointerProperties),
+                pointerCoords = arrayOf(PointerCoords(bottomBoxOffset.x + 10, bottomBoxOffset.y))
+            )
+
+            // Act
+            val androidComposeView = findAndroidComposeView(container) as AndroidComposeView
+
+            androidComposeView.dispatchTouchEvent(downTopBoxEvent)
+            androidComposeView.dispatchTouchEvent(downBottomBoxEvent)
+            androidComposeView.dispatchTouchEvent(moveTopBoxEvent)
+            androidComposeView.dispatchTouchEvent(moveBottomBoxEvent)
+            androidComposeView.dispatchTouchEvent(upTopBoxEvent)
+            androidComposeView.dispatchTouchEvent(upBottomBoxEvent)
+
+            // Assert
+            assertThat(pointerEventsLog).hasSize(8)
+
+            for (pointerEvent in pointerEventsLog) {
+                assertThat(pointerEvent.internalPointerEvent).isNotNull()
+            }
+
+            assertThat(pointerEventsLog[0].type).isEqualTo(PointerEventType.Press)
+            assertThat(pointerEventsLog[1].type).isEqualTo(PointerEventType.Press)
+            assertThat(pointerEventsLog[2].type).isEqualTo(PointerEventType.Press)
+
+            assertThat(pointerEventsLog[3].type).isEqualTo(PointerEventType.Move)
+            assertThat(pointerEventsLog[4].type).isEqualTo(PointerEventType.Move)
+
+            assertThat(pointerEventsLog[5].type).isEqualTo(PointerEventType.Release)
+            assertThat(pointerEventsLog[6].type).isEqualTo(PointerEventType.Release)
+            assertThat(pointerEventsLog[7].type).isEqualTo(PointerEventType.Release)
+        }
+    }
+
     @Test
     fun dispatchTouchEvent_pointerInputModifier_returnsTrue() {
 
@@ -282,7 +484,10 @@
         var consumedDownPosition: Offset? = null
         rule.runOnUiThread {
             container.setContent {
-                Box(Modifier.fillMaxSize().wrapContentSize(align = AbsoluteAlignment.TopLeft)) {
+                Box(
+                    Modifier
+                        .fillMaxSize()
+                        .wrapContentSize(align = AbsoluteAlignment.TopLeft)) {
                     Layout(
                         {},
                         Modifier
@@ -596,11 +801,13 @@
                     Modifier
                         .pointerInput(Unit) {
                             detectTapGestures { tapLatch.countDown() }
-                        }.then(
+                        }
+                        .then(
                             if (tap2Enabled) Modifier.pointerInput(Unit) {
                                 detectTapGestures { tapLatch2.countDown() }
                             } else Modifier
-                        ).onGloballyPositioned { positionedLatch.countDown() }
+                        )
+                        .onGloballyPositioned { positionedLatch.countDown() }
                 )
             }
         }
@@ -689,7 +896,8 @@
                                         awaitFirstDown()
                                         tapLatch.countDown()
                                     }
-                                }.size(10.toDp())
+                                }
+                                .size(10.toDp())
                         )
                     }
                 }
@@ -828,7 +1036,7 @@
         scrollDelta: Offset = Offset.Zero
     ) {
         rule.runOnUiThread {
-            val root = layoutCoordinates.findRoot()
+            val root = layoutCoordinates.findRootCoordinates()
             val pos = root.localPositionOf(layoutCoordinates, offset)
             val event = MotionEvent(
                 0,
@@ -855,7 +1063,7 @@
         vararg actions: Int
     ) {
         rule.runOnUiThread {
-            val root = layoutCoordinates.findRoot()
+            val root = layoutCoordinates.findRootCoordinates()
             val pos = root.localPositionOf(layoutCoordinates, offset)
             val androidComposeView = findAndroidComposeView(container) as AndroidComposeView
 
@@ -886,7 +1094,7 @@
         offset: Offset = Offset.Zero
     ) {
         rule.runOnUiThread {
-            val root = layoutCoordinates.findRoot()
+            val root = layoutCoordinates.findRootCoordinates()
             val pos = root.localPositionOf(layoutCoordinates, offset)
             val event = MotionEvent(
                 0,
@@ -910,18 +1118,21 @@
         rule.runOnUiThread {
             container.setContent {
                 Box(
-                    Modifier.fillMaxSize().onGloballyPositioned {
-                        layoutCoordinates = it
-                        latch.countDown()
-                    }.pointerInput(Unit) {
-                        awaitPointerEventScope {
-                            while (true) {
-                                val event = awaitPointerEvent()
-                                event.changes[0].consume()
-                                events += event
+                    Modifier
+                        .fillMaxSize()
+                        .onGloballyPositioned {
+                            layoutCoordinates = it
+                            latch.countDown()
+                        }
+                        .pointerInput(Unit) {
+                            awaitPointerEventScope {
+                                while (true) {
+                                    val event = awaitPointerEvent()
+                                    event.changes[0].consume()
+                                    events += event
+                                }
                             }
                         }
-                    }
                 )
             }
         }
@@ -946,7 +1157,8 @@
                         .onGloballyPositioned {
                             layoutCoordinates = it
                             latch.countDown()
-                        }.pointerInput(Unit) {
+                        }
+                        .pointerInput(Unit) {
                             awaitPointerEventScope {
                                 while (true) {
                                     val event = awaitPointerEvent()
@@ -993,7 +1205,8 @@
                         .onGloballyPositioned {
                             layoutCoordinates = it
                             latch.countDown()
-                        }.pointerInput(Unit) {
+                        }
+                        .pointerInput(Unit) {
                             awaitPointerEventScope {
                                 awaitPointerEvent() // enter
                                 assertHoverEvent(awaitPointerEvent()) // move
@@ -1013,7 +1226,8 @@
                             .size(50.dp)
                             .onGloballyPositioned {
                                 layoutCoordinates2 = it
-                            }.pointerInput(Unit) {
+                            }
+                            .pointerInput(Unit) {
                                 awaitPointerEventScope {
                                     enter = awaitPointerEvent()
                                     move = awaitPointerEvent()
@@ -1072,18 +1286,21 @@
         rule.runOnUiThread {
             container.setContent {
                 Box(
-                    Modifier.fillMaxSize().onGloballyPositioned {
-                        layoutCoordinates = it
-                        latch.countDown()
-                    }.pointerInput(Unit) {
-                        awaitPointerEventScope {
-                            while (true) {
-                                val event = awaitPointerEvent()
-                                event.changes[0].consume()
-                                events += event
+                    Modifier
+                        .fillMaxSize()
+                        .onGloballyPositioned {
+                            layoutCoordinates = it
+                            latch.countDown()
+                        }
+                        .pointerInput(Unit) {
+                            awaitPointerEventScope {
+                                while (true) {
+                                    val event = awaitPointerEvent()
+                                    event.changes[0].consume()
+                                    events += event
+                                }
                             }
                         }
-                    }
                 )
             }
         }
@@ -1105,18 +1322,21 @@
         rule.runOnUiThread {
             container.setContent {
                 Box(
-                    Modifier.fillMaxSize().onGloballyPositioned {
-                        layoutCoordinates = it
-                        latch.countDown()
-                    }.pointerInput(Unit) {
-                        awaitPointerEventScope {
-                            while (true) {
-                                val event = awaitPointerEvent()
-                                event.changes[0].consume()
-                                events += event
+                    Modifier
+                        .fillMaxSize()
+                        .onGloballyPositioned {
+                            layoutCoordinates = it
+                            latch.countDown()
+                        }
+                        .pointerInput(Unit) {
+                            awaitPointerEventScope {
+                                while (true) {
+                                    val event = awaitPointerEvent()
+                                    event.changes[0].consume()
+                                    events += event
+                                }
                             }
                         }
-                    }
                 )
             }
         }
@@ -1144,18 +1364,21 @@
         rule.runOnUiThread {
             container.setContent {
                 Box(
-                    Modifier.fillMaxSize().onGloballyPositioned {
-                        layoutCoordinates = it
-                        latch.countDown()
-                    }.pointerInput(Unit) {
-                        awaitPointerEventScope {
-                            while (true) {
-                                val event = awaitPointerEvent()
-                                event.changes[0].consume()
-                                events += event
+                    Modifier
+                        .fillMaxSize()
+                        .onGloballyPositioned {
+                            layoutCoordinates = it
+                            latch.countDown()
+                        }
+                        .pointerInput(Unit) {
+                            awaitPointerEventScope {
+                                while (true) {
+                                    val event = awaitPointerEvent()
+                                    event.changes[0].consume()
+                                    events += event
+                                }
                             }
                         }
-                    }
                 )
             }
         }
@@ -1182,18 +1405,21 @@
         rule.runOnUiThread {
             container.setContent {
                 Box(
-                    Modifier.fillMaxSize().onGloballyPositioned {
-                        layoutCoordinates = it
-                        latch.countDown()
-                    }.pointerInput(Unit) {
-                        awaitPointerEventScope {
-                            while (true) {
-                                val event = awaitPointerEvent()
-                                event.changes[0].consume()
-                                events += event
+                    Modifier
+                        .fillMaxSize()
+                        .onGloballyPositioned {
+                            layoutCoordinates = it
+                            latch.countDown()
+                        }
+                        .pointerInput(Unit) {
+                            awaitPointerEventScope {
+                                while (true) {
+                                    val event = awaitPointerEvent()
+                                    event.changes[0].consume()
+                                    events += event
+                                }
                             }
                         }
-                    }
                 )
             }
         }
@@ -1215,21 +1441,27 @@
         rule.runOnUiThread {
             container.setContent {
                 Box(
-                    Modifier.fillMaxSize().onGloballyPositioned {
-                        outerCoordinates = it
-                        latch.countDown()
-                    }
+                    Modifier
+                        .fillMaxSize()
+                        .onGloballyPositioned {
+                            outerCoordinates = it
+                            latch.countDown()
+                        }
                 ) {
                     Box(
-                        Modifier.align(Alignment.Center).size(50.dp).pointerInput(Unit) {
-                            awaitPointerEventScope {
-                                while (true) {
-                                    val event = awaitPointerEvent()
-                                    event.changes[0].consume()
-                                    eventLog += event
+                        Modifier
+                            .align(Alignment.Center)
+                            .size(50.dp)
+                            .pointerInput(Unit) {
+                                awaitPointerEventScope {
+                                    while (true) {
+                                        val event = awaitPointerEvent()
+                                        event.changes[0].consume()
+                                        eventLog += event
+                                    }
                                 }
                             }
-                        }.onGloballyPositioned { innerCoordinates = it }
+                            .onGloballyPositioned { innerCoordinates = it }
                     )
                 }
             }
@@ -1263,20 +1495,25 @@
             container.setContent {
                 Box(Modifier.fillMaxSize()) {
                     Box(
-                        Modifier.align(AbsoluteAlignment.TopLeft).size(50.dp)
+                        Modifier
+                            .align(AbsoluteAlignment.TopLeft)
+                            .size(50.dp)
                             .pointerInput(Unit) {
                                 awaitPointerEventScope {
                                     while (true) {
                                         awaitPointerEvent()
                                     }
                                 }
-                            }.onGloballyPositioned {
+                            }
+                            .onGloballyPositioned {
                                 missCoordinates = it
                                 latch.countDown()
                             }
                     )
                     Box(
-                        Modifier.align(AbsoluteAlignment.BottomRight).size(50.dp)
+                        Modifier
+                            .align(AbsoluteAlignment.BottomRight)
+                            .size(50.dp)
                             .pointerInput(Unit) {
                                 awaitPointerEventScope {
                                     while (true) {
@@ -1285,7 +1522,8 @@
                                         eventLog += event
                                     }
                                 }
-                            }.onGloballyPositioned { hitCoordinates = it }
+                            }
+                            .onGloballyPositioned { hitCoordinates = it }
                     )
                 }
             }
@@ -1315,7 +1553,11 @@
                         Modifier
                             .align(Alignment.BottomCenter)
                             .size(50.dp)
-                            .graphicsLayer { translationY = 25.dp.roundToPx().toFloat() }
+                            .graphicsLayer {
+                                translationY = 25.dp
+                                    .roundToPx()
+                                    .toFloat()
+                            }
                             .pointerInput(Unit) {
                                 awaitPointerEventScope {
                                     while (true) {
@@ -1324,7 +1566,8 @@
                                         eventLog += event
                                     }
                                 }
-                            }.onGloballyPositioned {
+                            }
+                            .onGloballyPositioned {
                                 innerCoordinates = it
                                 latch.countDown()
                             }
@@ -1357,11 +1600,19 @@
         rule.runOnUiThread {
             container.setContent {
                 Box(Modifier.fillMaxSize()) {
-                    Box(Modifier.align(Alignment.TopCenter).requiredSize(50.dp).clipToBounds()) {
+                    Box(
+                        Modifier
+                            .align(Alignment.TopCenter)
+                            .requiredSize(50.dp)
+                            .clipToBounds()) {
                         Box(
                             Modifier
                                 .requiredSize(50.dp)
-                                .graphicsLayer { translationY = 25.dp.roundToPx().toFloat() }
+                                .graphicsLayer {
+                                    translationY = 25.dp
+                                        .roundToPx()
+                                        .toFloat()
+                                }
                                 .pointerInput(Unit) {
                                     awaitPointerEventScope {
                                         while (true) {
@@ -1370,7 +1621,8 @@
                                             eventLog += event
                                         }
                                     }
-                                }.onGloballyPositioned {
+                                }
+                                .onGloballyPositioned {
                                     innerCoordinates = it
                                     latch.countDown()
                                 }
@@ -1401,7 +1653,8 @@
         val latch = CountDownLatch(1)
         rule.runOnUiThread {
             container.setContent {
-                Box(Modifier.fillMaxSize()
+                Box(Modifier
+                    .fillMaxSize()
                     .pointerInput(Unit) {
                         awaitPointerEventScope {
                             while (true) {
@@ -1410,7 +1663,8 @@
                                 eventLog += event
                             }
                         }
-                    }.onGloballyPositioned {
+                    }
+                    .onGloballyPositioned {
                         innerCoordinates = it
                         latch.countDown()
                     }
@@ -1536,7 +1790,7 @@
         // Exit followed by a different device should send the exit
         dispatchStylusEvents(coords, Offset.Zero, ACTION_HOVER_ENTER)
         rule.runOnUiThread {
-            val root = coords.findRoot()
+            val root = coords.findRootCoordinates()
             val pos = root.localPositionOf(coords, Offset.Zero)
             val androidComposeView = findAndroidComposeView(container) as AndroidComposeView
             val exit = MotionEvent(
@@ -1601,17 +1855,26 @@
         rule.runOnUiThread {
             container.setContent {
                 Column(Modifier.fillMaxSize()) {
-                    Box(Modifier.size(50.dp).pointerInput(Unit) {
-                        awaitPointerEventScope {
-                            while (true) {
-                                awaitPointerEvent()
-                            }
-                        }
-                    })
-                    Box(Modifier.size(50.dp).clipToBounds()) {
-                        Box(Modifier.size(50.dp)
+                    Box(
+                        Modifier
+                            .size(50.dp)
+                            .pointerInput(Unit) {
+                                awaitPointerEventScope {
+                                    while (true) {
+                                        awaitPointerEvent()
+                                    }
+                                }
+                            })
+                    Box(
+                        Modifier
+                            .size(50.dp)
+                            .clipToBounds()) {
+                        Box(Modifier
+                            .size(50.dp)
                             .graphicsLayer {
-                                translationY = -25.dp.roundToPx().toFloat()
+                                translationY = -25.dp
+                                    .roundToPx()
+                                    .toFloat()
                             }
                             .pointerInput(Unit) {
                                 awaitPointerEventScope {
@@ -1621,7 +1884,8 @@
                                         eventLog += event.type
                                     }
                                 }
-                            }.onGloballyPositioned {
+                            }
+                            .onGloballyPositioned {
                                 innerCoordinates = it
                                 latch.countDown()
                             }
@@ -1681,17 +1945,26 @@
         rule.runOnUiThread {
             container.setContent {
                 Column(Modifier.fillMaxSize()) {
-                    Box(Modifier.size(50.dp).pointerInput(Unit) {
-                        awaitPointerEventScope {
-                            while (true) {
-                                awaitPointerEvent()
-                            }
-                        }
-                    })
-                    Box(Modifier.size(20.dp).clipToBounds()) {
-                        Box(Modifier.size(20.dp)
+                    Box(
+                        Modifier
+                            .size(50.dp)
+                            .pointerInput(Unit) {
+                                awaitPointerEventScope {
+                                    while (true) {
+                                        awaitPointerEvent()
+                                    }
+                                }
+                            })
+                    Box(
+                        Modifier
+                            .size(20.dp)
+                            .clipToBounds()) {
+                        Box(Modifier
+                            .size(20.dp)
                             .graphicsLayer {
-                                translationY = -10.dp.roundToPx().toFloat()
+                                translationY = -10.dp
+                                    .roundToPx()
+                                    .toFloat()
                             }
                             .pointerInput(Unit) {
                                 awaitPointerEventScope {
@@ -1701,7 +1974,8 @@
                                         eventLog += event.type
                                     }
                                 }
-                            }.onGloballyPositioned {
+                            }
+                            .onGloballyPositioned {
                                 innerCoordinates = it
                                 latch.countDown()
                             }
@@ -1761,16 +2035,20 @@
         val latch = CountDownLatch(1)
         rule.runOnUiThread {
             container.setContent {
-                Box(Modifier.fillMaxSize()
-                    .pointerInput(Unit) {
-                        awaitPointerEventScope {
-                            while (true) {
-                                awaitPointerEvent()
+                Box(
+                    Modifier
+                        .fillMaxSize()
+                        .pointerInput(Unit) {
+                            awaitPointerEventScope {
+                                while (true) {
+                                    awaitPointerEvent()
+                                }
                             }
                         }
-                    }
                 ) {
-                    Box(Modifier.size(50.dp).align(AbsoluteAlignment.BottomRight)
+                    Box(Modifier
+                        .size(50.dp)
+                        .align(AbsoluteAlignment.BottomRight)
                         .pointerInput(Unit) {
                             awaitPointerEventScope {
                                 while (true) {
@@ -1779,7 +2057,8 @@
                                     eventLog += event
                                 }
                             }
-                        }.onGloballyPositioned {
+                        }
+                        .onGloballyPositioned {
                             innerCoordinates = it
                             latch.countDown()
                         }
@@ -1819,7 +2098,9 @@
         rule.runOnUiThread {
             container.setContent {
                 Box(Modifier.fillMaxSize()) {
-                    Box(Modifier.size(50.dp).align(AbsoluteAlignment.TopLeft)
+                    Box(Modifier
+                        .size(50.dp)
+                        .align(AbsoluteAlignment.TopLeft)
                         .pointerInput(Unit) {
                             awaitPointerEventScope {
                                 while (true) {
@@ -1828,16 +2109,20 @@
                                     eventLog += event
                                 }
                             }
-                        }.onGloballyPositioned {
+                        }
+                        .onGloballyPositioned {
                             hitCoordinates = it
                             latch.countDown()
                         }
                     )
-                    Box(Modifier.size(50.dp).align(AbsoluteAlignment.BottomRight)
-                        .onGloballyPositioned {
-                            missCoordinates = it
-                            latch.countDown()
-                        }
+                    Box(
+                        Modifier
+                            .size(50.dp)
+                            .align(AbsoluteAlignment.BottomRight)
+                            .onGloballyPositioned {
+                                missCoordinates = it
+                                latch.countDown()
+                            }
                     )
                 }
             }
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusTraversal.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusTraversal.kt
index 4891047..f86a03c 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusTraversal.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/focus/FocusTraversal.kt
@@ -35,7 +35,7 @@
 import androidx.compose.ui.focus.FocusStateImpl.Inactive
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.input.key.KeyInputModifier
-import androidx.compose.ui.layout.findRoot
+import androidx.compose.ui.layout.findRootCoordinates
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.unit.LayoutDirection.Ltr
 import androidx.compose.ui.unit.LayoutDirection.Rtl
@@ -184,7 +184,7 @@
  * FocusModifier has not had a layout.
  */
 internal fun FocusModifier.focusRect(): Rect = layoutNodeWrapper?.let {
-    it.findRoot().localBoundingBoxOf(it, clipBounds = false)
+    it.findRootCoordinates().localBoundingBoxOf(it, clipBounds = false)
 } ?: Rect.Zero
 
 /**
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/PointerInputEventProcessor.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/PointerInputEventProcessor.kt
index ede8a2e..b927ded 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/PointerInputEventProcessor.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/PointerInputEventProcessor.kt
@@ -118,8 +118,11 @@
      * new pointers.
      */
     fun processCancel() {
-        pointerInputChangeEventProducer.clear()
-        hitPathTracker.processCancel()
+        if (!isProcessing) {
+            // Processing currently does not support reentrancy.
+            pointerInputChangeEventProducer.clear()
+            hitPathTracker.processCancel()
+        }
     }
 }
 
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutCoordinates.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutCoordinates.kt
index 2a8772f..c41e953 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutCoordinates.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/LayoutCoordinates.kt
@@ -120,13 +120,13 @@
  * The boundaries of this layout inside the root composable.
  */
 fun LayoutCoordinates.boundsInRoot(): Rect =
-    findRoot().localBoundingBoxOf(this)
+    findRootCoordinates().localBoundingBoxOf(this)
 
 /**
  * The boundaries of this layout relative to the window's origin.
  */
 fun LayoutCoordinates.boundsInWindow(): Rect {
-    val root = findRoot()
+    val root = findRootCoordinates()
     val bounds = boundsInRoot()
     val rootWidth = root.size.width.toFloat()
     val rootHeight = root.size.height.toFloat()
@@ -165,10 +165,12 @@
         ?: Rect(0f, 0f, size.width.toFloat(), size.height.toFloat())
 
 /**
- * Returns the [LayoutCoordinates] of the root layout element in the hierarchy. This will have
- * the size of the entire compose UI.
+ * Walks up the [LayoutCoordinates] hierarchy to find the [LayoutCoordinates] whose
+ * [LayoutCoordinates.parentCoordinates] is `null` and returns it. If
+ * [LayoutCoordinates.isAttached], this will have the size of the
+ * [ComposeView][androidx.compose.ui.platform.ComposeView].
  */
-internal fun LayoutCoordinates.findRoot(): LayoutCoordinates {
+fun LayoutCoordinates.findRootCoordinates(): LayoutCoordinates {
     var root = this
     var parent = root.parentLayoutCoordinates
     while (parent != null) {
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNodeWrapper.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNodeWrapper.kt
index 41650e23..39d3be2 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNodeWrapper.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNodeWrapper.kt
@@ -45,7 +45,7 @@
 import androidx.compose.ui.layout.MeasureResult
 import androidx.compose.ui.layout.ParentDataModifier
 import androidx.compose.ui.layout.Placeable
-import androidx.compose.ui.layout.findRoot
+import androidx.compose.ui.layout.findRootCoordinates
 import androidx.compose.ui.layout.positionInRoot
 import androidx.compose.ui.semantics.SemanticsEntity
 import androidx.compose.ui.semantics.SemanticsModifier
@@ -672,7 +672,7 @@
             return Rect.Zero
         }
 
-        val root = findRoot()
+        val root = findRootCoordinates()
 
         val bounds = rectCache
         val padding = calculateMinimumTouchTargetPadding(minimumTouchTargetSize)
@@ -695,7 +695,7 @@
 
     override fun windowToLocal(relativeToWindow: Offset): Offset {
         check(isAttached) { ExpectAttachedLayoutCoordinates }
-        val root = findRoot()
+        val root = findRootCoordinates()
         val positionInRoot = layoutNode.requireOwner()
             .calculateLocalPosition(relativeToWindow) - root.positionInRoot()
         return localPositionOf(root, positionInRoot)
diff --git a/concurrent/concurrent-futures/lint-baseline.xml b/concurrent/concurrent-futures/lint-baseline.xml
index 4a0dcb5..3b1587b 100644
--- a/concurrent/concurrent-futures/lint-baseline.xml
+++ b/concurrent/concurrent-futures/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanSynchronizedMethods"
@@ -7,9 +7,7 @@
         errorLine1="                            @Override"
         errorLine2="                            ^">
         <location
-            file="src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java"
-            line="224"
-            column="29"/>
+            file="src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java"/>
     </issue>
 
     <issue
@@ -18,9 +16,7 @@
         errorLine1="    public final void addListener(Runnable listener, Executor executor) {"
         errorLine2="                                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java"
-            line="652"
-            column="35"/>
+            file="src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java"/>
     </issue>
 
     <issue
@@ -29,9 +25,7 @@
         errorLine1="    public final void addListener(Runnable listener, Executor executor) {"
         errorLine2="                                                     ~~~~~~~~">
         <location
-            file="src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java"
-            line="652"
-            column="54"/>
+            file="src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java"/>
     </issue>
 
     <issue
@@ -40,9 +34,7 @@
         errorLine1="    protected boolean setException(Throwable throwable) {"
         errorLine2="                                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java"
-            line="709"
-            column="36"/>
+            file="src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java"/>
     </issue>
 
     <issue
@@ -51,9 +43,7 @@
         errorLine1="    protected boolean setFuture(ListenableFuture&lt;? extends V> future) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java"
-            line="745"
-            column="33"/>
+            file="src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java"/>
     </issue>
 
 </issues>
diff --git a/contentpager/contentpager/lint-baseline.xml b/contentpager/contentpager/lint-baseline.xml
index 2454363..87af2b4 100644
--- a/contentpager/contentpager/lint-baseline.xml
+++ b/contentpager/contentpager/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="cli" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
diff --git a/coordinatorlayout/coordinatorlayout/lint-baseline.xml b/coordinatorlayout/coordinatorlayout/lint-baseline.xml
index 4d6e46f..eb4748e 100644
--- a/coordinatorlayout/coordinatorlayout/lint-baseline.xml
+++ b/coordinatorlayout/coordinatorlayout/lint-baseline.xml
@@ -1,297 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (7.1.0-beta02)" variant="all" version="7.1.0-beta02">
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 19 (current min is 14): `android.view.MotionEvent#actionToString`"
-        errorLine1="            return &quot;MotionEvent#getAction() == &quot; + MotionEvent.actionToString(mAction);"
-        errorLine2="                                                               ~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnHierarchyChangeListener(OnHierarchyChangeListener onHierarchyChangeListener) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean verifyDrawable(Drawable who) {"
-        errorLine2="                                     ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final WindowInsetsCompat getLastWindowInsets() {"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onInterceptTouchEvent(MotionEvent ev) {"
-        errorLine2="                                         ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onMeasureChild(View child, int parentWidthMeasureSpec, int widthUsed,"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDraw(Canvas c) {"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean drawChild(Canvas canvas, View child, long drawingTime) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean drawChild(Canvas canvas, View child, long drawingTime) {"
-        errorLine2="                                               ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateDefaultLayoutParams() {"
-        errorLine2="              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {"
-        errorLine2="                                       ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {"
-        errorLine2="                                                   ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onStartNestedScroll(View child, View target, int axes, int type) {"
-        errorLine2="                                       ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onStartNestedScroll(View child, View target, int axes, int type) {"
-        errorLine2="                                                   ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes) {"
-        errorLine2="                                       ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes) {"
-        errorLine2="                                                   ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes, int type) {"
-        errorLine2="                                       ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes, int type) {"
-        errorLine2="                                                   ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onStopNestedScroll(View target) {"
-        errorLine2="                                   ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onStopNestedScroll(View target, int type) {"
-        errorLine2="                                   ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedScroll(View target, int dxConsumed, int dyConsumed,"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedScroll(View target, int dxConsumed, int dyConsumed,"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {"
-        errorLine2="                                  ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {"
-        errorLine2="                                                               ~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed, int  type) {"
-        errorLine2="                                  ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed, int  type) {"
-        errorLine2="                                                               ~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) {"
         errorLine2="                                 ~~~~">
         <location
@@ -300,7 +12,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onNestedPreFling(View target, float velocityX, float velocityY) {"
         errorLine2="                                    ~~~~">
         <location
@@ -309,110 +21,11 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Behavior(Context context, AttributeSet attrs) {"
-        errorLine2="                        ~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Behavior(Context context, AttributeSet attrs) {"
-        errorLine2="                                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public LayoutParams(LayoutParams p) {"
-        errorLine2="                            ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public LayoutParams(MarginLayoutParams p) {"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public LayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRestoreInstanceState(Parcelable state) {"
-        errorLine2="                                          ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected Parcelable onSaveInstanceState() {"
-        errorLine2="              ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) {"
         errorLine2="                                                 ~~~~">
         <location
             file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) {"
-        errorLine2="                                                             ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void getDescendantRect(ViewGroup parent, View descendant, Rect out) {"
-        errorLine2="                                         ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void getDescendantRect(ViewGroup parent, View descendant, Rect out) {"
-        errorLine2="                                                           ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void getDescendantRect(ViewGroup parent, View descendant, Rect out) {"
-        errorLine2="                                                                            ~~~~">
-        <location
-            file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"/>
-    </issue>
-
 </issues>
diff --git a/core/core-animation-integration-tests/testapp/src/androidTest/java/androidx/core/animation/ObjectAnimatorTest.java b/core/core-animation-integration-tests/testapp/src/androidTest/java/androidx/core/animation/ObjectAnimatorTest.java
index f85edaa..aed16bd 100644
--- a/core/core-animation-integration-tests/testapp/src/androidTest/java/androidx/core/animation/ObjectAnimatorTest.java
+++ b/core/core-animation-integration-tests/testapp/src/androidTest/java/androidx/core/animation/ObjectAnimatorTest.java
@@ -312,7 +312,7 @@
         String propertyName = "backgroundColor";
         int startColor = Color.RED;
         int endColor = Color.BLUE;
-        Object[] values = {new Integer(startColor), new Integer(endColor)};
+        Object[] values = {startColor, endColor};
         ArgbEvaluator evaluator = ArgbEvaluator.getInstance();
         ObjectAnimator colorAnimator = ObjectAnimator.ofObject(object, propertyName,
                 evaluator, values);
@@ -360,7 +360,7 @@
         String propertyName = "backgroundColor";
         int startColor = Color.RED;
         int endColor = Color.BLUE;
-        Object[] values = {new Integer(startColor), new Integer(endColor)};
+        Object[] values = {startColor, endColor};
         ArgbEvaluator evaluator = ArgbEvaluator.getInstance();
         ObjectAnimator colorAnimator = ObjectAnimator.ofObject(object, propertyName,
                 evaluator, values);
diff --git a/core/core-animation/lint-baseline.xml b/core/core-animation/lint-baseline.xml
index 7ae08c1..bd6b323 100644
--- a/core/core-animation/lint-baseline.xml
+++ b/core/core-animation/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="cli" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="ResourceType"
diff --git a/core/core-appdigest/lint-baseline.xml b/core/core-appdigest/lint-baseline.xml
index e141bfd..0907387 100644
--- a/core/core-appdigest/lint-baseline.xml
+++ b/core/core-appdigest/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
diff --git a/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java b/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java
index 960b604..194bb74 100644
--- a/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java
+++ b/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java
@@ -662,6 +662,7 @@
     @SdkSuppress(minSdkVersion = 29)
     @LargeTest
     @Test
+    @SuppressWarnings("deprecation")
     public void testFixedAllFileChecksumsSingleThread() throws Exception {
         installPackage(TEST_FIXED_APK);
         assertTrue(isAppInstalled(FIXED_PACKAGE_NAME));
@@ -961,6 +962,7 @@
                 trustedInstallers);
     }
 
+    @SuppressWarnings("deprecation")
     private Checksum[] getFileChecksums(@NonNull String packageName,
             @Checksum.Type int required, @NonNull List<Certificate> trustedInstallers)
             throws Exception {
@@ -1194,6 +1196,7 @@
             }
         }
 
+        @SuppressWarnings("deprecation")
         static Certificate getInstallerCertificate(Context context) throws Exception {
             PackageManager pm = context.getPackageManager();
             PackageInfo installerPackageInfo = pm.getPackageInfo(INSTALLER_PACKAGE_NAME,
diff --git a/core/core-google-shortcuts/lint-baseline.xml b/core/core-google-shortcuts/lint-baseline.xml
deleted file mode 100644
index 69e10c9..0000000
--- a/core/core-google-shortcuts/lint-baseline.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 24 (current min is 21): `java.util.Collection#stream`"
-        errorLine1="        assertThat(resolveInfos.stream().anyMatch(resolveInfo ->"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/core/google/shortcuts/TrampolineActivityTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 24 (current min is 21): `java.util.stream.Stream#anyMatch`"
-        errorLine1="        assertThat(resolveInfos.stream().anyMatch(resolveInfo ->"
-        errorLine2="                                         ~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/core/google/shortcuts/TrampolineActivityTest.java"/>
-    </issue>
-
-</issues>
diff --git a/core/core-google-shortcuts/src/androidTest/java/androidx/core/google/shortcuts/TrampolineActivityTest.java b/core/core-google-shortcuts/src/androidTest/java/androidx/core/google/shortcuts/TrampolineActivityTest.java
index 605a5b3..9a9d94c 100644
--- a/core/core-google-shortcuts/src/androidTest/java/androidx/core/google/shortcuts/TrampolineActivityTest.java
+++ b/core/core-google-shortcuts/src/androidTest/java/androidx/core/google/shortcuts/TrampolineActivityTest.java
@@ -124,6 +124,7 @@
         assertThat(scenario.getResult().getResultCode()).isEqualTo(Activity.RESULT_CANCELED);
     }
 
+    @SuppressWarnings("deprecation") // usage of PackageManager.queryIntentActivities
     @Test
     @SmallTest
     public void testManifest_canDiscoverMetadata() {
diff --git a/core/core-ktx/api/1.8.0-beta01.txt b/core/core-ktx/api/1.8.0-beta01.txt
deleted file mode 100644
index 521f26c..0000000
--- a/core/core-ktx/api/1.8.0-beta01.txt
+++ /dev/null
@@ -1,629 +0,0 @@
-// Signature format: 4.0
-package androidx.core.animation {
-
-  public final class AnimatorKt {
-    method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onRepeat);
-    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onPause);
-    method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-  }
-
-}
-
-package androidx.core.content {
-
-  public final class ContentValuesKt {
-    method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
-  }
-
-  public final class ContextKt {
-    method public static inline <reified T> T! getSystemService(android.content.Context);
-    method public static inline void withStyledAttributes(android.content.Context, optional android.util.AttributeSet? set, int[] attrs, optional @AttrRes int defStyleAttr, optional @StyleRes int defStyleRes, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
-    method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
-  }
-
-  public final class SharedPreferencesKt {
-    method public static inline void edit(android.content.SharedPreferences, optional boolean commit, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
-  }
-
-}
-
-package androidx.core.content.res {
-
-  public final class TypedArrayKt {
-    method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
-  }
-
-}
-
-package androidx.core.database {
-
-  public final class CursorKt {
-    method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
-    method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
-    method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
-    method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
-    method public static inline Long? getLongOrNull(android.database.Cursor, int index);
-    method public static inline Short? getShortOrNull(android.database.Cursor, int index);
-    method public static inline String? getStringOrNull(android.database.Cursor, int index);
-  }
-
-}
-
-package androidx.core.database.sqlite {
-
-  public final class SQLiteDatabaseKt {
-    method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, optional boolean exclusive, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
-  }
-
-}
-
-package androidx.core.graphics {
-
-  public final class BitmapKt {
-    method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
-    method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
-    method public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config);
-    method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config, optional boolean hasAlpha, optional android.graphics.ColorSpace colorSpace);
-    method public static inline operator int get(android.graphics.Bitmap, int x, int y);
-    method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, optional boolean filter);
-    method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
-  }
-
-  public final class CanvasKt {
-    method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withScale(android.graphics.Canvas, optional float x, optional float y, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withSkew(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withTranslation(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-  }
-
-  public final class ColorKt {
-    method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
-    method public static inline operator int component1(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
-    method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
-    method public static inline operator int component2(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
-    method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
-    method public static inline operator int component3(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
-    method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
-    method public static inline operator int component4(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
-    method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
-    method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
-    method public static inline int getAlpha(@ColorInt int);
-    method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
-    method public static inline int getBlue(@ColorInt int);
-    method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
-    method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
-    method public static inline int getGreen(@ColorInt int);
-    method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
-    method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
-    method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
-    method public static inline int getRed(@ColorInt int);
-    method @RequiresApi(26) public static inline float getRed(@ColorLong long);
-    method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
-    method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
-    method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
-    method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
-    method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
-    method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
-    method @ColorInt public static inline int toColorInt(String);
-    method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
-  }
-
-  public final class ImageDecoderKt {
-    method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
-    method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
-  }
-
-  public final class MatrixKt {
-    method public static android.graphics.Matrix rotationMatrix(float degrees, optional float px, optional float py);
-    method public static android.graphics.Matrix scaleMatrix(optional float sx, optional float sy);
-    method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
-    method public static android.graphics.Matrix translationMatrix(optional float tx, optional float ty);
-    method public static inline float[] values(android.graphics.Matrix);
-  }
-
-  public final class PaintKt {
-    method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
-  }
-
-  public final class PathKt {
-    method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, optional float error);
-    method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
-  }
-
-  public final class PictureKt {
-    method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-  }
-
-  public final class PointKt {
-    method public static inline operator int component1(android.graphics.Point);
-    method public static inline operator float component1(android.graphics.PointF);
-    method public static inline operator int component2(android.graphics.Point);
-    method public static inline operator float component2(android.graphics.PointF);
-    method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
-    method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
-    method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
-    method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
-    method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
-    method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
-    method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
-    method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
-    method public static inline android.graphics.Point toPoint(android.graphics.PointF);
-    method public static inline android.graphics.PointF toPointF(android.graphics.Point);
-    method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
-    method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
-  }
-
-  public final class PorterDuffKt {
-    method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
-    method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
-  }
-
-  public final class RectKt {
-    method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator int component1(android.graphics.Rect);
-    method public static inline operator float component1(android.graphics.RectF);
-    method public static inline operator int component2(android.graphics.Rect);
-    method public static inline operator float component2(android.graphics.RectF);
-    method public static inline operator int component3(android.graphics.Rect);
-    method public static inline operator float component3(android.graphics.RectF);
-    method public static inline operator int component4(android.graphics.Rect);
-    method public static inline operator float component4(android.graphics.RectF);
-    method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
-    method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
-    method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
-    method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
-    method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
-    method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
-    method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
-    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
-    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
-    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
-    method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
-    method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
-    method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
-    method public static inline android.graphics.Rect toRect(android.graphics.RectF);
-    method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
-    method public static inline android.graphics.Region toRegion(android.graphics.Rect);
-    method public static inline android.graphics.Region toRegion(android.graphics.RectF);
-    method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
-    method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
-  }
-
-  public final class RegionKt {
-    method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
-    method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
-    method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
-    method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
-    method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator android.graphics.Region not(android.graphics.Region);
-    method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
-    method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
-    method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
-  }
-
-  public final class ShaderKt {
-    method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
-  }
-
-}
-
-package androidx.core.graphics.drawable {
-
-  public final class BitmapDrawableKt {
-    method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
-  }
-
-  public final class ColorDrawableKt {
-    method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
-    method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
-  }
-
-  public final class DrawableKt {
-    method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
-    method public static android.graphics.Bitmap? toBitmapOrNull(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
-    method public static void updateBounds(android.graphics.drawable.Drawable, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
-  }
-
-  public final class IconKt {
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
-  }
-
-}
-
-package androidx.core.location {
-
-  public final class LocationKt {
-    method public static inline operator double component1(android.location.Location);
-    method public static inline operator double component2(android.location.Location);
-  }
-
-}
-
-package androidx.core.net {
-
-  public final class UriKt {
-    method public static java.io.File toFile(android.net.Uri);
-    method public static inline android.net.Uri toUri(String);
-    method public static inline android.net.Uri toUri(java.io.File);
-  }
-
-}
-
-package androidx.core.os {
-
-  public final class BundleKt {
-    method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
-    method public static android.os.Bundle bundleOf();
-  }
-
-  public final class HandlerKt {
-    method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-    method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-  }
-
-  @RequiresApi(31) public final class OutcomeReceiverKt {
-    method @RequiresApi(31) public static <R, E extends java.lang.Throwable> android.os.OutcomeReceiver<R,E> asOutcomeReceiver(kotlin.coroutines.Continuation<? super R>);
-  }
-
-  public final class PersistableBundleKt {
-    method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
-    method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
-    method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
-  }
-
-  public final class TraceKt {
-    method @Deprecated public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
-  }
-
-}
-
-package androidx.core.text {
-
-  public final class CharSequenceKt {
-    method public static inline boolean isDigitsOnly(CharSequence);
-    method public static inline int trimmedLength(CharSequence);
-  }
-
-  public final class HtmlKt {
-    method public static inline android.text.Spanned parseAsHtml(String, optional int flags, optional android.text.Html.ImageGetter? imageGetter, optional android.text.Html.TagHandler? tagHandler);
-    method public static inline String toHtml(android.text.Spanned, optional int option);
-  }
-
-  public final class LocaleKt {
-    method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
-  }
-
-  public final class SpannableStringBuilderKt {
-    method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-  }
-
-  public final class SpannableStringKt {
-    method public static inline void clearSpans(android.text.Spannable);
-    method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
-    method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
-    method public static inline android.text.Spannable toSpannable(CharSequence);
-  }
-
-  public final class SpannedStringKt {
-    method public static inline <reified T> T![]! getSpans(android.text.Spanned, optional int start, optional int end);
-    method public static inline android.text.Spanned toSpanned(CharSequence);
-  }
-
-  public final class StringKt {
-    method public static inline String htmlEncode(String);
-  }
-
-}
-
-package androidx.core.transition {
-
-  public final class TransitionKt {
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onPause);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-  }
-
-}
-
-package androidx.core.util {
-
-  public final class AndroidXConsumerKt {
-    method public static <T> androidx.core.util.Consumer<T> asAndroidXConsumer(kotlin.coroutines.Continuation<? super T>);
-  }
-
-  public final class AtomicFileKt {
-    method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
-    method @RequiresApi(17) public static String readText(android.util.AtomicFile, optional java.nio.charset.Charset charset);
-    method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
-    method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
-    method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, optional java.nio.charset.Charset charset);
-  }
-
-  @RequiresApi(24) public final class ConsumerKt {
-    method @RequiresApi(24) public static <T> java.util.function.Consumer<T> asConsumer(kotlin.coroutines.Continuation<? super T>);
-  }
-
-  public final class HalfKt {
-    method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
-    method @RequiresApi(26) public static inline android.util.Half toHalf(float);
-    method @RequiresApi(26) public static inline android.util.Half toHalf(double);
-    method @RequiresApi(26) public static inline android.util.Half toHalf(String);
-  }
-
-  public final class LongSparseArrayKt {
-    method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
-    method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
-    method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
-    method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
-    method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
-    method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
-    method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
-    method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
-    method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
-    method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
-    method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
-  }
-
-  public final class LruCacheKt {
-    method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
-  }
-
-  public final class PairKt {
-    method public static inline operator <F, S> F! component1(androidx.core.util.Pair<F,S>);
-    method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
-    method public static inline operator <F, S> S! component2(androidx.core.util.Pair<F,S>);
-    method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
-    method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
-    method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
-    method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
-    method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
-  }
-
-  public final class RangeKt {
-    method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
-    method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
-    method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
-    method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
-    method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
-    method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
-  }
-
-  public final class RunnableKt {
-    method public static Runnable asRunnable(kotlin.coroutines.Continuation<? super kotlin.Unit>);
-  }
-
-  public final class SizeKt {
-    method @RequiresApi(21) public static inline operator int component1(android.util.Size);
-    method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
-    method public static inline operator float component1(androidx.core.util.SizeFCompat);
-    method @RequiresApi(21) public static inline operator int component2(android.util.Size);
-    method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
-    method public static inline operator float component2(androidx.core.util.SizeFCompat);
-  }
-
-  public final class SparseArrayKt {
-    method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
-    method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
-    method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
-    method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
-    method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
-    method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
-    method public static inline <T> int getSize(android.util.SparseArray<T>);
-    method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
-    method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
-    method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
-    method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
-    method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
-    method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
-    method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
-    method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
-  }
-
-  public final class SparseBooleanArrayKt {
-    method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
-    method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
-    method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
-    method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
-    method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
-    method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
-    method public static inline int getSize(android.util.SparseBooleanArray);
-    method public static inline boolean isEmpty(android.util.SparseBooleanArray);
-    method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
-    method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
-    method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
-    method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
-    method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
-    method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
-    method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
-  }
-
-  public final class SparseIntArrayKt {
-    method public static inline operator boolean contains(android.util.SparseIntArray, int key);
-    method public static inline boolean containsKey(android.util.SparseIntArray, int key);
-    method public static inline boolean containsValue(android.util.SparseIntArray, int value);
-    method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
-    method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
-    method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
-    method public static inline int getSize(android.util.SparseIntArray);
-    method public static inline boolean isEmpty(android.util.SparseIntArray);
-    method public static inline boolean isNotEmpty(android.util.SparseIntArray);
-    method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
-    method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
-    method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
-    method public static boolean remove(android.util.SparseIntArray, int key, int value);
-    method public static inline operator void set(android.util.SparseIntArray, int key, int value);
-    method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
-  }
-
-  public final class SparseLongArrayKt {
-    method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
-    method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
-    method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
-    method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
-    method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
-    method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
-    method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
-    method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
-    method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
-    method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
-    method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
-    method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
-    method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
-    method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
-    method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
-  }
-
-}
-
-package androidx.core.view {
-
-  public final class MenuKt {
-    method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
-    method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
-    method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
-    method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
-    method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
-    method public static inline int getSize(android.view.Menu);
-    method public static inline boolean isEmpty(android.view.Menu);
-    method public static inline boolean isNotEmpty(android.view.Menu);
-    method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
-    method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
-  }
-
-  public final class ViewGroupKt {
-    method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
-    method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
-    method public static operator android.view.View get(android.view.ViewGroup, int index);
-    method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
-    method public static kotlin.sequences.Sequence<android.view.View> getDescendants(android.view.ViewGroup);
-    method public static inline kotlin.ranges.IntRange getIndices(android.view.ViewGroup);
-    method public static inline int getSize(android.view.ViewGroup);
-    method public static inline boolean isEmpty(android.view.ViewGroup);
-    method public static inline boolean isNotEmpty(android.view.ViewGroup);
-    method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
-    method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
-    method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
-    method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
-    method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
-    method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
-  }
-
-  public final class ViewKt {
-    method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static android.graphics.Bitmap drawToBitmap(android.view.View, optional android.graphics.Bitmap.Config config);
-    method public static kotlin.sequences.Sequence<android.view.View> getAllViews(android.view.View);
-    method public static kotlin.sequences.Sequence<android.view.ViewParent> getAncestors(android.view.View);
-    method public static inline int getMarginBottom(android.view.View);
-    method public static inline int getMarginEnd(android.view.View);
-    method public static inline int getMarginLeft(android.view.View);
-    method public static inline int getMarginRight(android.view.View);
-    method public static inline int getMarginStart(android.view.View);
-    method public static inline int getMarginTop(android.view.View);
-    method public static inline boolean isGone(android.view.View);
-    method public static inline boolean isInvisible(android.view.View);
-    method public static inline boolean isVisible(android.view.View);
-    method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-    method @RequiresApi(16) public static inline Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-    method public static inline void setGone(android.view.View, boolean);
-    method public static inline void setInvisible(android.view.View, boolean);
-    method public static inline void setPadding(android.view.View, @Px int size);
-    method public static inline void setVisible(android.view.View, boolean);
-    method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
-    method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
-    method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
-    method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
-  }
-
-}
-
-package androidx.core.widget {
-
-  public final class TextViewKt {
-    method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> onTextChanged, optional kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged);
-    method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
-    method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
-    method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
-  }
-
-}
-
diff --git a/core/core-ktx/api/public_plus_experimental_1.8.0-beta01.txt b/core/core-ktx/api/public_plus_experimental_1.8.0-beta01.txt
deleted file mode 100644
index 521f26c..0000000
--- a/core/core-ktx/api/public_plus_experimental_1.8.0-beta01.txt
+++ /dev/null
@@ -1,629 +0,0 @@
-// Signature format: 4.0
-package androidx.core.animation {
-
-  public final class AnimatorKt {
-    method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onRepeat);
-    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onPause);
-    method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-  }
-
-}
-
-package androidx.core.content {
-
-  public final class ContentValuesKt {
-    method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
-  }
-
-  public final class ContextKt {
-    method public static inline <reified T> T! getSystemService(android.content.Context);
-    method public static inline void withStyledAttributes(android.content.Context, optional android.util.AttributeSet? set, int[] attrs, optional @AttrRes int defStyleAttr, optional @StyleRes int defStyleRes, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
-    method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
-  }
-
-  public final class SharedPreferencesKt {
-    method public static inline void edit(android.content.SharedPreferences, optional boolean commit, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
-  }
-
-}
-
-package androidx.core.content.res {
-
-  public final class TypedArrayKt {
-    method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
-  }
-
-}
-
-package androidx.core.database {
-
-  public final class CursorKt {
-    method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
-    method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
-    method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
-    method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
-    method public static inline Long? getLongOrNull(android.database.Cursor, int index);
-    method public static inline Short? getShortOrNull(android.database.Cursor, int index);
-    method public static inline String? getStringOrNull(android.database.Cursor, int index);
-  }
-
-}
-
-package androidx.core.database.sqlite {
-
-  public final class SQLiteDatabaseKt {
-    method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, optional boolean exclusive, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
-  }
-
-}
-
-package androidx.core.graphics {
-
-  public final class BitmapKt {
-    method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
-    method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
-    method public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config);
-    method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config, optional boolean hasAlpha, optional android.graphics.ColorSpace colorSpace);
-    method public static inline operator int get(android.graphics.Bitmap, int x, int y);
-    method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, optional boolean filter);
-    method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
-  }
-
-  public final class CanvasKt {
-    method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withScale(android.graphics.Canvas, optional float x, optional float y, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withSkew(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withTranslation(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-  }
-
-  public final class ColorKt {
-    method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
-    method public static inline operator int component1(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
-    method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
-    method public static inline operator int component2(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
-    method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
-    method public static inline operator int component3(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
-    method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
-    method public static inline operator int component4(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
-    method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
-    method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
-    method public static inline int getAlpha(@ColorInt int);
-    method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
-    method public static inline int getBlue(@ColorInt int);
-    method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
-    method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
-    method public static inline int getGreen(@ColorInt int);
-    method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
-    method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
-    method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
-    method public static inline int getRed(@ColorInt int);
-    method @RequiresApi(26) public static inline float getRed(@ColorLong long);
-    method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
-    method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
-    method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
-    method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
-    method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
-    method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
-    method @ColorInt public static inline int toColorInt(String);
-    method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
-  }
-
-  public final class ImageDecoderKt {
-    method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
-    method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
-  }
-
-  public final class MatrixKt {
-    method public static android.graphics.Matrix rotationMatrix(float degrees, optional float px, optional float py);
-    method public static android.graphics.Matrix scaleMatrix(optional float sx, optional float sy);
-    method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
-    method public static android.graphics.Matrix translationMatrix(optional float tx, optional float ty);
-    method public static inline float[] values(android.graphics.Matrix);
-  }
-
-  public final class PaintKt {
-    method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
-  }
-
-  public final class PathKt {
-    method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, optional float error);
-    method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
-  }
-
-  public final class PictureKt {
-    method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-  }
-
-  public final class PointKt {
-    method public static inline operator int component1(android.graphics.Point);
-    method public static inline operator float component1(android.graphics.PointF);
-    method public static inline operator int component2(android.graphics.Point);
-    method public static inline operator float component2(android.graphics.PointF);
-    method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
-    method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
-    method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
-    method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
-    method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
-    method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
-    method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
-    method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
-    method public static inline android.graphics.Point toPoint(android.graphics.PointF);
-    method public static inline android.graphics.PointF toPointF(android.graphics.Point);
-    method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
-    method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
-  }
-
-  public final class PorterDuffKt {
-    method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
-    method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
-  }
-
-  public final class RectKt {
-    method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator int component1(android.graphics.Rect);
-    method public static inline operator float component1(android.graphics.RectF);
-    method public static inline operator int component2(android.graphics.Rect);
-    method public static inline operator float component2(android.graphics.RectF);
-    method public static inline operator int component3(android.graphics.Rect);
-    method public static inline operator float component3(android.graphics.RectF);
-    method public static inline operator int component4(android.graphics.Rect);
-    method public static inline operator float component4(android.graphics.RectF);
-    method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
-    method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
-    method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
-    method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
-    method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
-    method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
-    method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
-    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
-    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
-    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
-    method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
-    method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
-    method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
-    method public static inline android.graphics.Rect toRect(android.graphics.RectF);
-    method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
-    method public static inline android.graphics.Region toRegion(android.graphics.Rect);
-    method public static inline android.graphics.Region toRegion(android.graphics.RectF);
-    method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
-    method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
-  }
-
-  public final class RegionKt {
-    method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
-    method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
-    method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
-    method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
-    method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator android.graphics.Region not(android.graphics.Region);
-    method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
-    method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
-    method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
-  }
-
-  public final class ShaderKt {
-    method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
-  }
-
-}
-
-package androidx.core.graphics.drawable {
-
-  public final class BitmapDrawableKt {
-    method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
-  }
-
-  public final class ColorDrawableKt {
-    method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
-    method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
-  }
-
-  public final class DrawableKt {
-    method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
-    method public static android.graphics.Bitmap? toBitmapOrNull(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
-    method public static void updateBounds(android.graphics.drawable.Drawable, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
-  }
-
-  public final class IconKt {
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
-  }
-
-}
-
-package androidx.core.location {
-
-  public final class LocationKt {
-    method public static inline operator double component1(android.location.Location);
-    method public static inline operator double component2(android.location.Location);
-  }
-
-}
-
-package androidx.core.net {
-
-  public final class UriKt {
-    method public static java.io.File toFile(android.net.Uri);
-    method public static inline android.net.Uri toUri(String);
-    method public static inline android.net.Uri toUri(java.io.File);
-  }
-
-}
-
-package androidx.core.os {
-
-  public final class BundleKt {
-    method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
-    method public static android.os.Bundle bundleOf();
-  }
-
-  public final class HandlerKt {
-    method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-    method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-  }
-
-  @RequiresApi(31) public final class OutcomeReceiverKt {
-    method @RequiresApi(31) public static <R, E extends java.lang.Throwable> android.os.OutcomeReceiver<R,E> asOutcomeReceiver(kotlin.coroutines.Continuation<? super R>);
-  }
-
-  public final class PersistableBundleKt {
-    method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
-    method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
-    method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
-  }
-
-  public final class TraceKt {
-    method @Deprecated public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
-  }
-
-}
-
-package androidx.core.text {
-
-  public final class CharSequenceKt {
-    method public static inline boolean isDigitsOnly(CharSequence);
-    method public static inline int trimmedLength(CharSequence);
-  }
-
-  public final class HtmlKt {
-    method public static inline android.text.Spanned parseAsHtml(String, optional int flags, optional android.text.Html.ImageGetter? imageGetter, optional android.text.Html.TagHandler? tagHandler);
-    method public static inline String toHtml(android.text.Spanned, optional int option);
-  }
-
-  public final class LocaleKt {
-    method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
-  }
-
-  public final class SpannableStringBuilderKt {
-    method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-  }
-
-  public final class SpannableStringKt {
-    method public static inline void clearSpans(android.text.Spannable);
-    method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
-    method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
-    method public static inline android.text.Spannable toSpannable(CharSequence);
-  }
-
-  public final class SpannedStringKt {
-    method public static inline <reified T> T![]! getSpans(android.text.Spanned, optional int start, optional int end);
-    method public static inline android.text.Spanned toSpanned(CharSequence);
-  }
-
-  public final class StringKt {
-    method public static inline String htmlEncode(String);
-  }
-
-}
-
-package androidx.core.transition {
-
-  public final class TransitionKt {
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onPause);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-  }
-
-}
-
-package androidx.core.util {
-
-  public final class AndroidXConsumerKt {
-    method public static <T> androidx.core.util.Consumer<T> asAndroidXConsumer(kotlin.coroutines.Continuation<? super T>);
-  }
-
-  public final class AtomicFileKt {
-    method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
-    method @RequiresApi(17) public static String readText(android.util.AtomicFile, optional java.nio.charset.Charset charset);
-    method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
-    method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
-    method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, optional java.nio.charset.Charset charset);
-  }
-
-  @RequiresApi(24) public final class ConsumerKt {
-    method @RequiresApi(24) public static <T> java.util.function.Consumer<T> asConsumer(kotlin.coroutines.Continuation<? super T>);
-  }
-
-  public final class HalfKt {
-    method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
-    method @RequiresApi(26) public static inline android.util.Half toHalf(float);
-    method @RequiresApi(26) public static inline android.util.Half toHalf(double);
-    method @RequiresApi(26) public static inline android.util.Half toHalf(String);
-  }
-
-  public final class LongSparseArrayKt {
-    method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
-    method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
-    method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
-    method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
-    method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
-    method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
-    method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
-    method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
-    method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
-    method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
-    method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
-  }
-
-  public final class LruCacheKt {
-    method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
-  }
-
-  public final class PairKt {
-    method public static inline operator <F, S> F! component1(androidx.core.util.Pair<F,S>);
-    method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
-    method public static inline operator <F, S> S! component2(androidx.core.util.Pair<F,S>);
-    method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
-    method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
-    method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
-    method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
-    method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
-  }
-
-  public final class RangeKt {
-    method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
-    method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
-    method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
-    method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
-    method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
-    method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
-  }
-
-  public final class RunnableKt {
-    method public static Runnable asRunnable(kotlin.coroutines.Continuation<? super kotlin.Unit>);
-  }
-
-  public final class SizeKt {
-    method @RequiresApi(21) public static inline operator int component1(android.util.Size);
-    method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
-    method public static inline operator float component1(androidx.core.util.SizeFCompat);
-    method @RequiresApi(21) public static inline operator int component2(android.util.Size);
-    method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
-    method public static inline operator float component2(androidx.core.util.SizeFCompat);
-  }
-
-  public final class SparseArrayKt {
-    method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
-    method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
-    method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
-    method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
-    method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
-    method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
-    method public static inline <T> int getSize(android.util.SparseArray<T>);
-    method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
-    method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
-    method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
-    method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
-    method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
-    method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
-    method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
-    method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
-  }
-
-  public final class SparseBooleanArrayKt {
-    method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
-    method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
-    method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
-    method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
-    method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
-    method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
-    method public static inline int getSize(android.util.SparseBooleanArray);
-    method public static inline boolean isEmpty(android.util.SparseBooleanArray);
-    method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
-    method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
-    method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
-    method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
-    method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
-    method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
-    method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
-  }
-
-  public final class SparseIntArrayKt {
-    method public static inline operator boolean contains(android.util.SparseIntArray, int key);
-    method public static inline boolean containsKey(android.util.SparseIntArray, int key);
-    method public static inline boolean containsValue(android.util.SparseIntArray, int value);
-    method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
-    method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
-    method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
-    method public static inline int getSize(android.util.SparseIntArray);
-    method public static inline boolean isEmpty(android.util.SparseIntArray);
-    method public static inline boolean isNotEmpty(android.util.SparseIntArray);
-    method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
-    method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
-    method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
-    method public static boolean remove(android.util.SparseIntArray, int key, int value);
-    method public static inline operator void set(android.util.SparseIntArray, int key, int value);
-    method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
-  }
-
-  public final class SparseLongArrayKt {
-    method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
-    method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
-    method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
-    method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
-    method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
-    method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
-    method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
-    method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
-    method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
-    method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
-    method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
-    method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
-    method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
-    method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
-    method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
-  }
-
-}
-
-package androidx.core.view {
-
-  public final class MenuKt {
-    method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
-    method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
-    method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
-    method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
-    method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
-    method public static inline int getSize(android.view.Menu);
-    method public static inline boolean isEmpty(android.view.Menu);
-    method public static inline boolean isNotEmpty(android.view.Menu);
-    method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
-    method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
-  }
-
-  public final class ViewGroupKt {
-    method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
-    method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
-    method public static operator android.view.View get(android.view.ViewGroup, int index);
-    method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
-    method public static kotlin.sequences.Sequence<android.view.View> getDescendants(android.view.ViewGroup);
-    method public static inline kotlin.ranges.IntRange getIndices(android.view.ViewGroup);
-    method public static inline int getSize(android.view.ViewGroup);
-    method public static inline boolean isEmpty(android.view.ViewGroup);
-    method public static inline boolean isNotEmpty(android.view.ViewGroup);
-    method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
-    method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
-    method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
-    method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
-    method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
-    method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
-  }
-
-  public final class ViewKt {
-    method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static android.graphics.Bitmap drawToBitmap(android.view.View, optional android.graphics.Bitmap.Config config);
-    method public static kotlin.sequences.Sequence<android.view.View> getAllViews(android.view.View);
-    method public static kotlin.sequences.Sequence<android.view.ViewParent> getAncestors(android.view.View);
-    method public static inline int getMarginBottom(android.view.View);
-    method public static inline int getMarginEnd(android.view.View);
-    method public static inline int getMarginLeft(android.view.View);
-    method public static inline int getMarginRight(android.view.View);
-    method public static inline int getMarginStart(android.view.View);
-    method public static inline int getMarginTop(android.view.View);
-    method public static inline boolean isGone(android.view.View);
-    method public static inline boolean isInvisible(android.view.View);
-    method public static inline boolean isVisible(android.view.View);
-    method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-    method @RequiresApi(16) public static inline Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-    method public static inline void setGone(android.view.View, boolean);
-    method public static inline void setInvisible(android.view.View, boolean);
-    method public static inline void setPadding(android.view.View, @Px int size);
-    method public static inline void setVisible(android.view.View, boolean);
-    method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
-    method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
-    method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
-    method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
-  }
-
-}
-
-package androidx.core.widget {
-
-  public final class TextViewKt {
-    method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> onTextChanged, optional kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged);
-    method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
-    method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
-    method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
-  }
-
-}
-
diff --git a/core/core-ktx/api/restricted_1.8.0-beta01.txt b/core/core-ktx/api/restricted_1.8.0-beta01.txt
deleted file mode 100644
index 521f26c..0000000
--- a/core/core-ktx/api/restricted_1.8.0-beta01.txt
+++ /dev/null
@@ -1,629 +0,0 @@
-// Signature format: 4.0
-package androidx.core.animation {
-
-  public final class AnimatorKt {
-    method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onRepeat);
-    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onPause);
-    method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-    method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
-  }
-
-}
-
-package androidx.core.content {
-
-  public final class ContentValuesKt {
-    method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
-  }
-
-  public final class ContextKt {
-    method public static inline <reified T> T! getSystemService(android.content.Context);
-    method public static inline void withStyledAttributes(android.content.Context, optional android.util.AttributeSet? set, int[] attrs, optional @AttrRes int defStyleAttr, optional @StyleRes int defStyleRes, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
-    method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
-  }
-
-  public final class SharedPreferencesKt {
-    method public static inline void edit(android.content.SharedPreferences, optional boolean commit, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
-  }
-
-}
-
-package androidx.core.content.res {
-
-  public final class TypedArrayKt {
-    method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
-    method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
-  }
-
-}
-
-package androidx.core.database {
-
-  public final class CursorKt {
-    method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
-    method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
-    method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
-    method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
-    method public static inline Long? getLongOrNull(android.database.Cursor, int index);
-    method public static inline Short? getShortOrNull(android.database.Cursor, int index);
-    method public static inline String? getStringOrNull(android.database.Cursor, int index);
-  }
-
-}
-
-package androidx.core.database.sqlite {
-
-  public final class SQLiteDatabaseKt {
-    method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, optional boolean exclusive, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
-  }
-
-}
-
-package androidx.core.graphics {
-
-  public final class BitmapKt {
-    method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
-    method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
-    method public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config);
-    method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config, optional boolean hasAlpha, optional android.graphics.ColorSpace colorSpace);
-    method public static inline operator int get(android.graphics.Bitmap, int x, int y);
-    method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, optional boolean filter);
-    method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
-  }
-
-  public final class CanvasKt {
-    method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withScale(android.graphics.Canvas, optional float x, optional float y, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withSkew(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-    method public static inline void withTranslation(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-  }
-
-  public final class ColorKt {
-    method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
-    method public static inline operator int component1(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
-    method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
-    method public static inline operator int component2(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
-    method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
-    method public static inline operator int component3(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
-    method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
-    method public static inline operator int component4(@ColorInt int);
-    method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
-    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
-    method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
-    method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
-    method public static inline int getAlpha(@ColorInt int);
-    method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
-    method public static inline int getBlue(@ColorInt int);
-    method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
-    method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
-    method public static inline int getGreen(@ColorInt int);
-    method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
-    method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
-    method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
-    method public static inline int getRed(@ColorInt int);
-    method @RequiresApi(26) public static inline float getRed(@ColorLong long);
-    method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
-    method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
-    method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
-    method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
-    method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
-    method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
-    method @ColorInt public static inline int toColorInt(String);
-    method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
-  }
-
-  public final class ImageDecoderKt {
-    method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
-    method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
-  }
-
-  public final class MatrixKt {
-    method public static android.graphics.Matrix rotationMatrix(float degrees, optional float px, optional float py);
-    method public static android.graphics.Matrix scaleMatrix(optional float sx, optional float sy);
-    method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
-    method public static android.graphics.Matrix translationMatrix(optional float tx, optional float ty);
-    method public static inline float[] values(android.graphics.Matrix);
-  }
-
-  public final class PaintKt {
-    method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
-  }
-
-  public final class PathKt {
-    method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, optional float error);
-    method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
-    method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
-  }
-
-  public final class PictureKt {
-    method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
-  }
-
-  public final class PointKt {
-    method public static inline operator int component1(android.graphics.Point);
-    method public static inline operator float component1(android.graphics.PointF);
-    method public static inline operator int component2(android.graphics.Point);
-    method public static inline operator float component2(android.graphics.PointF);
-    method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
-    method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
-    method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
-    method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
-    method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
-    method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
-    method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
-    method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
-    method public static inline android.graphics.Point toPoint(android.graphics.PointF);
-    method public static inline android.graphics.PointF toPointF(android.graphics.Point);
-    method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
-    method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
-  }
-
-  public final class PorterDuffKt {
-    method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
-    method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
-  }
-
-  public final class RectKt {
-    method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator int component1(android.graphics.Rect);
-    method public static inline operator float component1(android.graphics.RectF);
-    method public static inline operator int component2(android.graphics.Rect);
-    method public static inline operator float component2(android.graphics.RectF);
-    method public static inline operator int component3(android.graphics.Rect);
-    method public static inline operator float component3(android.graphics.RectF);
-    method public static inline operator int component4(android.graphics.Rect);
-    method public static inline operator float component4(android.graphics.RectF);
-    method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
-    method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
-    method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
-    method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
-    method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
-    method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
-    method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
-    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
-    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
-    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
-    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
-    method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
-    method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
-    method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
-    method public static inline android.graphics.Rect toRect(android.graphics.RectF);
-    method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
-    method public static inline android.graphics.Region toRegion(android.graphics.Rect);
-    method public static inline android.graphics.Region toRegion(android.graphics.RectF);
-    method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
-    method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
-  }
-
-  public final class RegionKt {
-    method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
-    method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
-    method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
-    method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
-    method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator android.graphics.Region not(android.graphics.Region);
-    method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
-    method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
-    method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
-    method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
-    method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
-  }
-
-  public final class ShaderKt {
-    method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
-  }
-
-}
-
-package androidx.core.graphics.drawable {
-
-  public final class BitmapDrawableKt {
-    method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
-  }
-
-  public final class ColorDrawableKt {
-    method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
-    method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
-  }
-
-  public final class DrawableKt {
-    method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
-    method public static android.graphics.Bitmap? toBitmapOrNull(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
-    method public static void updateBounds(android.graphics.drawable.Drawable, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
-  }
-
-  public final class IconKt {
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
-    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
-  }
-
-}
-
-package androidx.core.location {
-
-  public final class LocationKt {
-    method public static inline operator double component1(android.location.Location);
-    method public static inline operator double component2(android.location.Location);
-  }
-
-}
-
-package androidx.core.net {
-
-  public final class UriKt {
-    method public static java.io.File toFile(android.net.Uri);
-    method public static inline android.net.Uri toUri(String);
-    method public static inline android.net.Uri toUri(java.io.File);
-  }
-
-}
-
-package androidx.core.os {
-
-  public final class BundleKt {
-    method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
-    method public static android.os.Bundle bundleOf();
-  }
-
-  public final class HandlerKt {
-    method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-    method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-  }
-
-  @RequiresApi(31) public final class OutcomeReceiverKt {
-    method @RequiresApi(31) public static <R, E extends java.lang.Throwable> android.os.OutcomeReceiver<R,E> asOutcomeReceiver(kotlin.coroutines.Continuation<? super R>);
-  }
-
-  public final class PersistableBundleKt {
-    method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
-    method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
-    method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
-  }
-
-  public final class TraceKt {
-    method @Deprecated public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
-  }
-
-}
-
-package androidx.core.text {
-
-  public final class CharSequenceKt {
-    method public static inline boolean isDigitsOnly(CharSequence);
-    method public static inline int trimmedLength(CharSequence);
-  }
-
-  public final class HtmlKt {
-    method public static inline android.text.Spanned parseAsHtml(String, optional int flags, optional android.text.Html.ImageGetter? imageGetter, optional android.text.Html.TagHandler? tagHandler);
-    method public static inline String toHtml(android.text.Spanned, optional int option);
-  }
-
-  public final class LocaleKt {
-    method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
-  }
-
-  public final class SpannableStringBuilderKt {
-    method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-    method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
-  }
-
-  public final class SpannableStringKt {
-    method public static inline void clearSpans(android.text.Spannable);
-    method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
-    method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
-    method public static inline android.text.Spannable toSpannable(CharSequence);
-  }
-
-  public final class SpannedStringKt {
-    method public static inline <reified T> T![]! getSpans(android.text.Spanned, optional int start, optional int end);
-    method public static inline android.text.Spanned toSpanned(CharSequence);
-  }
-
-  public final class StringKt {
-    method public static inline String htmlEncode(String);
-  }
-
-}
-
-package androidx.core.transition {
-
-  public final class TransitionKt {
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onPause);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
-  }
-
-}
-
-package androidx.core.util {
-
-  public final class AndroidXConsumerKt {
-    method public static <T> androidx.core.util.Consumer<T> asAndroidXConsumer(kotlin.coroutines.Continuation<? super T>);
-  }
-
-  public final class AtomicFileKt {
-    method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
-    method @RequiresApi(17) public static String readText(android.util.AtomicFile, optional java.nio.charset.Charset charset);
-    method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
-    method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
-    method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, optional java.nio.charset.Charset charset);
-  }
-
-  @RequiresApi(24) public final class ConsumerKt {
-    method @RequiresApi(24) public static <T> java.util.function.Consumer<T> asConsumer(kotlin.coroutines.Continuation<? super T>);
-  }
-
-  public final class HalfKt {
-    method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
-    method @RequiresApi(26) public static inline android.util.Half toHalf(float);
-    method @RequiresApi(26) public static inline android.util.Half toHalf(double);
-    method @RequiresApi(26) public static inline android.util.Half toHalf(String);
-  }
-
-  public final class LongSparseArrayKt {
-    method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
-    method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
-    method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
-    method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
-    method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
-    method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
-    method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
-    method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
-    method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
-    method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
-    method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
-    method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
-  }
-
-  public final class LruCacheKt {
-    method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
-  }
-
-  public final class PairKt {
-    method public static inline operator <F, S> F! component1(androidx.core.util.Pair<F,S>);
-    method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
-    method public static inline operator <F, S> S! component2(androidx.core.util.Pair<F,S>);
-    method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
-    method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
-    method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
-    method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
-    method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
-  }
-
-  public final class RangeKt {
-    method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
-    method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
-    method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
-    method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
-    method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
-    method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
-  }
-
-  public final class RunnableKt {
-    method public static Runnable asRunnable(kotlin.coroutines.Continuation<? super kotlin.Unit>);
-  }
-
-  public final class SizeKt {
-    method @RequiresApi(21) public static inline operator int component1(android.util.Size);
-    method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
-    method public static inline operator float component1(androidx.core.util.SizeFCompat);
-    method @RequiresApi(21) public static inline operator int component2(android.util.Size);
-    method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
-    method public static inline operator float component2(androidx.core.util.SizeFCompat);
-  }
-
-  public final class SparseArrayKt {
-    method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
-    method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
-    method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
-    method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
-    method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
-    method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
-    method public static inline <T> int getSize(android.util.SparseArray<T>);
-    method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
-    method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
-    method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
-    method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
-    method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
-    method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
-    method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
-    method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
-  }
-
-  public final class SparseBooleanArrayKt {
-    method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
-    method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
-    method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
-    method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
-    method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
-    method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
-    method public static inline int getSize(android.util.SparseBooleanArray);
-    method public static inline boolean isEmpty(android.util.SparseBooleanArray);
-    method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
-    method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
-    method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
-    method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
-    method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
-    method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
-    method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
-  }
-
-  public final class SparseIntArrayKt {
-    method public static inline operator boolean contains(android.util.SparseIntArray, int key);
-    method public static inline boolean containsKey(android.util.SparseIntArray, int key);
-    method public static inline boolean containsValue(android.util.SparseIntArray, int value);
-    method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
-    method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
-    method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
-    method public static inline int getSize(android.util.SparseIntArray);
-    method public static inline boolean isEmpty(android.util.SparseIntArray);
-    method public static inline boolean isNotEmpty(android.util.SparseIntArray);
-    method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
-    method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
-    method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
-    method public static boolean remove(android.util.SparseIntArray, int key, int value);
-    method public static inline operator void set(android.util.SparseIntArray, int key, int value);
-    method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
-  }
-
-  public final class SparseLongArrayKt {
-    method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
-    method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
-    method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
-    method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
-    method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
-    method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
-    method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
-    method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
-    method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
-    method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
-    method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
-    method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
-    method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
-    method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
-    method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
-  }
-
-}
-
-package androidx.core.view {
-
-  public final class MenuKt {
-    method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
-    method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
-    method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
-    method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
-    method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
-    method public static inline int getSize(android.view.Menu);
-    method public static inline boolean isEmpty(android.view.Menu);
-    method public static inline boolean isNotEmpty(android.view.Menu);
-    method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
-    method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
-  }
-
-  public final class ViewGroupKt {
-    method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
-    method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
-    method public static operator android.view.View get(android.view.ViewGroup, int index);
-    method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
-    method public static kotlin.sequences.Sequence<android.view.View> getDescendants(android.view.ViewGroup);
-    method public static inline kotlin.ranges.IntRange getIndices(android.view.ViewGroup);
-    method public static inline int getSize(android.view.ViewGroup);
-    method public static inline boolean isEmpty(android.view.ViewGroup);
-    method public static inline boolean isNotEmpty(android.view.ViewGroup);
-    method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
-    method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
-    method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
-    method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
-    method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
-    method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
-  }
-
-  public final class ViewKt {
-    method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
-    method public static android.graphics.Bitmap drawToBitmap(android.view.View, optional android.graphics.Bitmap.Config config);
-    method public static kotlin.sequences.Sequence<android.view.View> getAllViews(android.view.View);
-    method public static kotlin.sequences.Sequence<android.view.ViewParent> getAncestors(android.view.View);
-    method public static inline int getMarginBottom(android.view.View);
-    method public static inline int getMarginEnd(android.view.View);
-    method public static inline int getMarginLeft(android.view.View);
-    method public static inline int getMarginRight(android.view.View);
-    method public static inline int getMarginStart(android.view.View);
-    method public static inline int getMarginTop(android.view.View);
-    method public static inline boolean isGone(android.view.View);
-    method public static inline boolean isInvisible(android.view.View);
-    method public static inline boolean isVisible(android.view.View);
-    method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-    method @RequiresApi(16) public static inline Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
-    method public static inline void setGone(android.view.View, boolean);
-    method public static inline void setInvisible(android.view.View, boolean);
-    method public static inline void setPadding(android.view.View, @Px int size);
-    method public static inline void setVisible(android.view.View, boolean);
-    method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
-    method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
-    method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
-    method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
-  }
-
-}
-
-package androidx.core.widget {
-
-  public final class TextViewKt {
-    method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> onTextChanged, optional kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged);
-    method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
-    method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
-    method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
-  }
-
-}
-
diff --git a/core/core-ktx/lint-baseline.xml b/core/core-ktx/lint-baseline.xml
deleted file mode 100644
index 6364b8a..0000000
--- a/core/core-ktx/lint-baseline.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 30 (current min is 14): `android.util.SparseArray#contains`"
-        errorLine1="        assertFalse(1 in array)"
-        errorLine2="                      ~~">
-        <location
-            file="src/androidTest/java/androidx/core/util/SparseArrayTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 30 (current min is 14): `android.util.SparseArray#contains`"
-        errorLine1="        assertTrue(1 in array)"
-        errorLine2="                     ~~">
-        <location
-            file="src/androidTest/java/androidx/core/util/SparseArrayTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 30 (current min is 14): `android.util.SparseArray#contains`"
-        errorLine1="        assertFalse(2 in array)"
-        errorLine2="                      ~~">
-        <location
-            file="src/androidTest/java/androidx/core/util/SparseArrayTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 30 (current min is 14): `android.util.SparseArray#contains`"
-        errorLine1="        assertTrue(2 in array)"
-        errorLine2="                     ~~">
-        <location
-            file="src/androidTest/java/androidx/core/util/SparseArrayTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 17 (current min is 14): `updatePaddingRelative`"
-        errorLine1="        view.updatePaddingRelative(start = 10, end = 20)"
-        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/core/view/ViewTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 17 (current min is 14): `android.view.View#getPaddingStart`"
-        errorLine1="        assertEquals(10, view.paddingStart)"
-        errorLine2="                              ~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/core/view/ViewTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 17 (current min is 14): `android.view.View#getPaddingEnd`"
-        errorLine1="        assertEquals(20, view.paddingEnd)"
-        errorLine2="                              ~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/core/view/ViewTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 17 (current min is 14): `android.view.View#setPaddingRelative`"
-        errorLine1="        view.setPaddingRelative(10, 20, 30, 40)"
-        errorLine2="             ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/core/view/ViewTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 17 (current min is 14): `updatePaddingRelative`"
-        errorLine1="        view.updatePaddingRelative()"
-        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/core/view/ViewTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 17 (current min is 14): `android.view.View#getPaddingStart`"
-        errorLine1="        assertEquals(10, view.paddingStart)"
-        errorLine2="                              ~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/core/view/ViewTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 17 (current min is 14): `android.view.View#getPaddingEnd`"
-        errorLine1="        assertEquals(30, view.paddingEnd)"
-        errorLine2="                              ~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/core/view/ViewTest.kt"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.core.animation.AnimatorKt is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="    addPauseListener(listener)"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/animation/Animator.kt"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 17; however, the containing class androidx.core.view.ViewKt is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="    @Px start: Int = paddingStart,"
-        errorLine2="                     ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/view/View.kt"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 17; however, the containing class androidx.core.view.ViewKt is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="    @Px end: Int = paddingEnd,"
-        errorLine2="                   ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/view/View.kt"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 17; however, the containing class androidx.core.view.ViewKt is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="    setPaddingRelative(start, top, end, bottom)"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/view/View.kt"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class androidx.core.view.ViewKt is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="    postOnAnimationDelayed(runnable, delayInMillis)"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/view/View.kt"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 17; however, the containing class androidx.core.view.ViewGroupKt is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="    @Px start: Int = marginStart,"
-        errorLine2="                     ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/view/ViewGroup.kt"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 17; however, the containing class androidx.core.view.ViewGroupKt is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="    @Px end: Int = marginEnd,"
-        errorLine2="                   ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/view/ViewGroup.kt"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 17; however, the containing class androidx.core.view.ViewGroupKt is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="    marginStart = start"
-        errorLine2="    ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/view/ViewGroup.kt"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 17; however, the containing class androidx.core.view.ViewGroupKt is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="    marginEnd = end"
-        errorLine2="    ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/view/ViewGroup.kt"/>
-    </issue>
-
-</issues>
diff --git a/core/core-role/src/main/java/androidx/core/role/RoleManagerCompat.java b/core/core-role/src/main/java/androidx/core/role/RoleManagerCompat.java
index d739e9b..122e0ab 100644
--- a/core/core-role/src/main/java/androidx/core/role/RoleManagerCompat.java
+++ b/core/core-role/src/main/java/androidx/core/role/RoleManagerCompat.java
@@ -72,7 +72,9 @@
     /**
      * The name of the dialer role.
      * <p>
-     * To qualify for this role, an application needs to handle the intent to dial:
+     * To qualify for this role, an application needs to handle the intent to dial, and implement
+     * an {@link android.telecom.InCallService} if the application targets
+     * {@link android.os.Build.VERSION_CODES.TIRAMISU} or higher:
      * <pre class="prettyprint">{@code
      * <activity>
      *     <intent-filter>
@@ -85,6 +87,16 @@
      *         <data android:scheme="tel" />
      *     </intent-filter>
      * </activity>
+     * <service android:permission="android.permission.BIND_INCALL_SERVICE">
+     *     <meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
+     *     <meta-data
+     *         android:name="android.telecom.IN_CALL_SERVICE_CAR_MODE_UI"
+     *         android:value="false" />
+     *     <intent-filter>
+     *         <action android:name="android.telecom.InCallService" />
+     *     </intent-filter>
+     * </service>
+     *
      * }</pre>
      * The application will be able to handle those intents by default, and gain access to phone,
      * contacts, SMS, microphone and camera.
diff --git a/core/core/api/1.8.0-beta01.txt b/core/core/api/1.8.0-beta01.txt
deleted file mode 100644
index ac52137..0000000
--- a/core/core/api/1.8.0-beta01.txt
+++ /dev/null
@@ -1,3760 +0,0 @@
-// Signature format: 4.0
-package androidx.core.accessibilityservice {
-
-  public final class AccessibilityServiceInfoCompat {
-    method public static String capabilityToString(int);
-    method public static String feedbackTypeToString(int);
-    method public static String? flagToString(int);
-    method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
-    method public static String? loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
-    field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
-    field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
-    field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
-    field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
-    field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
-    field public static final int FEEDBACK_BRAILLE = 32; // 0x20
-    field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
-    field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
-    field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
-    field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
-    field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
-  }
-
-}
-
-package androidx.core.app {
-
-  public class ActivityCompat extends androidx.core.content.ContextCompat {
-    ctor protected ActivityCompat();
-    method public static void finishAffinity(android.app.Activity);
-    method public static void finishAfterTransition(android.app.Activity);
-    method public static android.net.Uri? getReferrer(android.app.Activity);
-    method @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
-    method public static boolean isLaunchedFromBubble(android.app.Activity);
-    method public static void postponeEnterTransition(android.app.Activity);
-    method public static void recreate(android.app.Activity);
-    method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
-    method public static void requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
-    method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
-    method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
-    method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
-    method public static void setLocusContext(android.app.Activity, androidx.core.content.LocusIdCompat?, android.os.Bundle?);
-    method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
-    method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, String);
-    method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle?);
-    method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
-    method public static void startPostponedEnterTransition(android.app.Activity);
-  }
-
-  public static interface ActivityCompat.OnRequestPermissionsResultCallback {
-    method public void onRequestPermissionsResult(int, String![], int[]);
-  }
-
-  public static interface ActivityCompat.PermissionCompatDelegate {
-    method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
-    method public boolean requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
-  }
-
-  public final class ActivityManagerCompat {
-    method public static boolean isLowRamDevice(android.app.ActivityManager);
-  }
-
-  public class ActivityOptionsCompat {
-    ctor protected ActivityOptionsCompat();
-    method public android.graphics.Rect? getLaunchBounds();
-    method public static androidx.core.app.ActivityOptionsCompat makeBasic();
-    method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
-    method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
-    method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
-    method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
-    method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View!,java.lang.String!>!...);
-    method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
-    method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
-    method public void requestUsageTimeReport(android.app.PendingIntent);
-    method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
-    method public android.os.Bundle? toBundle();
-    method public void update(androidx.core.app.ActivityOptionsCompat);
-    field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
-    field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
-  }
-
-  public final class AlarmManagerCompat {
-    method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
-    method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
-    method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
-    method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
-  }
-
-  @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
-    ctor public AppComponentFactory();
-    method public final android.app.Activity instantiateActivity(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.app.Application instantiateApplication(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.content.ContentProvider instantiateProvider(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.content.BroadcastReceiver instantiateReceiver(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.app.Service instantiateService(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-  }
-
-  public class AppLaunchChecker {
-    ctor @Deprecated public AppLaunchChecker();
-    method public static boolean hasStartedFromLauncher(android.content.Context);
-    method public static void onActivityCreate(android.app.Activity);
-  }
-
-  public final class AppOpsManagerCompat {
-    method public static int checkOrNoteProxyOp(android.content.Context, int, String, String);
-    method public static int noteOp(android.content.Context, String, int, String);
-    method public static int noteOpNoThrow(android.content.Context, String, int, String);
-    method public static int noteProxyOp(android.content.Context, String, String);
-    method public static int noteProxyOpNoThrow(android.content.Context, String, String);
-    method public static String? permissionToOp(String);
-    field public static final int MODE_ALLOWED = 0; // 0x0
-    field public static final int MODE_DEFAULT = 3; // 0x3
-    field public static final int MODE_ERRORED = 2; // 0x2
-    field public static final int MODE_IGNORED = 1; // 0x1
-  }
-
-  public final class BundleCompat {
-    method public static android.os.IBinder? getBinder(android.os.Bundle, String?);
-    method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
-  }
-
-  public class DialogCompat {
-    method public static android.view.View requireViewById(android.app.Dialog, int);
-  }
-
-  public class FrameMetricsAggregator {
-    ctor public FrameMetricsAggregator();
-    ctor public FrameMetricsAggregator(int);
-    method public void add(android.app.Activity);
-    method public android.util.SparseIntArray![]? getMetrics();
-    method public android.util.SparseIntArray![]? remove(android.app.Activity);
-    method public android.util.SparseIntArray![]? reset();
-    method public android.util.SparseIntArray![]? stop();
-    field public static final int ANIMATION_DURATION = 256; // 0x100
-    field public static final int ANIMATION_INDEX = 8; // 0x8
-    field public static final int COMMAND_DURATION = 32; // 0x20
-    field public static final int COMMAND_INDEX = 5; // 0x5
-    field public static final int DELAY_DURATION = 128; // 0x80
-    field public static final int DELAY_INDEX = 7; // 0x7
-    field public static final int DRAW_DURATION = 8; // 0x8
-    field public static final int DRAW_INDEX = 3; // 0x3
-    field public static final int EVERY_DURATION = 511; // 0x1ff
-    field public static final int INPUT_DURATION = 2; // 0x2
-    field public static final int INPUT_INDEX = 1; // 0x1
-    field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
-    field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
-    field public static final int SWAP_DURATION = 64; // 0x40
-    field public static final int SWAP_INDEX = 6; // 0x6
-    field public static final int SYNC_DURATION = 16; // 0x10
-    field public static final int SYNC_INDEX = 4; // 0x4
-    field public static final int TOTAL_DURATION = 1; // 0x1
-    field public static final int TOTAL_INDEX = 0; // 0x0
-  }
-
-  @Deprecated public abstract class JobIntentService extends android.app.Service {
-    ctor @Deprecated public JobIntentService();
-    method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
-    method @Deprecated public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
-    method @Deprecated public boolean isStopped();
-    method @Deprecated public android.os.IBinder! onBind(android.content.Intent);
-    method @Deprecated protected abstract void onHandleWork(android.content.Intent);
-    method @Deprecated public boolean onStopCurrentWork();
-    method @Deprecated public void setInterruptIfStopped(boolean);
-  }
-
-  public final class MultiWindowModeChangedInfo {
-    ctor public MultiWindowModeChangedInfo(boolean);
-    ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
-    method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
-    method public boolean isInMultiWindowMode();
-  }
-
-  public final class NavUtils {
-    method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
-    method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
-    method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
-    method public static String? getParentActivityName(android.app.Activity);
-    method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
-    method public static void navigateUpFromSameTask(android.app.Activity);
-    method public static void navigateUpTo(android.app.Activity, android.content.Intent);
-    method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
-    field public static final String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
-  }
-
-  public class NotificationChannelCompat {
-    method public boolean canBubble();
-    method public boolean canBypassDnd();
-    method public boolean canShowBadge();
-    method public android.media.AudioAttributes? getAudioAttributes();
-    method public String? getConversationId();
-    method public String? getDescription();
-    method public String? getGroup();
-    method public String getId();
-    method public int getImportance();
-    method public int getLightColor();
-    method public int getLockscreenVisibility();
-    method public CharSequence? getName();
-    method public String? getParentChannelId();
-    method public android.net.Uri? getSound();
-    method public long[]? getVibrationPattern();
-    method public boolean isImportantConversation();
-    method public boolean shouldShowLights();
-    method public boolean shouldVibrate();
-    method public androidx.core.app.NotificationChannelCompat.Builder toBuilder();
-    field public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
-  }
-
-  public static class NotificationChannelCompat.Builder {
-    ctor public NotificationChannelCompat.Builder(String, int);
-    method public androidx.core.app.NotificationChannelCompat build();
-    method public androidx.core.app.NotificationChannelCompat.Builder setConversationId(String, String);
-    method public androidx.core.app.NotificationChannelCompat.Builder setDescription(String?);
-    method public androidx.core.app.NotificationChannelCompat.Builder setGroup(String?);
-    method public androidx.core.app.NotificationChannelCompat.Builder setImportance(int);
-    method public androidx.core.app.NotificationChannelCompat.Builder setLightColor(int);
-    method public androidx.core.app.NotificationChannelCompat.Builder setLightsEnabled(boolean);
-    method public androidx.core.app.NotificationChannelCompat.Builder setName(CharSequence?);
-    method public androidx.core.app.NotificationChannelCompat.Builder setShowBadge(boolean);
-    method public androidx.core.app.NotificationChannelCompat.Builder setSound(android.net.Uri?, android.media.AudioAttributes?);
-    method public androidx.core.app.NotificationChannelCompat.Builder setVibrationEnabled(boolean);
-    method public androidx.core.app.NotificationChannelCompat.Builder setVibrationPattern(long[]?);
-  }
-
-  public class NotificationChannelGroupCompat {
-    method public java.util.List<androidx.core.app.NotificationChannelCompat!> getChannels();
-    method public String? getDescription();
-    method public String getId();
-    method public CharSequence? getName();
-    method public boolean isBlocked();
-    method public androidx.core.app.NotificationChannelGroupCompat.Builder toBuilder();
-  }
-
-  public static class NotificationChannelGroupCompat.Builder {
-    ctor public NotificationChannelGroupCompat.Builder(String);
-    method public androidx.core.app.NotificationChannelGroupCompat build();
-    method public androidx.core.app.NotificationChannelGroupCompat.Builder setDescription(String?);
-    method public androidx.core.app.NotificationChannelGroupCompat.Builder setName(CharSequence?);
-  }
-
-  public class NotificationCompat {
-    ctor @Deprecated public NotificationCompat();
-    method public static androidx.core.app.NotificationCompat.Action? getAction(android.app.Notification, int);
-    method public static int getActionCount(android.app.Notification);
-    method public static boolean getAllowSystemGeneratedContextualActions(android.app.Notification);
-    method public static boolean getAutoCancel(android.app.Notification);
-    method public static int getBadgeIconType(android.app.Notification);
-    method public static androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata(android.app.Notification);
-    method public static String? getCategory(android.app.Notification);
-    method public static String? getChannelId(android.app.Notification);
-    method public static int getColor(android.app.Notification);
-    method @RequiresApi(19) public static CharSequence? getContentInfo(android.app.Notification);
-    method @RequiresApi(19) public static CharSequence? getContentText(android.app.Notification);
-    method @RequiresApi(19) public static CharSequence? getContentTitle(android.app.Notification);
-    method public static android.os.Bundle? getExtras(android.app.Notification);
-    method public static String? getGroup(android.app.Notification);
-    method public static int getGroupAlertBehavior(android.app.Notification);
-    method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
-    method public static boolean getLocalOnly(android.app.Notification);
-    method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
-    method public static boolean getOngoing(android.app.Notification);
-    method public static boolean getOnlyAlertOnce(android.app.Notification);
-    method public static java.util.List<androidx.core.app.Person!> getPeople(android.app.Notification);
-    method public static android.app.Notification? getPublicVersion(android.app.Notification);
-    method public static CharSequence? getSettingsText(android.app.Notification);
-    method public static String? getShortcutId(android.app.Notification);
-    method @RequiresApi(19) public static boolean getShowWhen(android.app.Notification);
-    method public static String? getSortKey(android.app.Notification);
-    method @RequiresApi(19) public static CharSequence? getSubText(android.app.Notification);
-    method public static long getTimeoutAfter(android.app.Notification);
-    method @RequiresApi(19) public static boolean getUsesChronometer(android.app.Notification);
-    method public static int getVisibility(android.app.Notification);
-    method public static boolean isGroupSummary(android.app.Notification);
-    field public static final int BADGE_ICON_LARGE = 2; // 0x2
-    field public static final int BADGE_ICON_NONE = 0; // 0x0
-    field public static final int BADGE_ICON_SMALL = 1; // 0x1
-    field public static final String CATEGORY_ALARM = "alarm";
-    field public static final String CATEGORY_CALL = "call";
-    field public static final String CATEGORY_EMAIL = "email";
-    field public static final String CATEGORY_ERROR = "err";
-    field public static final String CATEGORY_EVENT = "event";
-    field public static final String CATEGORY_LOCATION_SHARING = "location_sharing";
-    field public static final String CATEGORY_MESSAGE = "msg";
-    field public static final String CATEGORY_MISSED_CALL = "missed_call";
-    field public static final String CATEGORY_NAVIGATION = "navigation";
-    field public static final String CATEGORY_PROGRESS = "progress";
-    field public static final String CATEGORY_PROMO = "promo";
-    field public static final String CATEGORY_RECOMMENDATION = "recommendation";
-    field public static final String CATEGORY_REMINDER = "reminder";
-    field public static final String CATEGORY_SERVICE = "service";
-    field public static final String CATEGORY_SOCIAL = "social";
-    field public static final String CATEGORY_STATUS = "status";
-    field public static final String CATEGORY_STOPWATCH = "stopwatch";
-    field public static final String CATEGORY_SYSTEM = "sys";
-    field public static final String CATEGORY_TRANSPORT = "transport";
-    field public static final String CATEGORY_WORKOUT = "workout";
-    field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
-    field public static final int DEFAULT_ALL = -1; // 0xffffffff
-    field public static final int DEFAULT_LIGHTS = 4; // 0x4
-    field public static final int DEFAULT_SOUND = 1; // 0x1
-    field public static final int DEFAULT_VIBRATE = 2; // 0x2
-    field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
-    field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
-    field public static final String EXTRA_BIG_TEXT = "android.bigText";
-    field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
-    field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
-    field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
-    field public static final String EXTRA_COLORIZED = "android.colorized";
-    field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
-    field public static final String EXTRA_COMPAT_TEMPLATE = "androidx.core.app.extra.COMPAT_TEMPLATE";
-    field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
-    field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
-    field public static final String EXTRA_HISTORIC_MESSAGES = "android.messages.historic";
-    field public static final String EXTRA_INFO_TEXT = "android.infoText";
-    field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
-    field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
-    field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
-    field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
-    field public static final String EXTRA_MESSAGES = "android.messages";
-    field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
-    field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
-    field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
-    field @Deprecated public static final String EXTRA_PEOPLE = "android.people";
-    field public static final String EXTRA_PEOPLE_LIST = "android.people.list";
-    field public static final String EXTRA_PICTURE = "android.picture";
-    field public static final String EXTRA_PICTURE_CONTENT_DESCRIPTION = "android.pictureContentDescription";
-    field public static final String EXTRA_PROGRESS = "android.progress";
-    field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
-    field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
-    field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
-    field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
-    field public static final String EXTRA_SHOW_BIG_PICTURE_WHEN_COLLAPSED = "android.showBigPictureWhenCollapsed";
-    field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
-    field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
-    field public static final String EXTRA_SMALL_ICON = "android.icon";
-    field public static final String EXTRA_SUB_TEXT = "android.subText";
-    field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
-    field public static final String EXTRA_TEMPLATE = "android.template";
-    field public static final String EXTRA_TEXT = "android.text";
-    field public static final String EXTRA_TEXT_LINES = "android.textLines";
-    field public static final String EXTRA_TITLE = "android.title";
-    field public static final String EXTRA_TITLE_BIG = "android.title.big";
-    field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
-    field public static final int FLAG_BUBBLE = 4096; // 0x1000
-    field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
-    field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
-    field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
-    field public static final int FLAG_INSISTENT = 4; // 0x4
-    field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
-    field public static final int FLAG_NO_CLEAR = 32; // 0x20
-    field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
-    field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
-    field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
-    field public static final int FOREGROUND_SERVICE_DEFAULT = 0; // 0x0
-    field public static final int FOREGROUND_SERVICE_DEFERRED = 2; // 0x2
-    field public static final int FOREGROUND_SERVICE_IMMEDIATE = 1; // 0x1
-    field public static final int GROUP_ALERT_ALL = 0; // 0x0
-    field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
-    field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
-    field public static final String GROUP_KEY_SILENT = "silent";
-    field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
-    field public static final int PRIORITY_DEFAULT = 0; // 0x0
-    field public static final int PRIORITY_HIGH = 1; // 0x1
-    field public static final int PRIORITY_LOW = -1; // 0xffffffff
-    field public static final int PRIORITY_MAX = 2; // 0x2
-    field public static final int PRIORITY_MIN = -2; // 0xfffffffe
-    field public static final int STREAM_DEFAULT = -1; // 0xffffffff
-    field public static final int VISIBILITY_PRIVATE = 0; // 0x0
-    field public static final int VISIBILITY_PUBLIC = 1; // 0x1
-    field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
-  }
-
-  public static class NotificationCompat.Action {
-    ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
-    ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
-    method public android.app.PendingIntent? getActionIntent();
-    method public boolean getAllowGeneratedReplies();
-    method public androidx.core.app.RemoteInput![]? getDataOnlyRemoteInputs();
-    method public android.os.Bundle getExtras();
-    method @Deprecated public int getIcon();
-    method public androidx.core.graphics.drawable.IconCompat? getIconCompat();
-    method public androidx.core.app.RemoteInput![]? getRemoteInputs();
-    method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
-    method public boolean getShowsUserInterface();
-    method public CharSequence? getTitle();
-    method public boolean isAuthenticationRequired();
-    method public boolean isContextual();
-    field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
-    field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
-    field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
-    field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
-    field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
-    field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
-    field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
-    field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
-    field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
-    field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
-    field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
-    field public android.app.PendingIntent! actionIntent;
-    field @Deprecated public int icon;
-    field public CharSequence! title;
-  }
-
-  public static final class NotificationCompat.Action.Builder {
-    ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
-    ctor public NotificationCompat.Action.Builder(int, CharSequence?, android.app.PendingIntent?);
-    ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
-    method public androidx.core.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle?);
-    method public androidx.core.app.NotificationCompat.Action.Builder addRemoteInput(androidx.core.app.RemoteInput?);
-    method public androidx.core.app.NotificationCompat.Action build();
-    method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Extender);
-    method public android.os.Bundle getExtras();
-    method public androidx.core.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
-    method public androidx.core.app.NotificationCompat.Action.Builder setAuthenticationRequired(boolean);
-    method public androidx.core.app.NotificationCompat.Action.Builder setContextual(boolean);
-    method public androidx.core.app.NotificationCompat.Action.Builder setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
-    method public androidx.core.app.NotificationCompat.Action.Builder setShowsUserInterface(boolean);
-  }
-
-  public static interface NotificationCompat.Action.Extender {
-    method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
-  }
-
-  @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
-  }
-
-  public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
-    ctor public NotificationCompat.Action.WearableExtender();
-    ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action);
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender clone();
-    method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
-    method @Deprecated public CharSequence? getCancelLabel();
-    method @Deprecated public CharSequence? getConfirmLabel();
-    method public boolean getHintDisplayActionInline();
-    method public boolean getHintLaunchesActivity();
-    method @Deprecated public CharSequence? getInProgressLabel();
-    method public boolean isAvailableOffline();
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setCancelLabel(CharSequence?);
-    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setConfirmLabel(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setInProgressLabel(CharSequence?);
-  }
-
-  public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
-    ctor public NotificationCompat.BigPictureStyle();
-    ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder?);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap?);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap?);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle setBigContentTitle(CharSequence?);
-    method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle setContentDescription(CharSequence?);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle setSummaryText(CharSequence?);
-    method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle showBigPictureWhenCollapsed(boolean);
-  }
-
-  public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
-    ctor public NotificationCompat.BigTextStyle();
-    ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder?);
-    method public androidx.core.app.NotificationCompat.BigTextStyle bigText(CharSequence?);
-    method public androidx.core.app.NotificationCompat.BigTextStyle setBigContentTitle(CharSequence?);
-    method public androidx.core.app.NotificationCompat.BigTextStyle setSummaryText(CharSequence?);
-  }
-
-  public static final class NotificationCompat.BubbleMetadata {
-    method public static androidx.core.app.NotificationCompat.BubbleMetadata? fromPlatform(android.app.Notification.BubbleMetadata?);
-    method public boolean getAutoExpandBubble();
-    method public android.app.PendingIntent? getDeleteIntent();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getDesiredHeight();
-    method @DimenRes public int getDesiredHeightResId();
-    method public androidx.core.graphics.drawable.IconCompat? getIcon();
-    method public android.app.PendingIntent? getIntent();
-    method public String? getShortcutId();
-    method public boolean isNotificationSuppressed();
-    method public static android.app.Notification.BubbleMetadata? toPlatform(androidx.core.app.NotificationCompat.BubbleMetadata?);
-  }
-
-  public static final class NotificationCompat.BubbleMetadata.Builder {
-    ctor @Deprecated public NotificationCompat.BubbleMetadata.Builder();
-    ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
-    ctor public NotificationCompat.BubbleMetadata.Builder(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata build();
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=androidx.annotation.Dimension.DP) int);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIntent(android.app.PendingIntent);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setSuppressNotification(boolean);
-  }
-
-  public static class NotificationCompat.Builder {
-    ctor @RequiresApi(19) public NotificationCompat.Builder(android.content.Context, android.app.Notification);
-    ctor public NotificationCompat.Builder(android.content.Context, String);
-    ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
-    method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
-    method public androidx.core.app.NotificationCompat.Builder addAction(androidx.core.app.NotificationCompat.Action?);
-    method public androidx.core.app.NotificationCompat.Builder addExtras(android.os.Bundle?);
-    method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
-    method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(androidx.core.app.NotificationCompat.Action?);
-    method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
-    method public androidx.core.app.NotificationCompat.Builder addPerson(androidx.core.app.Person?);
-    method public android.app.Notification build();
-    method public androidx.core.app.NotificationCompat.Builder clearActions();
-    method public androidx.core.app.NotificationCompat.Builder clearInvisibleActions();
-    method public androidx.core.app.NotificationCompat.Builder clearPeople();
-    method public android.widget.RemoteViews? createBigContentView();
-    method public android.widget.RemoteViews? createContentView();
-    method public android.widget.RemoteViews? createHeadsUpContentView();
-    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Extender);
-    method public android.os.Bundle getExtras();
-    method @Deprecated public android.app.Notification getNotification();
-    method protected static CharSequence? limitCharSequenceLength(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setAllowSystemGeneratedContextualActions(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setAutoCancel(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setBadgeIconType(int);
-    method public androidx.core.app.NotificationCompat.Builder setBubbleMetadata(androidx.core.app.NotificationCompat.BubbleMetadata?);
-    method public androidx.core.app.NotificationCompat.Builder setCategory(String?);
-    method public androidx.core.app.NotificationCompat.Builder setChannelId(String);
-    method @RequiresApi(24) public androidx.core.app.NotificationCompat.Builder setChronometerCountDown(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setColor(@ColorInt int);
-    method public androidx.core.app.NotificationCompat.Builder setColorized(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setContent(android.widget.RemoteViews?);
-    method public androidx.core.app.NotificationCompat.Builder setContentInfo(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent?);
-    method public androidx.core.app.NotificationCompat.Builder setContentText(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setContentTitle(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews?);
-    method public androidx.core.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews?);
-    method public androidx.core.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews?);
-    method public androidx.core.app.NotificationCompat.Builder setDefaults(int);
-    method public androidx.core.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent?);
-    method public androidx.core.app.NotificationCompat.Builder setExtras(android.os.Bundle?);
-    method public androidx.core.app.NotificationCompat.Builder setForegroundServiceBehavior(int);
-    method public androidx.core.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent?, boolean);
-    method public androidx.core.app.NotificationCompat.Builder setGroup(String?);
-    method public androidx.core.app.NotificationCompat.Builder setGroupAlertBehavior(int);
-    method public androidx.core.app.NotificationCompat.Builder setGroupSummary(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap?);
-    method public androidx.core.app.NotificationCompat.Builder setLights(@ColorInt int, int, int);
-    method public androidx.core.app.NotificationCompat.Builder setLocalOnly(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
-    method @Deprecated public androidx.core.app.NotificationCompat.Builder setNotificationSilent();
-    method public androidx.core.app.NotificationCompat.Builder setNumber(int);
-    method public androidx.core.app.NotificationCompat.Builder setOngoing(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setPriority(int);
-    method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
-    method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
-    method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
-    method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
-    method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
-    method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setSilent(boolean);
-    method @RequiresApi(23) public androidx.core.app.NotificationCompat.Builder setSmallIcon(androidx.core.graphics.drawable.IconCompat);
-    method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int);
-    method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int, int);
-    method public androidx.core.app.NotificationCompat.Builder setSortKey(String?);
-    method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?);
-    method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?, int);
-    method public androidx.core.app.NotificationCompat.Builder setStyle(androidx.core.app.NotificationCompat.Style?);
-    method public androidx.core.app.NotificationCompat.Builder setSubText(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?);
-    method @Deprecated public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?, android.widget.RemoteViews?);
-    method public androidx.core.app.NotificationCompat.Builder setTimeoutAfter(long);
-    method public androidx.core.app.NotificationCompat.Builder setUsesChronometer(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setVibrate(long[]?);
-    method public androidx.core.app.NotificationCompat.Builder setVisibility(int);
-    method public androidx.core.app.NotificationCompat.Builder setWhen(long);
-    field @Deprecated public java.util.ArrayList<java.lang.String!>! mPeople;
-  }
-
-  public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
-    ctor public NotificationCompat.CarExtender();
-    ctor public NotificationCompat.CarExtender(android.app.Notification);
-    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
-    method @ColorInt public int getColor();
-    method public android.graphics.Bitmap? getLargeIcon();
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation? getUnreadConversation();
-    method public androidx.core.app.NotificationCompat.CarExtender setColor(@ColorInt int);
-    method public androidx.core.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap?);
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation?);
-  }
-
-  @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation {
-    method @Deprecated public long getLatestTimestamp();
-    method @Deprecated public String![]? getMessages();
-    method @Deprecated public String? getParticipant();
-    method @Deprecated public String![]? getParticipants();
-    method @Deprecated public android.app.PendingIntent? getReadPendingIntent();
-    method @Deprecated public androidx.core.app.RemoteInput? getRemoteInput();
-    method @Deprecated public android.app.PendingIntent? getReplyPendingIntent();
-  }
-
-  @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
-    ctor @Deprecated public NotificationCompat.CarExtender.UnreadConversation.Builder(String);
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(String?);
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation build();
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent?);
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent?, androidx.core.app.RemoteInput?);
-  }
-
-  public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
-    ctor public NotificationCompat.DecoratedCustomViewStyle();
-  }
-
-  public static interface NotificationCompat.Extender {
-    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
-  }
-
-  public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
-    ctor public NotificationCompat.InboxStyle();
-    ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder?);
-    method public androidx.core.app.NotificationCompat.InboxStyle addLine(CharSequence?);
-    method public androidx.core.app.NotificationCompat.InboxStyle setBigContentTitle(CharSequence?);
-    method public androidx.core.app.NotificationCompat.InboxStyle setSummaryText(CharSequence?);
-  }
-
-  public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
-    ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
-    ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
-    method public void addCompatExtras(android.os.Bundle);
-    method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
-    method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
-    method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
-    method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
-    method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
-    method public CharSequence? getConversationTitle();
-    method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
-    method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
-    method public androidx.core.app.Person getUser();
-    method @Deprecated public CharSequence? getUserDisplayName();
-    method public boolean isGroupConversation();
-    method public androidx.core.app.NotificationCompat.MessagingStyle setConversationTitle(CharSequence?);
-    method public androidx.core.app.NotificationCompat.MessagingStyle setGroupConversation(boolean);
-    field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
-  }
-
-  public static final class NotificationCompat.MessagingStyle.Message {
-    ctor public NotificationCompat.MessagingStyle.Message(CharSequence?, long, androidx.core.app.Person?);
-    ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence?, long, CharSequence?);
-    method public String? getDataMimeType();
-    method public android.net.Uri? getDataUri();
-    method public android.os.Bundle getExtras();
-    method public androidx.core.app.Person? getPerson();
-    method @Deprecated public CharSequence? getSender();
-    method public CharSequence? getText();
-    method public long getTimestamp();
-    method public androidx.core.app.NotificationCompat.MessagingStyle.Message setData(String?, android.net.Uri?);
-  }
-
-  public abstract static class NotificationCompat.Style {
-    ctor public NotificationCompat.Style();
-    method public android.app.Notification? build();
-    method public void setBuilder(androidx.core.app.NotificationCompat.Builder?);
-  }
-
-  public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
-    ctor public NotificationCompat.WearableExtender();
-    ctor public NotificationCompat.WearableExtender(android.app.Notification);
-    method public androidx.core.app.NotificationCompat.WearableExtender addAction(androidx.core.app.NotificationCompat.Action);
-    method public androidx.core.app.NotificationCompat.WearableExtender addActions(java.util.List<androidx.core.app.NotificationCompat.Action!>);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification!>);
-    method public androidx.core.app.NotificationCompat.WearableExtender clearActions();
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender clearPages();
-    method public androidx.core.app.NotificationCompat.WearableExtender clone();
-    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
-    method public java.util.List<androidx.core.app.NotificationCompat.Action!> getActions();
-    method @Deprecated public android.graphics.Bitmap? getBackground();
-    method public String? getBridgeTag();
-    method public int getContentAction();
-    method @Deprecated public int getContentIcon();
-    method @Deprecated public int getContentIconGravity();
-    method public boolean getContentIntentAvailableOffline();
-    method @Deprecated public int getCustomContentHeight();
-    method @Deprecated public int getCustomSizePreset();
-    method public String? getDismissalId();
-    method @Deprecated public android.app.PendingIntent? getDisplayIntent();
-    method @Deprecated public int getGravity();
-    method @Deprecated public boolean getHintAmbientBigPicture();
-    method @Deprecated public boolean getHintAvoidBackgroundClipping();
-    method public boolean getHintContentIntentLaunchesActivity();
-    method @Deprecated public boolean getHintHideIcon();
-    method @Deprecated public int getHintScreenTimeout();
-    method @Deprecated public boolean getHintShowBackgroundOnly();
-    method @Deprecated public java.util.List<android.app.Notification!> getPages();
-    method public boolean getStartScrollBottom();
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap?);
-    method public androidx.core.app.NotificationCompat.WearableExtender setBridgeTag(String?);
-    method public androidx.core.app.NotificationCompat.WearableExtender setContentAction(int);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIcon(int);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIconGravity(int);
-    method public androidx.core.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
-    method public androidx.core.app.NotificationCompat.WearableExtender setDismissalId(String?);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent?);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setGravity(int);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
-    method public androidx.core.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
-    method public androidx.core.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
-    field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
-    field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
-    field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
-    field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
-    field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
-    field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
-    field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
-    field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
-    field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
-  }
-
-  public final class NotificationCompatExtras {
-    field public static final String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
-    field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
-    field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
-    field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
-    field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
-    field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
-  }
-
-  public abstract class NotificationCompatSideChannelService extends android.app.Service {
-    ctor public NotificationCompatSideChannelService();
-    method public abstract void cancel(String!, int, String!);
-    method public abstract void cancelAll(String!);
-    method public abstract void notify(String!, int, String!, android.app.Notification!);
-    method public android.os.IBinder! onBind(android.content.Intent!);
-  }
-
-  public final class NotificationManagerCompat {
-    method public boolean areNotificationsEnabled();
-    method public void cancel(int);
-    method public void cancel(String?, int);
-    method public void cancelAll();
-    method public void createNotificationChannel(android.app.NotificationChannel);
-    method public void createNotificationChannel(androidx.core.app.NotificationChannelCompat);
-    method public void createNotificationChannelGroup(android.app.NotificationChannelGroup);
-    method public void createNotificationChannelGroup(androidx.core.app.NotificationChannelGroupCompat);
-    method public void createNotificationChannelGroups(java.util.List<android.app.NotificationChannelGroup!>);
-    method public void createNotificationChannelGroupsCompat(java.util.List<androidx.core.app.NotificationChannelGroupCompat!>);
-    method public void createNotificationChannels(java.util.List<android.app.NotificationChannel!>);
-    method public void createNotificationChannelsCompat(java.util.List<androidx.core.app.NotificationChannelCompat!>);
-    method public void deleteNotificationChannel(String);
-    method public void deleteNotificationChannelGroup(String);
-    method public void deleteUnlistedNotificationChannels(java.util.Collection<java.lang.String!>);
-    method public static androidx.core.app.NotificationManagerCompat from(android.content.Context);
-    method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
-    method public int getImportance();
-    method public android.app.NotificationChannel? getNotificationChannel(String);
-    method public android.app.NotificationChannel? getNotificationChannel(String, String);
-    method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String);
-    method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String, String);
-    method public android.app.NotificationChannelGroup? getNotificationChannelGroup(String);
-    method public androidx.core.app.NotificationChannelGroupCompat? getNotificationChannelGroupCompat(String);
-    method public java.util.List<android.app.NotificationChannelGroup!> getNotificationChannelGroups();
-    method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroupsCompat();
-    method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
-    method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannelsCompat();
-    method public void notify(int, android.app.Notification);
-    method public void notify(String?, int, android.app.Notification);
-    field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
-    field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
-    field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
-    field public static final int IMPORTANCE_HIGH = 4; // 0x4
-    field public static final int IMPORTANCE_LOW = 2; // 0x2
-    field public static final int IMPORTANCE_MAX = 5; // 0x5
-    field public static final int IMPORTANCE_MIN = 1; // 0x1
-    field public static final int IMPORTANCE_NONE = 0; // 0x0
-    field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
-  }
-
-  public interface OnMultiWindowModeChangedProvider {
-    method public void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
-    method public void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
-  }
-
-  public interface OnNewIntentProvider {
-    method public void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
-    method public void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
-  }
-
-  public interface OnPictureInPictureModeChangedProvider {
-    method public void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
-    method public void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
-  }
-
-  public class Person {
-    method public static androidx.core.app.Person fromBundle(android.os.Bundle);
-    method public androidx.core.graphics.drawable.IconCompat? getIcon();
-    method public String? getKey();
-    method public CharSequence? getName();
-    method public String? getUri();
-    method public boolean isBot();
-    method public boolean isImportant();
-    method public androidx.core.app.Person.Builder toBuilder();
-    method public android.os.Bundle toBundle();
-  }
-
-  public static class Person.Builder {
-    ctor public Person.Builder();
-    method public androidx.core.app.Person build();
-    method public androidx.core.app.Person.Builder setBot(boolean);
-    method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
-    method public androidx.core.app.Person.Builder setImportant(boolean);
-    method public androidx.core.app.Person.Builder setKey(String?);
-    method public androidx.core.app.Person.Builder setName(CharSequence?);
-    method public androidx.core.app.Person.Builder setUri(String?);
-  }
-
-  public final class PictureInPictureModeChangedInfo {
-    ctor public PictureInPictureModeChangedInfo(boolean);
-    ctor @RequiresApi(26) public PictureInPictureModeChangedInfo(boolean, android.content.res.Configuration);
-    method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
-    method public boolean isInPictureInPictureMode();
-  }
-
-  public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
-    ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
-    method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
-    method public android.app.PendingIntent getActionIntent();
-    method public CharSequence getContentDescription();
-    method public androidx.core.graphics.drawable.IconCompat getIcon();
-    method public CharSequence getTitle();
-    method public boolean isEnabled();
-    method public void setEnabled(boolean);
-    method public void setShouldShowIcon(boolean);
-    method public boolean shouldShowIcon();
-    method @RequiresApi(26) public android.app.RemoteAction toRemoteAction();
-  }
-
-  public final class RemoteInput {
-    method public static void addDataResultToIntent(androidx.core.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String!,android.net.Uri!>);
-    method public static void addResultsToIntent(androidx.core.app.RemoteInput![], android.content.Intent, android.os.Bundle);
-    method public boolean getAllowFreeFormInput();
-    method public java.util.Set<java.lang.String!>? getAllowedDataTypes();
-    method public CharSequence![]? getChoices();
-    method public static java.util.Map<java.lang.String!,android.net.Uri!>? getDataResultsFromIntent(android.content.Intent, String);
-    method public int getEditChoicesBeforeSending();
-    method public android.os.Bundle getExtras();
-    method public CharSequence? getLabel();
-    method public String getResultKey();
-    method public static android.os.Bundle? getResultsFromIntent(android.content.Intent);
-    method public static int getResultsSource(android.content.Intent);
-    method public boolean isDataOnly();
-    method public static void setResultsSource(android.content.Intent, int);
-    field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
-    field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
-    field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
-    field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
-    field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
-    field public static final int SOURCE_CHOICE = 1; // 0x1
-    field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
-  }
-
-  public static final class RemoteInput.Builder {
-    ctor public RemoteInput.Builder(String);
-    method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
-    method public androidx.core.app.RemoteInput build();
-    method public android.os.Bundle getExtras();
-    method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
-    method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
-    method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence![]?);
-    method public androidx.core.app.RemoteInput.Builder setEditChoicesBeforeSending(int);
-    method public androidx.core.app.RemoteInput.Builder setLabel(CharSequence?);
-  }
-
-  public final class ServiceCompat {
-    method public static void stopForeground(android.app.Service, int);
-    field public static final int START_STICKY = 1; // 0x1
-    field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
-    field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
-  }
-
-  public final class ShareCompat {
-    method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
-    method @Deprecated public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
-    method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
-    method public static String? getCallingPackage(android.app.Activity);
-    field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
-    field public static final String EXTRA_CALLING_ACTIVITY_INTEROP = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
-    field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
-    field public static final String EXTRA_CALLING_PACKAGE_INTEROP = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
-  }
-
-  public static class ShareCompat.IntentBuilder {
-    ctor public ShareCompat.IntentBuilder(android.content.Context);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String![]);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String![]);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String![]);
-    method public androidx.core.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
-    method public android.content.Intent createChooserIntent();
-    method @Deprecated public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
-    method public android.content.Intent getIntent();
-    method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
-    method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setHtmlText(String?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setStream(android.net.Uri?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setSubject(String?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setText(CharSequence?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setType(String?);
-    method public void startChooser();
-  }
-
-  public static class ShareCompat.IntentReader {
-    ctor public ShareCompat.IntentReader(android.app.Activity);
-    ctor public ShareCompat.IntentReader(android.content.Context, android.content.Intent);
-    method @Deprecated public static androidx.core.app.ShareCompat.IntentReader from(android.app.Activity);
-    method public android.content.ComponentName? getCallingActivity();
-    method public android.graphics.drawable.Drawable? getCallingActivityIcon();
-    method public android.graphics.drawable.Drawable? getCallingApplicationIcon();
-    method public CharSequence? getCallingApplicationLabel();
-    method public String? getCallingPackage();
-    method public String![]? getEmailBcc();
-    method public String![]? getEmailCc();
-    method public String![]? getEmailTo();
-    method public String? getHtmlText();
-    method public android.net.Uri? getStream();
-    method public android.net.Uri? getStream(int);
-    method public int getStreamCount();
-    method public String? getSubject();
-    method public CharSequence? getText();
-    method public String? getType();
-    method public boolean isMultipleShare();
-    method public boolean isShareIntent();
-    method public boolean isSingleShare();
-  }
-
-  public abstract class SharedElementCallback {
-    ctor public SharedElementCallback();
-    method public android.os.Parcelable! onCaptureSharedElementSnapshot(android.view.View!, android.graphics.Matrix!, android.graphics.RectF!);
-    method public android.view.View! onCreateSnapshotView(android.content.Context!, android.os.Parcelable!);
-    method public void onMapSharedElements(java.util.List<java.lang.String!>!, java.util.Map<java.lang.String!,android.view.View!>!);
-    method public void onRejectSharedElements(java.util.List<android.view.View!>!);
-    method public void onSharedElementEnd(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
-    method public void onSharedElementStart(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
-    method public void onSharedElementsArrived(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
-  }
-
-  public static interface SharedElementCallback.OnSharedElementsReadyListener {
-    method public void onSharedElementsReady();
-  }
-
-  public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
-    method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
-    method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
-    method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
-    method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
-    method public androidx.core.app.TaskStackBuilder addParentStack(android.content.ComponentName);
-    method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
-    method public android.content.Intent? editIntentAt(int);
-    method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
-    method @Deprecated public android.content.Intent! getIntent(int);
-    method public int getIntentCount();
-    method public android.content.Intent![] getIntents();
-    method public android.app.PendingIntent? getPendingIntent(int, int);
-    method public android.app.PendingIntent? getPendingIntent(int, int, android.os.Bundle?);
-    method @Deprecated public java.util.Iterator<android.content.Intent!> iterator();
-    method public void startActivities();
-    method public void startActivities(android.os.Bundle?);
-  }
-
-  public static interface TaskStackBuilder.SupportParentable {
-    method public android.content.Intent? getSupportParentActivityIntent();
-  }
-
-}
-
-package androidx.core.content {
-
-  public final class ContentProviderCompat {
-    method public static android.content.Context requireContext(android.content.ContentProvider);
-  }
-
-  public final class ContentResolverCompat {
-    method public static android.database.Cursor? query(android.content.ContentResolver, android.net.Uri, String![]?, String?, String![]?, String?, androidx.core.os.CancellationSignal?);
-  }
-
-  public class ContextCompat {
-    ctor protected ContextCompat();
-    method public static int checkSelfPermission(android.content.Context, String);
-    method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
-    method public static String? getAttributionTag(android.content.Context);
-    method public static java.io.File getCodeCacheDir(android.content.Context);
-    method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
-    method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
-    method public static java.io.File? getDataDir(android.content.Context);
-    method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
-    method public static java.io.File![] getExternalCacheDirs(android.content.Context);
-    method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
-    method public static java.util.concurrent.Executor getMainExecutor(android.content.Context);
-    method public static java.io.File? getNoBackupFilesDir(android.content.Context);
-    method public static java.io.File![] getObbDirs(android.content.Context);
-    method public static <T> T? getSystemService(android.content.Context, Class<T!>);
-    method public static String? getSystemServiceName(android.content.Context, Class<?>);
-    method public static boolean isDeviceProtectedStorage(android.content.Context);
-    method public static boolean startActivities(android.content.Context, android.content.Intent![]);
-    method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
-    method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
-    method public static void startForegroundService(android.content.Context, android.content.Intent);
-  }
-
-  public class FileProvider extends android.content.ContentProvider {
-    ctor public FileProvider();
-    ctor protected FileProvider(@XmlRes int);
-    method public int delete(android.net.Uri, String?, String![]?);
-    method public String? getType(android.net.Uri);
-    method public static android.net.Uri! getUriForFile(android.content.Context, String, java.io.File);
-    method public static android.net.Uri getUriForFile(android.content.Context, String, java.io.File, String);
-    method public android.net.Uri! insert(android.net.Uri, android.content.ContentValues);
-    method public boolean onCreate();
-    method public android.database.Cursor query(android.net.Uri, String![]?, String?, String![]?, String?);
-    method public int update(android.net.Uri, android.content.ContentValues, String?, String![]?);
-  }
-
-  public final class IntentCompat {
-    method public static android.content.Intent createManageUnusedAppRestrictionsIntent(android.content.Context, String);
-    method public static android.content.Intent makeMainSelectorActivity(String, String);
-    field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
-    field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
-    field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
-    field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
-    field public static final String EXTRA_TIME = "android.intent.extra.TIME";
-  }
-
-  public final class LocusIdCompat {
-    ctor public LocusIdCompat(String);
-    method public String getId();
-    method @RequiresApi(29) public android.content.LocusId toLocusId();
-    method @RequiresApi(29) public static androidx.core.content.LocusIdCompat toLocusIdCompat(android.content.LocusId);
-  }
-
-  public final class MimeTypeFilter {
-    method public static boolean matches(String?, String);
-    method public static String? matches(String?, String![]);
-    method public static String? matches(String![]?, String);
-    method public static String![] matchesMany(String![]?, String);
-  }
-
-  public interface OnConfigurationChangedProvider {
-    method public void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
-    method public void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
-  }
-
-  public interface OnTrimMemoryProvider {
-    method public void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
-    method public void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
-  }
-
-  public final class PackageManagerCompat {
-    method public static com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> getUnusedAppRestrictionsStatus(android.content.Context);
-    field public static final String ACTION_PERMISSION_REVOCATION_SETTINGS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
-  }
-
-  public final class PermissionChecker {
-    method public static int checkCallingOrSelfPermission(android.content.Context, String);
-    method public static int checkCallingPermission(android.content.Context, String, String?);
-    method public static int checkPermission(android.content.Context, String, int, int, String?);
-    method public static int checkSelfPermission(android.content.Context, String);
-    field public static final int PERMISSION_DENIED = -1; // 0xffffffff
-    field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
-    field public static final int PERMISSION_GRANTED = 0; // 0x0
-  }
-
-  @Deprecated public final class SharedPreferencesCompat {
-  }
-
-  @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
-    method @Deprecated public void apply(android.content.SharedPreferences.Editor);
-    method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
-  }
-
-  public class UnusedAppRestrictionsBackportCallback {
-    method public void onResult(boolean, boolean) throws android.os.RemoteException;
-  }
-
-  public abstract class UnusedAppRestrictionsBackportService extends android.app.Service {
-    ctor public UnusedAppRestrictionsBackportService();
-    method protected abstract void isPermissionRevocationEnabled(androidx.core.content.UnusedAppRestrictionsBackportCallback);
-    method public android.os.IBinder? onBind(android.content.Intent?);
-    field public static final String ACTION_UNUSED_APP_RESTRICTIONS_BACKPORT_CONNECTION = "android.support.unusedapprestrictions.action.CustomUnusedAppRestrictionsBackportService";
-  }
-
-  public final class UnusedAppRestrictionsConstants {
-    field public static final int API_30 = 4; // 0x4
-    field public static final int API_30_BACKPORT = 3; // 0x3
-    field public static final int API_31 = 5; // 0x5
-    field public static final int DISABLED = 2; // 0x2
-    field public static final int ERROR = 0; // 0x0
-    field public static final int FEATURE_NOT_AVAILABLE = 1; // 0x1
-  }
-
-}
-
-package androidx.core.content.pm {
-
-  @Deprecated public final class ActivityInfoCompat {
-    field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
-  }
-
-  public final class PackageInfoCompat {
-    method public static long getLongVersionCode(android.content.pm.PackageInfo);
-    method public static java.util.List<android.content.pm.Signature!> getSignatures(android.content.pm.PackageManager, String) throws android.content.pm.PackageManager.NameNotFoundException;
-    method public static boolean hasSignatures(android.content.pm.PackageManager, String, @Size(min=1) java.util.Map<byte[]!,java.lang.Integer!>, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
-  }
-
-  public final class PermissionInfoCompat {
-    method public static int getProtection(android.content.pm.PermissionInfo);
-    method public static int getProtectionFlags(android.content.pm.PermissionInfo);
-  }
-
-  public class ShortcutInfoCompat {
-    method public android.content.ComponentName? getActivity();
-    method public java.util.Set<java.lang.String!>? getCategories();
-    method public CharSequence? getDisabledMessage();
-    method public int getDisabledReason();
-    method public int getExcludedFromSurfaces();
-    method public android.os.PersistableBundle? getExtras();
-    method public String getId();
-    method public android.content.Intent getIntent();
-    method public android.content.Intent![] getIntents();
-    method public long getLastChangedTimestamp();
-    method public androidx.core.content.LocusIdCompat? getLocusId();
-    method public CharSequence? getLongLabel();
-    method public String getPackage();
-    method public int getRank();
-    method public CharSequence getShortLabel();
-    method public android.os.UserHandle? getUserHandle();
-    method public boolean hasKeyFieldsOnly();
-    method public boolean isCached();
-    method public boolean isDeclaredInManifest();
-    method public boolean isDynamic();
-    method public boolean isEnabled();
-    method public boolean isExcludedFromSurfaces(int);
-    method public boolean isImmutable();
-    method public boolean isPinned();
-    method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
-    field public static final int SURFACE_LAUNCHER = 1; // 0x1
-  }
-
-  public static class ShortcutInfoCompat.Builder {
-    ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String, String, java.util.List<java.lang.String!>);
-    method public androidx.core.content.pm.ShortcutInfoCompat build();
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setCategories(java.util.Set<java.lang.String!>);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExcludedFromSurfaces(int);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExtras(android.os.PersistableBundle);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent![]);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIsConversation();
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
-    method @Deprecated public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived();
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived(boolean);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPerson(androidx.core.app.Person);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPersons(androidx.core.app.Person![]);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setRank(int);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setSliceUri(android.net.Uri);
-  }
-
-  public class ShortcutManagerCompat {
-    method public static boolean addDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
-    method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
-    method public static void disableShortcuts(android.content.Context, java.util.List<java.lang.String!>, CharSequence?);
-    method public static void enableShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
-    method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getDynamicShortcuts(android.content.Context);
-    method public static int getIconMaxHeight(android.content.Context);
-    method public static int getIconMaxWidth(android.content.Context);
-    method public static int getMaxShortcutCountPerActivity(android.content.Context);
-    method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getShortcuts(android.content.Context, int);
-    method public static boolean isRateLimitingActive(android.content.Context);
-    method public static boolean isRequestPinShortcutSupported(android.content.Context);
-    method public static boolean pushDynamicShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
-    method public static void removeAllDynamicShortcuts(android.content.Context);
-    method public static void removeDynamicShortcuts(android.content.Context, java.util.List<java.lang.String!>);
-    method public static void removeLongLivedShortcuts(android.content.Context, java.util.List<java.lang.String!>);
-    method public static void reportShortcutUsed(android.content.Context, String);
-    method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
-    method public static boolean setDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
-    method public static boolean updateShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
-    field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
-    field public static final int FLAG_MATCH_CACHED = 8; // 0x8
-    field public static final int FLAG_MATCH_DYNAMIC = 2; // 0x2
-    field public static final int FLAG_MATCH_MANIFEST = 1; // 0x1
-    field public static final int FLAG_MATCH_PINNED = 4; // 0x4
-  }
-
-}
-
-package androidx.core.content.res {
-
-  public final class ConfigurationHelper {
-    method public static int getDensityDpi(android.content.res.Resources);
-  }
-
-  public final class ResourcesCompat {
-    method public static void clearCachesForTheme(android.content.res.Resources.Theme);
-    method public static android.graphics.Typeface? getCachedFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
-    method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
-    method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
-    method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
-    method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
-    method public static float getFloat(android.content.res.Resources, @DimenRes int);
-    method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
-    method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
-    field @AnyRes public static final int ID_NULL = 0; // 0x0
-  }
-
-  public abstract static class ResourcesCompat.FontCallback {
-    ctor public ResourcesCompat.FontCallback();
-    method public abstract void onFontRetrievalFailed(int);
-    method public abstract void onFontRetrieved(android.graphics.Typeface);
-  }
-
-  public static final class ResourcesCompat.ThemeCompat {
-    method public static void rebase(android.content.res.Resources.Theme);
-  }
-
-}
-
-package androidx.core.database {
-
-  public final class CursorWindowCompat {
-    method public static android.database.CursorWindow create(String?, long);
-  }
-
-  @Deprecated public final class DatabaseUtilsCompat {
-    method @Deprecated public static String![]! appendSelectionArgs(String![]!, String![]!);
-    method @Deprecated public static String! concatenateWhere(String!, String!);
-  }
-
-}
-
-package androidx.core.database.sqlite {
-
-  public final class SQLiteCursorCompat {
-    method public static void setFillWindowForwardOnly(android.database.sqlite.SQLiteCursor, boolean);
-  }
-
-}
-
-package androidx.core.graphics {
-
-  public final class BitmapCompat {
-    method public static android.graphics.Bitmap createScaledBitmap(android.graphics.Bitmap, int, int, android.graphics.Rect?, boolean);
-    method public static int getAllocationByteCount(android.graphics.Bitmap);
-    method public static boolean hasMipMap(android.graphics.Bitmap);
-    method public static void setHasMipMap(android.graphics.Bitmap, boolean);
-  }
-
-  public class BlendModeColorFilterCompat {
-    method public static android.graphics.ColorFilter? createBlendModeColorFilterCompat(int, androidx.core.graphics.BlendModeCompat);
-  }
-
-  public enum BlendModeCompat {
-    enum_constant public static final androidx.core.graphics.BlendModeCompat CLEAR;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_BURN;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_DODGE;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DARKEN;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat DIFFERENCE;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DST;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DST_ATOP;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DST_IN;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OUT;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OVER;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat EXCLUSION;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HARD_LIGHT;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HUE;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat LIGHTEN;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat LUMINOSITY;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat MODULATE;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat MULTIPLY;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat OVERLAY;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat PLUS;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SATURATION;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SCREEN;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SOFT_LIGHT;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SRC;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_ATOP;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_IN;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OUT;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OVER;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat XOR;
-  }
-
-  public final class ColorUtils {
-    method @ColorInt public static int HSLToColor(float[]);
-    method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
-    method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
-    method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
-    method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
-    method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
-    method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double);
-    method public static void XYZToLAB(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double, double[]);
-    method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
-    method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
-    method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
-    method public static double calculateContrast(@ColorInt int, @ColorInt int);
-    method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
-    method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
-    method public static void colorToHSL(@ColorInt int, float[]);
-    method public static void colorToLAB(@ColorInt int, double[]);
-    method public static void colorToXYZ(@ColorInt int, double[]);
-    method public static int compositeColors(@ColorInt int, @ColorInt int);
-    method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
-    method public static double distanceEuclidean(double[], double[]);
-    method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
-  }
-
-  public final class Insets {
-    method public static androidx.core.graphics.Insets add(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
-    method public static androidx.core.graphics.Insets max(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
-    method public static androidx.core.graphics.Insets min(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
-    method public static androidx.core.graphics.Insets of(int, int, int, int);
-    method public static androidx.core.graphics.Insets of(android.graphics.Rect);
-    method public static androidx.core.graphics.Insets subtract(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
-    method @RequiresApi(api=29) public static androidx.core.graphics.Insets toCompatInsets(android.graphics.Insets);
-    method @RequiresApi(29) public android.graphics.Insets toPlatformInsets();
-    field public static final androidx.core.graphics.Insets NONE;
-    field public final int bottom;
-    field public final int left;
-    field public final int right;
-    field public final int top;
-  }
-
-  public final class PaintCompat {
-    method public static boolean hasGlyph(android.graphics.Paint, String);
-    method public static boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat?);
-  }
-
-  public final class PathSegment {
-    ctor public PathSegment(android.graphics.PointF, float, android.graphics.PointF, float);
-    method public android.graphics.PointF getEnd();
-    method public float getEndFraction();
-    method public android.graphics.PointF getStart();
-    method public float getStartFraction();
-  }
-
-  public final class PathUtils {
-    method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path);
-    method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path, @FloatRange(from=0) float);
-  }
-
-  public class TypefaceCompat {
-    method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, int);
-  }
-
-}
-
-package androidx.core.graphics.drawable {
-
-  public final class DrawableCompat {
-    method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
-    method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
-    method public static void clearColorFilter(android.graphics.drawable.Drawable);
-    method public static int getAlpha(android.graphics.drawable.Drawable);
-    method public static android.graphics.ColorFilter? getColorFilter(android.graphics.drawable.Drawable);
-    method public static int getLayoutDirection(android.graphics.drawable.Drawable);
-    method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
-    method @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
-    method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
-    method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
-    method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
-    method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
-    method public static void setTint(android.graphics.drawable.Drawable, @ColorInt int);
-    method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList?);
-    method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
-    method public static <T extends android.graphics.drawable.Drawable> T! unwrap(android.graphics.drawable.Drawable);
-    method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
-  }
-
-  public class IconCompat implements androidx.versionedparcelable.VersionedParcelable {
-    method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
-    method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
-    method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
-    method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
-    method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(android.net.Uri);
-    method public static androidx.core.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
-    method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
-    method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
-    method public static androidx.core.graphics.drawable.IconCompat createWithData(byte[], int, int);
-    method public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.Context, @DrawableRes int);
-    method @DrawableRes public int getResId();
-    method public String getResPackage();
-    method public int getType();
-    method public android.net.Uri getUri();
-    method public android.graphics.drawable.Drawable? loadDrawable(android.content.Context);
-    method public void onPostParceling();
-    method public void onPreParceling(boolean);
-    method public androidx.core.graphics.drawable.IconCompat setTint(@ColorInt int);
-    method public androidx.core.graphics.drawable.IconCompat setTintList(android.content.res.ColorStateList?);
-    method public androidx.core.graphics.drawable.IconCompat setTintMode(android.graphics.PorterDuff.Mode?);
-    method public android.os.Bundle toBundle();
-    method @Deprecated @RequiresApi(23) public android.graphics.drawable.Icon toIcon();
-    method @RequiresApi(23) public android.graphics.drawable.Icon toIcon(android.content.Context?);
-    field public static final int TYPE_ADAPTIVE_BITMAP = 5; // 0x5
-    field public static final int TYPE_BITMAP = 1; // 0x1
-    field public static final int TYPE_DATA = 3; // 0x3
-    field public static final int TYPE_RESOURCE = 2; // 0x2
-    field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
-    field public static final int TYPE_URI = 4; // 0x4
-    field public static final int TYPE_URI_ADAPTIVE_BITMAP = 6; // 0x6
-  }
-
-  public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
-    method public void draw(android.graphics.Canvas);
-    method public final android.graphics.Bitmap? getBitmap();
-    method public float getCornerRadius();
-    method public int getGravity();
-    method public int getOpacity();
-    method public final android.graphics.Paint getPaint();
-    method public boolean hasAntiAlias();
-    method public boolean hasMipMap();
-    method public boolean isCircular();
-    method public void setAlpha(int);
-    method public void setAntiAlias(boolean);
-    method public void setCircular(boolean);
-    method public void setColorFilter(android.graphics.ColorFilter!);
-    method public void setCornerRadius(float);
-    method public void setDither(boolean);
-    method public void setGravity(int);
-    method public void setMipMap(boolean);
-    method public void setTargetDensity(android.graphics.Canvas);
-    method public void setTargetDensity(android.util.DisplayMetrics);
-    method public void setTargetDensity(int);
-  }
-
-  public final class RoundedBitmapDrawableFactory {
-    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
-    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
-    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
-  }
-
-}
-
-package androidx.core.hardware.display {
-
-  public final class DisplayManagerCompat {
-    method public android.view.Display? getDisplay(int);
-    method public android.view.Display![] getDisplays();
-    method public android.view.Display![] getDisplays(String?);
-    method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
-    field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
-  }
-
-}
-
-package androidx.core.hardware.fingerprint {
-
-  @Deprecated public class FingerprintManagerCompat {
-    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
-    method @Deprecated public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
-    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
-    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
-  }
-
-  @Deprecated public abstract static class FingerprintManagerCompat.AuthenticationCallback {
-    ctor @Deprecated public FingerprintManagerCompat.AuthenticationCallback();
-    method @Deprecated public void onAuthenticationError(int, CharSequence!);
-    method @Deprecated public void onAuthenticationFailed();
-    method @Deprecated public void onAuthenticationHelp(int, CharSequence!);
-    method @Deprecated public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
-  }
-
-  @Deprecated public static final class FingerprintManagerCompat.AuthenticationResult {
-    ctor @Deprecated public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
-    method @Deprecated public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
-  }
-
-  @Deprecated public static class FingerprintManagerCompat.CryptoObject {
-    ctor @Deprecated public FingerprintManagerCompat.CryptoObject(java.security.Signature);
-    ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
-    ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
-    method @Deprecated public javax.crypto.Cipher? getCipher();
-    method @Deprecated public javax.crypto.Mac? getMac();
-    method @Deprecated public java.security.Signature? getSignature();
-  }
-
-}
-
-package androidx.core.location {
-
-  public abstract class GnssStatusCompat {
-    method @FloatRange(from=0, to=360) public abstract float getAzimuthDegrees(@IntRange(from=0) int);
-    method @FloatRange(from=0, to=63) public abstract float getBasebandCn0DbHz(@IntRange(from=0) int);
-    method @FloatRange(from=0) public abstract float getCarrierFrequencyHz(@IntRange(from=0) int);
-    method @FloatRange(from=0, to=63) public abstract float getCn0DbHz(@IntRange(from=0) int);
-    method public abstract int getConstellationType(@IntRange(from=0) int);
-    method @FloatRange(from=0xffffffa6, to=90) public abstract float getElevationDegrees(@IntRange(from=0) int);
-    method @IntRange(from=0) public abstract int getSatelliteCount();
-    method @IntRange(from=1, to=200) public abstract int getSvid(@IntRange(from=0) int);
-    method public abstract boolean hasAlmanacData(@IntRange(from=0) int);
-    method public abstract boolean hasBasebandCn0DbHz(@IntRange(from=0) int);
-    method public abstract boolean hasCarrierFrequencyHz(@IntRange(from=0) int);
-    method public abstract boolean hasEphemerisData(@IntRange(from=0) int);
-    method public abstract boolean usedInFix(@IntRange(from=0) int);
-    method @RequiresApi(android.os.Build.VERSION_CODES.N) public static androidx.core.location.GnssStatusCompat wrap(android.location.GnssStatus);
-    method public static androidx.core.location.GnssStatusCompat wrap(android.location.GpsStatus);
-    field public static final int CONSTELLATION_BEIDOU = 5; // 0x5
-    field public static final int CONSTELLATION_GALILEO = 6; // 0x6
-    field public static final int CONSTELLATION_GLONASS = 3; // 0x3
-    field public static final int CONSTELLATION_GPS = 1; // 0x1
-    field public static final int CONSTELLATION_IRNSS = 7; // 0x7
-    field public static final int CONSTELLATION_QZSS = 4; // 0x4
-    field public static final int CONSTELLATION_SBAS = 2; // 0x2
-    field public static final int CONSTELLATION_UNKNOWN = 0; // 0x0
-  }
-
-  public abstract static class GnssStatusCompat.Callback {
-    ctor public GnssStatusCompat.Callback();
-    method public void onFirstFix(@IntRange(from=0) int);
-    method public void onSatelliteStatusChanged(androidx.core.location.GnssStatusCompat);
-    method public void onStarted();
-    method public void onStopped();
-  }
-
-  public final class LocationCompat {
-    method public static float getBearingAccuracyDegrees(android.location.Location);
-    method public static long getElapsedRealtimeMillis(android.location.Location);
-    method public static long getElapsedRealtimeNanos(android.location.Location);
-    method public static float getSpeedAccuracyMetersPerSecond(android.location.Location);
-    method public static float getVerticalAccuracyMeters(android.location.Location);
-    method public static boolean hasBearingAccuracy(android.location.Location);
-    method public static boolean hasSpeedAccuracy(android.location.Location);
-    method public static boolean hasVerticalAccuracy(android.location.Location);
-    method public static boolean isMock(android.location.Location);
-    method public static void setBearingAccuracyDegrees(android.location.Location, float);
-    method public static void setMock(android.location.Location, boolean);
-    method public static void setSpeedAccuracyMetersPerSecond(android.location.Location, float);
-    method public static void setVerticalAccuracyMeters(android.location.Location, float);
-    field public static final String EXTRA_BEARING_ACCURACY = "bearingAccuracy";
-    field public static final String EXTRA_IS_MOCK = "mockLocation";
-    field public static final String EXTRA_SPEED_ACCURACY = "speedAccuracy";
-    field public static final String EXTRA_VERTICAL_ACCURACY = "verticalAccuracy";
-  }
-
-  public interface LocationListenerCompat extends android.location.LocationListener {
-    method public default void onStatusChanged(String, int, android.os.Bundle?);
-  }
-
-  public final class LocationManagerCompat {
-    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void getCurrentLocation(android.location.LocationManager, String, androidx.core.os.CancellationSignal?, java.util.concurrent.Executor, androidx.core.util.Consumer<android.location.Location!>);
-    method public static String? getGnssHardwareModelName(android.location.LocationManager);
-    method public static int getGnssYearOfHardware(android.location.LocationManager);
-    method public static boolean hasProvider(android.location.LocationManager, String);
-    method public static boolean isLocationEnabled(android.location.LocationManager);
-    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback, android.os.Handler);
-    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, java.util.concurrent.Executor, androidx.core.location.GnssStatusCompat.Callback);
-    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void removeUpdates(android.location.LocationManager, androidx.core.location.LocationListenerCompat);
-    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
-    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, androidx.core.location.LocationListenerCompat, android.os.Looper);
-    method public static void unregisterGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback);
-  }
-
-  public final class LocationRequestCompat {
-    method @IntRange(from=1) public long getDurationMillis();
-    method @IntRange(from=0) public long getIntervalMillis();
-    method @IntRange(from=0) public long getMaxUpdateDelayMillis();
-    method @IntRange(from=1, to=java.lang.Integer.MAX_VALUE) public int getMaxUpdates();
-    method @FloatRange(from=0, to=java.lang.Float.MAX_VALUE) public float getMinUpdateDistanceMeters();
-    method @IntRange(from=0) public long getMinUpdateIntervalMillis();
-    method public int getQuality();
-    method @RequiresApi(31) public android.location.LocationRequest toLocationRequest();
-    method @RequiresApi(19) public android.location.LocationRequest? toLocationRequest(String);
-    field public static final long PASSIVE_INTERVAL = 9223372036854775807L; // 0x7fffffffffffffffL
-    field public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; // 0x66
-    field public static final int QUALITY_HIGH_ACCURACY = 100; // 0x64
-    field public static final int QUALITY_LOW_POWER = 104; // 0x68
-  }
-
-  public static final class LocationRequestCompat.Builder {
-    ctor public LocationRequestCompat.Builder(long);
-    ctor public LocationRequestCompat.Builder(androidx.core.location.LocationRequestCompat);
-    method public androidx.core.location.LocationRequestCompat build();
-    method public androidx.core.location.LocationRequestCompat.Builder clearMinUpdateIntervalMillis();
-    method public androidx.core.location.LocationRequestCompat.Builder setDurationMillis(@IntRange(from=1) long);
-    method public androidx.core.location.LocationRequestCompat.Builder setIntervalMillis(@IntRange(from=0) long);
-    method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdateDelayMillis(@IntRange(from=0) long);
-    method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdates(@IntRange(from=1, to=java.lang.Integer.MAX_VALUE) int);
-    method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateDistanceMeters(@FloatRange(from=0, to=java.lang.Float.MAX_VALUE) float);
-    method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateIntervalMillis(@IntRange(from=0) long);
-    method public androidx.core.location.LocationRequestCompat.Builder setQuality(int);
-  }
-
-}
-
-package androidx.core.math {
-
-  public class MathUtils {
-    method public static int addExact(int, int);
-    method public static long addExact(long, long);
-    method public static float clamp(float, float, float);
-    method public static double clamp(double, double, double);
-    method public static int clamp(int, int, int);
-    method public static long clamp(long, long, long);
-    method public static int decrementExact(int);
-    method public static long decrementExact(long);
-    method public static int incrementExact(int);
-    method public static long incrementExact(long);
-    method public static int multiplyExact(int, int);
-    method public static long multiplyExact(long, long);
-    method public static int negateExact(int);
-    method public static long negateExact(long);
-    method public static int subtractExact(int, int);
-    method public static long subtractExact(long, long);
-    method public static int toIntExact(long);
-  }
-
-}
-
-package androidx.core.net {
-
-  public final class ConnectivityManagerCompat {
-    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
-    method public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
-    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
-    field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
-    field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
-    field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
-  }
-
-  public final class MailTo {
-    method public String? getBcc();
-    method public String? getBody();
-    method public String? getCc();
-    method public java.util.Map<java.lang.String!,java.lang.String!>? getHeaders();
-    method public String? getSubject();
-    method public String? getTo();
-    method public static boolean isMailTo(String?);
-    method public static boolean isMailTo(android.net.Uri?);
-    method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
-    method public static androidx.core.net.MailTo parse(android.net.Uri) throws androidx.core.net.ParseException;
-    field public static final String MAILTO_SCHEME = "mailto:";
-  }
-
-  public class ParseException extends java.lang.RuntimeException {
-    field public final String response;
-  }
-
-  public final class TrafficStatsCompat {
-    method @Deprecated public static void clearThreadStatsTag();
-    method @Deprecated public static int getThreadStatsTag();
-    method @Deprecated public static void incrementOperationCount(int);
-    method @Deprecated public static void incrementOperationCount(int, int);
-    method @Deprecated public static void setThreadStatsTag(int);
-    method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
-    method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
-    method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
-    method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
-  }
-
-  public final class UriCompat {
-    method public static String toSafeString(android.net.Uri);
-  }
-
-}
-
-package androidx.core.os {
-
-  public class BuildCompat {
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N) public static boolean isAtLeastN();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N_MR1) public static boolean isAtLeastNMR1();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O) public static boolean isAtLeastO();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O_MR1) public static boolean isAtLeastOMR1();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.P) public static boolean isAtLeastP();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
-    method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
-  }
-
-  public final class CancellationSignal {
-    ctor public CancellationSignal();
-    method public void cancel();
-    method public Object? getCancellationSignalObject();
-    method public boolean isCanceled();
-    method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener?);
-    method public void throwIfCanceled();
-  }
-
-  public static interface CancellationSignal.OnCancelListener {
-    method public void onCancel();
-  }
-
-  public final class ConfigurationCompat {
-    method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
-  }
-
-  public final class EnvironmentCompat {
-    method public static String getStorageState(java.io.File);
-    field public static final String MEDIA_UNKNOWN = "unknown";
-  }
-
-  public final class ExecutorCompat {
-    method public static java.util.concurrent.Executor create(android.os.Handler);
-  }
-
-  public final class HandlerCompat {
-    method public static android.os.Handler createAsync(android.os.Looper);
-    method public static android.os.Handler createAsync(android.os.Looper, android.os.Handler.Callback);
-    method @RequiresApi(16) public static boolean hasCallbacks(android.os.Handler, Runnable);
-    method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
-  }
-
-  public final class LocaleListCompat {
-    method public static androidx.core.os.LocaleListCompat create(java.util.Locale!...);
-    method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
-    method public java.util.Locale? get(int);
-    method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
-    method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
-    method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
-    method public java.util.Locale? getFirstMatch(String![]);
-    method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
-    method public boolean isEmpty();
-    method @IntRange(from=0) public int size();
-    method public String toLanguageTags();
-    method public Object? unwrap();
-    method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
-    method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
-  }
-
-  public final class MessageCompat {
-    method public static boolean isAsynchronous(android.os.Message);
-    method public static void setAsynchronous(android.os.Message, boolean);
-  }
-
-  public class OperationCanceledException extends java.lang.RuntimeException {
-    ctor public OperationCanceledException();
-    ctor public OperationCanceledException(String?);
-  }
-
-  public final class ParcelCompat {
-    method public static boolean readBoolean(android.os.Parcel);
-    method public static void writeBoolean(android.os.Parcel, boolean);
-  }
-
-  @Deprecated public final class ParcelableCompat {
-    method @Deprecated public static <T> android.os.Parcelable.Creator<T!>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T!>!);
-  }
-
-  @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
-    method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
-    method @Deprecated public T![]! newArray(int);
-  }
-
-  public final class ProcessCompat {
-    method public static boolean isApplicationUid(int);
-  }
-
-  @Deprecated public final class TraceCompat {
-    method @Deprecated public static void beginAsyncSection(String, int);
-    method @Deprecated public static void beginSection(String);
-    method @Deprecated public static void endAsyncSection(String, int);
-    method @Deprecated public static void endSection();
-    method @Deprecated public static boolean isEnabled();
-    method @Deprecated public static void setCounter(String, int);
-  }
-
-  @RequiresApi(17) public class UserHandleCompat {
-    method public static android.os.UserHandle getUserHandleForUid(int);
-  }
-
-  public class UserManagerCompat {
-    method public static boolean isUserUnlocked(android.content.Context);
-  }
-
-}
-
-package androidx.core.provider {
-
-  public final class DocumentsContractCompat {
-    method public static android.net.Uri? buildChildDocumentsUri(String, String?);
-    method public static android.net.Uri? buildChildDocumentsUriUsingTree(android.net.Uri, String);
-    method public static android.net.Uri? buildDocumentUri(String, String);
-    method public static android.net.Uri? buildDocumentUriUsingTree(android.net.Uri, String);
-    method public static android.net.Uri? buildTreeDocumentUri(String, String);
-    method public static android.net.Uri? createDocument(android.content.ContentResolver, android.net.Uri, String, String) throws java.io.FileNotFoundException;
-    method public static String? getDocumentId(android.net.Uri);
-    method public static String? getTreeDocumentId(android.net.Uri);
-    method public static boolean isDocumentUri(android.content.Context, android.net.Uri?);
-    method public static boolean isTreeUri(android.net.Uri);
-    method public static boolean removeDocument(android.content.ContentResolver, android.net.Uri, android.net.Uri) throws java.io.FileNotFoundException;
-    method public static android.net.Uri? renameDocument(android.content.ContentResolver, android.net.Uri, String) throws java.io.FileNotFoundException;
-  }
-
-  public static final class DocumentsContractCompat.DocumentCompat {
-    field public static final int FLAG_VIRTUAL_DOCUMENT = 512; // 0x200
-  }
-
-  public final class FontRequest {
-    ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
-    ctor public FontRequest(String, String, String, @ArrayRes int);
-    method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
-    method @ArrayRes public int getCertificatesArrayResId();
-    method public String getProviderAuthority();
-    method public String getProviderPackage();
-    method public String getQuery();
-  }
-
-  public class FontsContractCompat {
-    method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![]);
-    method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
-    method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
-  }
-
-  public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
-    ctor public FontsContractCompat.Columns();
-    field public static final String FILE_ID = "file_id";
-    field public static final String ITALIC = "font_italic";
-    field public static final String RESULT_CODE = "result_code";
-    field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
-    field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
-    field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
-    field public static final int RESULT_CODE_OK = 0; // 0x0
-    field public static final String TTC_INDEX = "font_ttc_index";
-    field public static final String VARIATION_SETTINGS = "font_variation_settings";
-    field public static final String WEIGHT = "font_weight";
-  }
-
-  public static class FontsContractCompat.FontFamilyResult {
-    method public androidx.core.provider.FontsContractCompat.FontInfo![]! getFonts();
-    method public int getStatusCode();
-    field public static final int STATUS_OK = 0; // 0x0
-    field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
-    field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
-  }
-
-  public static class FontsContractCompat.FontInfo {
-    method public int getResultCode();
-    method @IntRange(from=0) public int getTtcIndex();
-    method public android.net.Uri getUri();
-    method @IntRange(from=1, to=1000) public int getWeight();
-    method public boolean isItalic();
-  }
-
-  public static class FontsContractCompat.FontRequestCallback {
-    ctor public FontsContractCompat.FontRequestCallback();
-    method public void onTypefaceRequestFailed(int);
-    method public void onTypefaceRetrieved(android.graphics.Typeface!);
-    field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
-    field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
-    field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
-    field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
-    field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
-    field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
-    field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
-  }
-
-}
-
-package androidx.core.telephony {
-
-  @RequiresApi(22) public class SubscriptionManagerCompat {
-    method public static int getSlotIndex(int);
-  }
-
-  public class TelephonyManagerCompat {
-    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static String? getImei(android.telephony.TelephonyManager);
-    method public static int getSubscriptionId(android.telephony.TelephonyManager);
-  }
-
-}
-
-package androidx.core.telephony.mbms {
-
-  public final class MbmsHelper {
-    method public static CharSequence? getBestNameForService(android.content.Context, android.telephony.mbms.ServiceInfo);
-  }
-
-}
-
-package androidx.core.text {
-
-  public final class BidiFormatter {
-    method public static androidx.core.text.BidiFormatter! getInstance();
-    method public static androidx.core.text.BidiFormatter! getInstance(boolean);
-    method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
-    method public boolean getStereoReset();
-    method public boolean isRtl(String!);
-    method public boolean isRtl(CharSequence!);
-    method public boolean isRtlContext();
-    method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
-    method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
-    method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
-    method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
-    method public String! unicodeWrap(String!, boolean);
-    method public CharSequence! unicodeWrap(CharSequence!, boolean);
-    method public String! unicodeWrap(String!);
-    method public CharSequence! unicodeWrap(CharSequence!);
-  }
-
-  public static final class BidiFormatter.Builder {
-    ctor public BidiFormatter.Builder();
-    ctor public BidiFormatter.Builder(boolean);
-    ctor public BidiFormatter.Builder(java.util.Locale!);
-    method public androidx.core.text.BidiFormatter! build();
-    method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
-    method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
-  }
-
-  public final class HtmlCompat {
-    method public static android.text.Spanned fromHtml(String, int);
-    method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
-    method public static String toHtml(android.text.Spanned, int);
-    field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
-    field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
-    field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
-    field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
-    field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
-  }
-
-  public final class ICUCompat {
-    method public static String? maximizeAndGetScript(java.util.Locale);
-  }
-
-  public class PrecomputedTextCompat implements android.text.Spannable {
-    method public char charAt(int);
-    method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
-    method @IntRange(from=0) public int getParagraphCount();
-    method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
-    method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
-    method public androidx.core.text.PrecomputedTextCompat.Params getParams();
-    method public int getSpanEnd(Object!);
-    method public int getSpanFlags(Object!);
-    method public int getSpanStart(Object!);
-    method public <T> T![]! getSpans(int, int, Class<T!>!);
-    method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
-    method public int length();
-    method public int nextSpanTransition(int, int, Class!);
-    method public void removeSpan(Object!);
-    method public void setSpan(Object!, int, int, int);
-    method public CharSequence! subSequence(int, int);
-  }
-
-  public static final class PrecomputedTextCompat.Params {
-    ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
-    method @RequiresApi(23) public int getBreakStrategy();
-    method @RequiresApi(23) public int getHyphenationFrequency();
-    method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
-    method public android.text.TextPaint getTextPaint();
-  }
-
-  public static class PrecomputedTextCompat.Params.Builder {
-    ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
-    method public androidx.core.text.PrecomputedTextCompat.Params build();
-    method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
-    method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
-    method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
-  }
-
-  public interface TextDirectionHeuristicCompat {
-    method public boolean isRtl(char[]!, int, int);
-    method public boolean isRtl(CharSequence!, int, int);
-  }
-
-  public final class TextDirectionHeuristicsCompat {
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
-  }
-
-  public final class TextUtilsCompat {
-    method public static int getLayoutDirectionFromLocale(java.util.Locale?);
-    method public static String htmlEncode(String);
-  }
-
-}
-
-package androidx.core.text.util {
-
-  public final class LinkifyCompat {
-    method public static boolean addLinks(android.text.Spannable, int);
-    method public static boolean addLinks(android.widget.TextView, int);
-    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
-    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
-    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
-    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
-    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
-    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
-  }
-
-}
-
-package androidx.core.util {
-
-  public class AtomicFile {
-    ctor public AtomicFile(java.io.File);
-    method public void delete();
-    method public void failWrite(java.io.FileOutputStream?);
-    method public void finishWrite(java.io.FileOutputStream?);
-    method public java.io.File getBaseFile();
-    method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
-    method public byte[] readFully() throws java.io.IOException;
-    method public java.io.FileOutputStream startWrite() throws java.io.IOException;
-  }
-
-  public interface Consumer<T> {
-    method public void accept(T!);
-  }
-
-  public class ObjectsCompat {
-    method public static boolean equals(Object?, Object?);
-    method public static int hash(java.lang.Object!...);
-    method public static int hashCode(Object?);
-    method public static <T> T requireNonNull(T?);
-    method public static <T> T requireNonNull(T?, String);
-    method public static String? toString(Object?, String?);
-  }
-
-  public class Pair<F, S> {
-    ctor public Pair(F!, S!);
-    method public static <A, B> androidx.core.util.Pair<A!,B!> create(A!, B!);
-    field public final F! first;
-    field public final S! second;
-  }
-
-  public final class PatternsCompat {
-    field public static final java.util.regex.Pattern DOMAIN_NAME;
-    field public static final java.util.regex.Pattern EMAIL_ADDRESS;
-    field public static final java.util.regex.Pattern IP_ADDRESS;
-    field public static final java.util.regex.Pattern WEB_URL;
-  }
-
-  public final class Pools {
-  }
-
-  public static interface Pools.Pool<T> {
-    method public T? acquire();
-    method public boolean release(T);
-  }
-
-  public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
-    ctor public Pools.SimplePool(int);
-    method public T! acquire();
-    method public boolean release(T);
-  }
-
-  public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
-    ctor public Pools.SynchronizedPool(int);
-  }
-
-  public interface Predicate<T> {
-    method public boolean test(T!);
-  }
-
-  public final class SizeFCompat {
-    ctor public SizeFCompat(float, float);
-    method public float getHeight();
-    method public float getWidth();
-    method @RequiresApi(21) public android.util.SizeF toSizeF();
-    method @RequiresApi(21) public static androidx.core.util.SizeFCompat toSizeFCompat(android.util.SizeF);
-  }
-
-  public interface Supplier<T> {
-    method public T! get();
-  }
-
-}
-
-package androidx.core.view {
-
-  public class AccessibilityDelegateCompat {
-    ctor public AccessibilityDelegateCompat();
-    method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
-    method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
-    method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
-    method public void sendAccessibilityEvent(android.view.View, int);
-    method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
-  }
-
-  public abstract class ActionProvider {
-    ctor public ActionProvider(android.content.Context);
-    method public android.content.Context getContext();
-    method public boolean hasSubMenu();
-    method public boolean isVisible();
-    method public abstract android.view.View onCreateActionView();
-    method public android.view.View onCreateActionView(android.view.MenuItem);
-    method public boolean onPerformDefaultAction();
-    method public void onPrepareSubMenu(android.view.SubMenu);
-    method public boolean overridesItemVisibility();
-    method public void refreshVisibility();
-    method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener?);
-  }
-
-  public static interface ActionProvider.VisibilityListener {
-    method public void onActionProviderVisibilityChanged(boolean);
-  }
-
-  public final class ContentInfoCompat {
-    method public android.content.ClipData getClip();
-    method public android.os.Bundle? getExtras();
-    method public int getFlags();
-    method public android.net.Uri? getLinkUri();
-    method public int getSource();
-    method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
-    method @RequiresApi(31) public static android.util.Pair<android.view.ContentInfo!,android.view.ContentInfo!> partition(android.view.ContentInfo, java.util.function.Predicate<android.content.ClipData.Item!>);
-    method @RequiresApi(31) public android.view.ContentInfo toContentInfo();
-    method @RequiresApi(31) public static androidx.core.view.ContentInfoCompat toContentInfoCompat(android.view.ContentInfo);
-    field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
-    field public static final int SOURCE_APP = 0; // 0x0
-    field public static final int SOURCE_AUTOFILL = 4; // 0x4
-    field public static final int SOURCE_CLIPBOARD = 1; // 0x1
-    field public static final int SOURCE_DRAG_AND_DROP = 3; // 0x3
-    field public static final int SOURCE_INPUT_METHOD = 2; // 0x2
-    field public static final int SOURCE_PROCESS_TEXT = 5; // 0x5
-  }
-
-  public static final class ContentInfoCompat.Builder {
-    ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
-    ctor public ContentInfoCompat.Builder(android.content.ClipData, int);
-    method public androidx.core.view.ContentInfoCompat build();
-    method public androidx.core.view.ContentInfoCompat.Builder setClip(android.content.ClipData);
-    method public androidx.core.view.ContentInfoCompat.Builder setExtras(android.os.Bundle?);
-    method public androidx.core.view.ContentInfoCompat.Builder setFlags(int);
-    method public androidx.core.view.ContentInfoCompat.Builder setLinkUri(android.net.Uri?);
-    method public androidx.core.view.ContentInfoCompat.Builder setSource(int);
-  }
-
-  public final class DisplayCompat {
-    method public static androidx.core.view.DisplayCompat.ModeCompat getMode(android.content.Context, android.view.Display);
-    method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
-  }
-
-  public static final class DisplayCompat.ModeCompat {
-    method public int getPhysicalHeight();
-    method public int getPhysicalWidth();
-    method @Deprecated public boolean isNative();
-    method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
-  }
-
-  public final class DisplayCutoutCompat {
-    ctor public DisplayCutoutCompat(android.graphics.Rect?, java.util.List<android.graphics.Rect!>?);
-    ctor public DisplayCutoutCompat(androidx.core.graphics.Insets, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, androidx.core.graphics.Insets);
-    method public java.util.List<android.graphics.Rect!> getBoundingRects();
-    method public int getSafeInsetBottom();
-    method public int getSafeInsetLeft();
-    method public int getSafeInsetRight();
-    method public int getSafeInsetTop();
-    method public androidx.core.graphics.Insets getWaterfallInsets();
-  }
-
-  public final class DragAndDropPermissionsCompat {
-    method public void release();
-  }
-
-  public class DragStartHelper {
-    ctor public DragStartHelper(android.view.View, androidx.core.view.DragStartHelper.OnDragStartListener);
-    method public void attach();
-    method public void detach();
-    method public void getTouchPosition(android.graphics.Point);
-    method public boolean onLongClick(android.view.View);
-    method public boolean onTouch(android.view.View, android.view.MotionEvent);
-  }
-
-  public static interface DragStartHelper.OnDragStartListener {
-    method public boolean onDragStart(android.view.View, androidx.core.view.DragStartHelper);
-  }
-
-  public final class GestureDetectorCompat {
-    ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
-    ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler?);
-    method public boolean isLongpressEnabled();
-    method public boolean onTouchEvent(android.view.MotionEvent);
-    method public void setIsLongpressEnabled(boolean);
-    method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener?);
-  }
-
-  public final class GravityCompat {
-    method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
-    method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
-    method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
-    method public static int getAbsoluteGravity(int, int);
-    field public static final int END = 8388613; // 0x800005
-    field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
-    field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
-    field public static final int START = 8388611; // 0x800003
-  }
-
-  public final class InputDeviceCompat {
-    field public static final int SOURCE_ANY = -256; // 0xffffff00
-    field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
-    field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
-    field public static final int SOURCE_CLASS_MASK = 255; // 0xff
-    field public static final int SOURCE_CLASS_NONE = 0; // 0x0
-    field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
-    field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
-    field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
-    field public static final int SOURCE_DPAD = 513; // 0x201
-    field public static final int SOURCE_GAMEPAD = 1025; // 0x401
-    field public static final int SOURCE_HDMI = 33554433; // 0x2000001
-    field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
-    field public static final int SOURCE_KEYBOARD = 257; // 0x101
-    field public static final int SOURCE_MOUSE = 8194; // 0x2002
-    field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
-    field public static final int SOURCE_STYLUS = 16386; // 0x4002
-    field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
-    field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
-    field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
-    field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
-    field public static final int SOURCE_UNKNOWN = 0; // 0x0
-  }
-
-  public final class LayoutInflaterCompat {
-    method @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
-    method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
-    method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
-  }
-
-  @Deprecated public interface LayoutInflaterFactory {
-    method @Deprecated public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
-  }
-
-  public final class MarginLayoutParamsCompat {
-    method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
-    method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
-    method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
-    method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
-    method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
-    method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
-    method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
-    method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
-  }
-
-  public final class MenuCompat {
-    method public static void setGroupDividerEnabled(android.view.Menu, boolean);
-    method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
-  }
-
-  public interface MenuHost {
-    method public void addMenuProvider(androidx.core.view.MenuProvider);
-    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
-    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
-    method public void invalidateMenu();
-    method public void removeMenuProvider(androidx.core.view.MenuProvider);
-  }
-
-  public class MenuHostHelper {
-    ctor public MenuHostHelper(Runnable);
-    method public void addMenuProvider(androidx.core.view.MenuProvider);
-    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
-    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
-    method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
-    method public void onMenuClosed(android.view.Menu);
-    method public boolean onMenuItemSelected(android.view.MenuItem);
-    method public void onPrepareMenu(android.view.Menu);
-    method public void removeMenuProvider(androidx.core.view.MenuProvider);
-  }
-
-  public final class MenuItemCompat {
-    method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
-    method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
-    method public static androidx.core.view.ActionProvider? getActionProvider(android.view.MenuItem);
-    method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
-    method public static int getAlphabeticModifiers(android.view.MenuItem);
-    method public static CharSequence? getContentDescription(android.view.MenuItem);
-    method public static android.content.res.ColorStateList? getIconTintList(android.view.MenuItem);
-    method public static android.graphics.PorterDuff.Mode? getIconTintMode(android.view.MenuItem);
-    method public static int getNumericModifiers(android.view.MenuItem);
-    method public static CharSequence? getTooltipText(android.view.MenuItem);
-    method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
-    method public static android.view.MenuItem? setActionProvider(android.view.MenuItem, androidx.core.view.ActionProvider?);
-    method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
-    method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, int);
-    method public static void setAlphabeticShortcut(android.view.MenuItem, char, int);
-    method public static void setContentDescription(android.view.MenuItem, CharSequence?);
-    method public static void setIconTintList(android.view.MenuItem, android.content.res.ColorStateList?);
-    method public static void setIconTintMode(android.view.MenuItem, android.graphics.PorterDuff.Mode?);
-    method public static void setNumericShortcut(android.view.MenuItem, char, int);
-    method @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
-    method public static void setShortcut(android.view.MenuItem, char, char, int, int);
-    method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
-    method public static void setTooltipText(android.view.MenuItem, CharSequence?);
-    field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
-    field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
-    field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
-    field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
-    field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
-  }
-
-  @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
-    method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
-    method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
-  }
-
-  public interface MenuProvider {
-    method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
-    method public default void onMenuClosed(android.view.Menu);
-    method public boolean onMenuItemSelected(android.view.MenuItem);
-    method public default void onPrepareMenu(android.view.Menu);
-  }
-
-  public final class MotionEventCompat {
-    method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
-    method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
-    method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
-    method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
-    method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
-    method @Deprecated public static int getButtonState(android.view.MotionEvent!);
-    method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
-    method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
-    method @Deprecated public static int getSource(android.view.MotionEvent!);
-    method @Deprecated public static float getX(android.view.MotionEvent!, int);
-    method @Deprecated public static float getY(android.view.MotionEvent!, int);
-    method public static boolean isFromSource(android.view.MotionEvent, int);
-    field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
-    field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
-    field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
-    field @Deprecated public static final int ACTION_MASK = 255; // 0xff
-    field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
-    field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
-    field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
-    field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
-    field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
-    field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
-    field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
-    field @Deprecated public static final int AXIS_GAS = 22; // 0x16
-    field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
-    field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
-    field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
-    field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
-    field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
-    field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
-    field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
-    field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
-    field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
-    field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
-    field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
-    field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
-    field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
-    field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
-    field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
-    field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
-    field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
-    field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
-    field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
-    field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
-    field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
-    field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
-    field public static final int AXIS_RELATIVE_X = 27; // 0x1b
-    field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
-    field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
-    field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
-    field @Deprecated public static final int AXIS_RX = 12; // 0xc
-    field @Deprecated public static final int AXIS_RY = 13; // 0xd
-    field @Deprecated public static final int AXIS_RZ = 14; // 0xe
-    field public static final int AXIS_SCROLL = 26; // 0x1a
-    field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
-    field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
-    field @Deprecated public static final int AXIS_TILT = 25; // 0x19
-    field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
-    field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
-    field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
-    field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
-    field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
-    field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
-    field @Deprecated public static final int AXIS_X = 0; // 0x0
-    field @Deprecated public static final int AXIS_Y = 1; // 0x1
-    field @Deprecated public static final int AXIS_Z = 11; // 0xb
-    field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
-  }
-
-  public interface NestedScrollingChild {
-    method public boolean dispatchNestedFling(float, float, boolean);
-    method public boolean dispatchNestedPreFling(float, float);
-    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
-    method public boolean hasNestedScrollingParent();
-    method public boolean isNestedScrollingEnabled();
-    method public void setNestedScrollingEnabled(boolean);
-    method public boolean startNestedScroll(int);
-    method public void stopNestedScroll();
-  }
-
-  public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
-    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
-    method public boolean hasNestedScrollingParent(int);
-    method public boolean startNestedScroll(int, int);
-    method public void stopNestedScroll(int);
-  }
-
-  public interface NestedScrollingChild3 extends androidx.core.view.NestedScrollingChild2 {
-    method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
-  }
-
-  public class NestedScrollingChildHelper {
-    ctor public NestedScrollingChildHelper(android.view.View);
-    method public boolean dispatchNestedFling(float, float, boolean);
-    method public boolean dispatchNestedPreFling(float, float);
-    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
-    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
-    method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]?);
-    method public boolean hasNestedScrollingParent();
-    method public boolean hasNestedScrollingParent(int);
-    method public boolean isNestedScrollingEnabled();
-    method public void onDetachedFromWindow();
-    method public void onStopNestedScroll(android.view.View);
-    method public void setNestedScrollingEnabled(boolean);
-    method public boolean startNestedScroll(int);
-    method public boolean startNestedScroll(int, int);
-    method public void stopNestedScroll();
-    method public void stopNestedScroll(int);
-  }
-
-  public interface NestedScrollingParent {
-    method public int getNestedScrollAxes();
-    method public boolean onNestedFling(android.view.View, float, float, boolean);
-    method public boolean onNestedPreFling(android.view.View, float, float);
-    method public void onNestedPreScroll(android.view.View, int, int, int[]);
-    method public void onNestedScroll(android.view.View, int, int, int, int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
-    method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
-    method public void onStopNestedScroll(android.view.View);
-  }
-
-  public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
-    method public void onNestedPreScroll(android.view.View, int, int, int[], int);
-    method public void onNestedScroll(android.view.View, int, int, int, int, int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
-    method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
-    method public void onStopNestedScroll(android.view.View, int);
-  }
-
-  public interface NestedScrollingParent3 extends androidx.core.view.NestedScrollingParent2 {
-    method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
-  }
-
-  public class NestedScrollingParentHelper {
-    ctor public NestedScrollingParentHelper(android.view.ViewGroup);
-    method public int getNestedScrollAxes();
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
-    method public void onStopNestedScroll(android.view.View);
-    method public void onStopNestedScroll(android.view.View, int);
-  }
-
-  public interface OnApplyWindowInsetsListener {
-    method public androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
-  }
-
-  public interface OnReceiveContentListener {
-    method public androidx.core.view.ContentInfoCompat? onReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
-  }
-
-  public interface OnReceiveContentViewBehavior {
-    method public androidx.core.view.ContentInfoCompat? onReceiveContent(androidx.core.view.ContentInfoCompat);
-  }
-
-  public final class OneShotPreDrawListener implements android.view.View.OnAttachStateChangeListener android.view.ViewTreeObserver.OnPreDrawListener {
-    method public static androidx.core.view.OneShotPreDrawListener add(android.view.View, Runnable);
-    method public boolean onPreDraw();
-    method public void onViewAttachedToWindow(android.view.View);
-    method public void onViewDetachedFromWindow(android.view.View);
-    method public void removeListener();
-  }
-
-  public final class PointerIconCompat {
-    method public static androidx.core.view.PointerIconCompat create(android.graphics.Bitmap, float, float);
-    method public static androidx.core.view.PointerIconCompat getSystemIcon(android.content.Context, int);
-    method public static androidx.core.view.PointerIconCompat load(android.content.res.Resources, int);
-    field public static final int TYPE_ALIAS = 1010; // 0x3f2
-    field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
-    field public static final int TYPE_ARROW = 1000; // 0x3e8
-    field public static final int TYPE_CELL = 1006; // 0x3ee
-    field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
-    field public static final int TYPE_COPY = 1011; // 0x3f3
-    field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
-    field public static final int TYPE_DEFAULT = 1000; // 0x3e8
-    field public static final int TYPE_GRAB = 1020; // 0x3fc
-    field public static final int TYPE_GRABBING = 1021; // 0x3fd
-    field public static final int TYPE_HAND = 1002; // 0x3ea
-    field public static final int TYPE_HELP = 1003; // 0x3eb
-    field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
-    field public static final int TYPE_NO_DROP = 1012; // 0x3f4
-    field public static final int TYPE_NULL = 0; // 0x0
-    field public static final int TYPE_TEXT = 1008; // 0x3f0
-    field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
-    field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
-    field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
-    field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
-    field public static final int TYPE_WAIT = 1004; // 0x3ec
-    field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
-    field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
-  }
-
-  public final class ScaleGestureDetectorCompat {
-    method @Deprecated public static boolean isQuickScaleEnabled(Object!);
-    method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
-    method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
-    method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
-  }
-
-  public interface ScrollingView {
-    method public int computeHorizontalScrollExtent();
-    method public int computeHorizontalScrollOffset();
-    method public int computeHorizontalScrollRange();
-    method public int computeVerticalScrollExtent();
-    method public int computeVerticalScrollOffset();
-    method public int computeVerticalScrollRange();
-  }
-
-  public interface TintableBackgroundView {
-    method public android.content.res.ColorStateList? getSupportBackgroundTintList();
-    method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
-    method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
-    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
-  }
-
-  @Deprecated public final class VelocityTrackerCompat {
-    method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
-    method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
-  }
-
-  public class ViewCompat {
-    ctor @Deprecated protected ViewCompat();
-    method public static int addAccessibilityAction(android.view.View, CharSequence, androidx.core.view.accessibility.AccessibilityViewCommand);
-    method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View!>, int);
-    method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
-    method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
-    method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
-    method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
-    method public static void cancelDragAndDrop(android.view.View);
-    method @Deprecated public static int combineMeasuredStates(int, int);
-    method public static androidx.core.view.WindowInsetsCompat computeSystemWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat, android.graphics.Rect);
-    method public static androidx.core.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
-    method public static void dispatchFinishTemporaryDetach(android.view.View);
-    method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
-    method public static boolean dispatchNestedPreFling(android.view.View, float, float);
-    method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
-    method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, int);
-    method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
-    method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int, int[]);
-    method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int);
-    method public static void dispatchStartTemporaryDetach(android.view.View);
-    method public static void enableAccessibleClickableSpanSupport(android.view.View);
-    method public static int generateViewId();
-    method public static androidx.core.view.AccessibilityDelegateCompat? getAccessibilityDelegate(android.view.View);
-    method public static int getAccessibilityLiveRegion(android.view.View);
-    method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
-    method @UiThread public static CharSequence? getAccessibilityPaneTitle(android.view.View);
-    method @Deprecated public static float getAlpha(android.view.View!);
-    method public static android.content.res.ColorStateList? getBackgroundTintList(android.view.View);
-    method public static android.graphics.PorterDuff.Mode? getBackgroundTintMode(android.view.View);
-    method public static android.graphics.Rect? getClipBounds(android.view.View);
-    method public static android.view.Display? getDisplay(android.view.View);
-    method public static float getElevation(android.view.View);
-    method public static boolean getFitsSystemWindows(android.view.View);
-    method public static int getImportantForAccessibility(android.view.View);
-    method public static int getImportantForAutofill(android.view.View);
-    method public static int getLabelFor(android.view.View);
-    method @Deprecated public static int getLayerType(android.view.View!);
-    method public static int getLayoutDirection(android.view.View);
-    method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
-    method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
-    method @Deprecated public static int getMeasuredState(android.view.View!);
-    method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
-    method public static int getMinimumHeight(android.view.View);
-    method public static int getMinimumWidth(android.view.View);
-    method public static int getNextClusterForwardId(android.view.View);
-    method public static String![]? getOnReceiveContentMimeTypes(android.view.View);
-    method @Deprecated public static int getOverScrollMode(android.view.View!);
-    method @Px public static int getPaddingEnd(android.view.View);
-    method @Px public static int getPaddingStart(android.view.View);
-    method public static android.view.ViewParent? getParentForAccessibility(android.view.View);
-    method @Deprecated public static float getPivotX(android.view.View!);
-    method @Deprecated public static float getPivotY(android.view.View!);
-    method public static androidx.core.view.WindowInsetsCompat? getRootWindowInsets(android.view.View);
-    method @Deprecated public static float getRotation(android.view.View!);
-    method @Deprecated public static float getRotationX(android.view.View!);
-    method @Deprecated public static float getRotationY(android.view.View!);
-    method @Deprecated public static float getScaleX(android.view.View!);
-    method @Deprecated public static float getScaleY(android.view.View!);
-    method public static int getScrollIndicators(android.view.View);
-    method @UiThread public static CharSequence? getStateDescription(android.view.View);
-    method public static java.util.List<android.graphics.Rect!> getSystemGestureExclusionRects(android.view.View);
-    method public static String? getTransitionName(android.view.View);
-    method @Deprecated public static float getTranslationX(android.view.View!);
-    method @Deprecated public static float getTranslationY(android.view.View!);
-    method public static float getTranslationZ(android.view.View);
-    method @Deprecated public static androidx.core.view.WindowInsetsControllerCompat? getWindowInsetsController(android.view.View);
-    method @Deprecated public static int getWindowSystemUiVisibility(android.view.View);
-    method @Deprecated public static float getX(android.view.View!);
-    method @Deprecated public static float getY(android.view.View!);
-    method public static float getZ(android.view.View);
-    method public static boolean hasAccessibilityDelegate(android.view.View);
-    method public static boolean hasExplicitFocusable(android.view.View);
-    method public static boolean hasNestedScrollingParent(android.view.View);
-    method public static boolean hasNestedScrollingParent(android.view.View, int);
-    method public static boolean hasOnClickListeners(android.view.View);
-    method public static boolean hasOverlappingRendering(android.view.View);
-    method public static boolean hasTransientState(android.view.View);
-    method @UiThread public static boolean isAccessibilityHeading(android.view.View);
-    method public static boolean isAttachedToWindow(android.view.View);
-    method public static boolean isFocusedByDefault(android.view.View);
-    method public static boolean isImportantForAccessibility(android.view.View);
-    method public static boolean isImportantForAutofill(android.view.View);
-    method public static boolean isInLayout(android.view.View);
-    method public static boolean isKeyboardNavigationCluster(android.view.View);
-    method public static boolean isLaidOut(android.view.View);
-    method public static boolean isLayoutDirectionResolved(android.view.View);
-    method public static boolean isNestedScrollingEnabled(android.view.View);
-    method @Deprecated public static boolean isOpaque(android.view.View!);
-    method public static boolean isPaddingRelative(android.view.View);
-    method @UiThread public static boolean isScreenReaderFocusable(android.view.View);
-    method @Deprecated public static void jumpDrawablesToCurrentState(android.view.View!);
-    method public static android.view.View? keyboardNavigationClusterSearch(android.view.View, android.view.View?, int);
-    method public static void offsetLeftAndRight(android.view.View, int);
-    method public static void offsetTopAndBottom(android.view.View, int);
-    method public static androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
-    method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
-    method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
-    method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
-    method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
-    method public static androidx.core.view.ContentInfoCompat? performReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
-    method public static void postInvalidateOnAnimation(android.view.View);
-    method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
-    method public static void postOnAnimation(android.view.View, Runnable);
-    method public static void postOnAnimationDelayed(android.view.View, Runnable, long);
-    method public static void removeAccessibilityAction(android.view.View, int);
-    method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
-    method public static void replaceAccessibilityAction(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat, CharSequence?, androidx.core.view.accessibility.AccessibilityViewCommand?);
-    method public static void requestApplyInsets(android.view.View);
-    method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
-    method @Deprecated public static int resolveSizeAndState(int, int, int);
-    method public static boolean restoreDefaultFocus(android.view.View);
-    method public static void saveAttributeDataForStyleable(android.view.View, android.content.Context, int[], android.util.AttributeSet?, android.content.res.TypedArray, int, int);
-    method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat?);
-    method @UiThread public static void setAccessibilityHeading(android.view.View, boolean);
-    method public static void setAccessibilityLiveRegion(android.view.View, int);
-    method @UiThread public static void setAccessibilityPaneTitle(android.view.View, CharSequence?);
-    method @Deprecated public static void setActivated(android.view.View!, boolean);
-    method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) float);
-    method public static void setAutofillHints(android.view.View, java.lang.String!...);
-    method public static void setBackground(android.view.View, android.graphics.drawable.Drawable?);
-    method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList?);
-    method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode?);
-    method @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
-    method public static void setClipBounds(android.view.View, android.graphics.Rect?);
-    method public static void setElevation(android.view.View, float);
-    method @Deprecated public static void setFitsSystemWindows(android.view.View!, boolean);
-    method public static void setFocusedByDefault(android.view.View, boolean);
-    method public static void setHasTransientState(android.view.View, boolean);
-    method @UiThread public static void setImportantForAccessibility(android.view.View, int);
-    method public static void setImportantForAutofill(android.view.View, int);
-    method public static void setKeyboardNavigationCluster(android.view.View, boolean);
-    method public static void setLabelFor(android.view.View, @IdRes int);
-    method public static void setLayerPaint(android.view.View, android.graphics.Paint?);
-    method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
-    method public static void setLayoutDirection(android.view.View, int);
-    method public static void setNestedScrollingEnabled(android.view.View, boolean);
-    method public static void setNextClusterForwardId(android.view.View, int);
-    method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener?);
-    method public static void setOnReceiveContentListener(android.view.View, String![]?, androidx.core.view.OnReceiveContentListener?);
-    method @Deprecated public static void setOverScrollMode(android.view.View!, int);
-    method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
-    method @Deprecated public static void setPivotX(android.view.View!, float);
-    method @Deprecated public static void setPivotY(android.view.View!, float);
-    method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat?);
-    method @Deprecated public static void setRotation(android.view.View!, float);
-    method @Deprecated public static void setRotationX(android.view.View!, float);
-    method @Deprecated public static void setRotationY(android.view.View!, float);
-    method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
-    method @Deprecated public static void setScaleX(android.view.View!, float);
-    method @Deprecated public static void setScaleY(android.view.View!, float);
-    method @UiThread public static void setScreenReaderFocusable(android.view.View, boolean);
-    method public static void setScrollIndicators(android.view.View, int);
-    method public static void setScrollIndicators(android.view.View, int, int);
-    method @UiThread public static void setStateDescription(android.view.View, CharSequence?);
-    method public static void setSystemGestureExclusionRects(android.view.View, java.util.List<android.graphics.Rect!>);
-    method public static void setTooltipText(android.view.View, CharSequence?);
-    method public static void setTransitionName(android.view.View, String?);
-    method @Deprecated public static void setTranslationX(android.view.View!, float);
-    method @Deprecated public static void setTranslationY(android.view.View!, float);
-    method public static void setTranslationZ(android.view.View, float);
-    method public static void setWindowInsetsAnimationCallback(android.view.View, androidx.core.view.WindowInsetsAnimationCompat.Callback?);
-    method @Deprecated public static void setX(android.view.View!, float);
-    method @Deprecated public static void setY(android.view.View!, float);
-    method public static void setZ(android.view.View, float);
-    method public static boolean startDragAndDrop(android.view.View, android.content.ClipData?, android.view.View.DragShadowBuilder, Object?, int);
-    method public static boolean startNestedScroll(android.view.View, int);
-    method public static boolean startNestedScroll(android.view.View, int, int);
-    method public static void stopNestedScroll(android.view.View);
-    method public static void stopNestedScroll(android.view.View, int);
-    method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
-    field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
-    field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
-    field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
-    field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
-    field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
-    field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
-    field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
-    field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
-    field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
-    field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
-    field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
-    field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
-    field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
-    field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
-    field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
-    field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
-    field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
-    field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
-    field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
-    field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
-    field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
-    field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
-    field public static final int SCROLL_AXIS_NONE = 0; // 0x0
-    field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
-    field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
-    field public static final int SCROLL_INDICATOR_END = 32; // 0x20
-    field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
-    field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
-    field public static final int SCROLL_INDICATOR_START = 16; // 0x10
-    field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
-    field public static final int TYPE_NON_TOUCH = 1; // 0x1
-    field public static final int TYPE_TOUCH = 0; // 0x0
-  }
-
-  public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
-    method public boolean onUnhandledKeyEvent(android.view.View, android.view.KeyEvent);
-  }
-
-  public final class ViewConfigurationCompat {
-    method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
-    method public static int getScaledHoverSlop(android.view.ViewConfiguration);
-    method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
-    method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
-    method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
-    method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration, android.content.Context);
-  }
-
-  public final class ViewGroupCompat {
-    method public static int getLayoutMode(android.view.ViewGroup);
-    method public static int getNestedScrollAxes(android.view.ViewGroup);
-    method public static boolean isTransitionGroup(android.view.ViewGroup);
-    method @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
-    method public static void setLayoutMode(android.view.ViewGroup, int);
-    method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
-    method public static void setTransitionGroup(android.view.ViewGroup, boolean);
-    field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
-    field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
-  }
-
-  public final class ViewParentCompat {
-    method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
-    method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
-    method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
-    method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
-    method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[], int);
-    method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
-    method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int);
-    method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int, int[]);
-    method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
-    method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int, int);
-    method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
-    method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int, int);
-    method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
-    method public static void onStopNestedScroll(android.view.ViewParent, android.view.View, int);
-    method @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
-  }
-
-  public final class ViewPropertyAnimatorCompat {
-    method public androidx.core.view.ViewPropertyAnimatorCompat alpha(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat alphaBy(float);
-    method public void cancel();
-    method public long getDuration();
-    method public android.view.animation.Interpolator? getInterpolator();
-    method public long getStartDelay();
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotation(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationX(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationXBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationY(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationYBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleX(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleXBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleY(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleYBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setDuration(long);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator?);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setListener(androidx.core.view.ViewPropertyAnimatorListener?);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setStartDelay(long);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener?);
-    method public void start();
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationX(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationXBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationY(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationYBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationZ(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationZBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat withEndAction(Runnable);
-    method public androidx.core.view.ViewPropertyAnimatorCompat withLayer();
-    method public androidx.core.view.ViewPropertyAnimatorCompat withStartAction(Runnable);
-    method public androidx.core.view.ViewPropertyAnimatorCompat x(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat xBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat y(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat yBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat z(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat zBy(float);
-  }
-
-  public interface ViewPropertyAnimatorListener {
-    method public void onAnimationCancel(android.view.View);
-    method public void onAnimationEnd(android.view.View);
-    method public void onAnimationStart(android.view.View);
-  }
-
-  public class ViewPropertyAnimatorListenerAdapter implements androidx.core.view.ViewPropertyAnimatorListener {
-    ctor public ViewPropertyAnimatorListenerAdapter();
-    method public void onAnimationCancel(android.view.View);
-    method public void onAnimationEnd(android.view.View);
-    method public void onAnimationStart(android.view.View);
-  }
-
-  public interface ViewPropertyAnimatorUpdateListener {
-    method public void onAnimationUpdate(android.view.View);
-  }
-
-  public final class WindowCompat {
-    method public static androidx.core.view.WindowInsetsControllerCompat getInsetsController(android.view.Window, android.view.View);
-    method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes int);
-    method public static void setDecorFitsSystemWindows(android.view.Window, boolean);
-    field public static final int FEATURE_ACTION_BAR = 8; // 0x8
-    field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
-    field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
-  }
-
-  public final class WindowInsetsAnimationCompat {
-    ctor public WindowInsetsAnimationCompat(int, android.view.animation.Interpolator?, long);
-    method @FloatRange(from=0.0f, to=1.0f) public float getAlpha();
-    method public long getDurationMillis();
-    method @FloatRange(from=0.0f, to=1.0f) public float getFraction();
-    method public float getInterpolatedFraction();
-    method public android.view.animation.Interpolator? getInterpolator();
-    method public int getTypeMask();
-    method public void setAlpha(@FloatRange(from=0.0f, to=1.0f) float);
-    method public void setFraction(@FloatRange(from=0.0f, to=1.0f) float);
-  }
-
-  public static final class WindowInsetsAnimationCompat.BoundsCompat {
-    ctor public WindowInsetsAnimationCompat.BoundsCompat(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
-    method public androidx.core.graphics.Insets getLowerBound();
-    method public androidx.core.graphics.Insets getUpperBound();
-    method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat inset(androidx.core.graphics.Insets);
-    method @RequiresApi(30) public android.view.WindowInsetsAnimation.Bounds toBounds();
-    method @RequiresApi(30) public static androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat toBoundsCompat(android.view.WindowInsetsAnimation.Bounds);
-  }
-
-  public abstract static class WindowInsetsAnimationCompat.Callback {
-    ctor public WindowInsetsAnimationCompat.Callback(int);
-    method public final int getDispatchMode();
-    method public void onEnd(androidx.core.view.WindowInsetsAnimationCompat);
-    method public void onPrepare(androidx.core.view.WindowInsetsAnimationCompat);
-    method public abstract androidx.core.view.WindowInsetsCompat onProgress(androidx.core.view.WindowInsetsCompat, java.util.List<androidx.core.view.WindowInsetsAnimationCompat!>);
-    method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat onStart(androidx.core.view.WindowInsetsAnimationCompat, androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat);
-    field public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1; // 0x1
-    field public static final int DISPATCH_MODE_STOP = 0; // 0x0
-  }
-
-  public interface WindowInsetsAnimationControlListenerCompat {
-    method public void onCancelled(androidx.core.view.WindowInsetsAnimationControllerCompat?);
-    method public void onFinished(androidx.core.view.WindowInsetsAnimationControllerCompat);
-    method public void onReady(androidx.core.view.WindowInsetsAnimationControllerCompat, int);
-  }
-
-  public final class WindowInsetsAnimationControllerCompat {
-    method public void finish(boolean);
-    method public float getCurrentAlpha();
-    method @FloatRange(from=0.0f, to=1.0f) public float getCurrentFraction();
-    method public androidx.core.graphics.Insets getCurrentInsets();
-    method public androidx.core.graphics.Insets getHiddenStateInsets();
-    method public androidx.core.graphics.Insets getShownStateInsets();
-    method public int getTypes();
-    method public boolean isCancelled();
-    method public boolean isFinished();
-    method public boolean isReady();
-    method public void setInsetsAndAlpha(androidx.core.graphics.Insets?, @FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float);
-  }
-
-  public class WindowInsetsCompat {
-    ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat?);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat consumeDisplayCutout();
-    method @Deprecated public androidx.core.view.WindowInsetsCompat consumeStableInsets();
-    method @Deprecated public androidx.core.view.WindowInsetsCompat consumeSystemWindowInsets();
-    method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
-    method public androidx.core.graphics.Insets getInsets(int);
-    method public androidx.core.graphics.Insets getInsetsIgnoringVisibility(int);
-    method @Deprecated public androidx.core.graphics.Insets getMandatorySystemGestureInsets();
-    method @Deprecated public int getStableInsetBottom();
-    method @Deprecated public int getStableInsetLeft();
-    method @Deprecated public int getStableInsetRight();
-    method @Deprecated public int getStableInsetTop();
-    method @Deprecated public androidx.core.graphics.Insets getStableInsets();
-    method @Deprecated public androidx.core.graphics.Insets getSystemGestureInsets();
-    method @Deprecated public int getSystemWindowInsetBottom();
-    method @Deprecated public int getSystemWindowInsetLeft();
-    method @Deprecated public int getSystemWindowInsetRight();
-    method @Deprecated public int getSystemWindowInsetTop();
-    method @Deprecated public androidx.core.graphics.Insets getSystemWindowInsets();
-    method @Deprecated public androidx.core.graphics.Insets getTappableElementInsets();
-    method public boolean hasInsets();
-    method @Deprecated public boolean hasStableInsets();
-    method @Deprecated public boolean hasSystemWindowInsets();
-    method public androidx.core.view.WindowInsetsCompat inset(androidx.core.graphics.Insets);
-    method public androidx.core.view.WindowInsetsCompat inset(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
-    method public boolean isConsumed();
-    method public boolean isRound();
-    method public boolean isVisible(int);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
-    method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
-    method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
-    method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets, android.view.View?);
-    field public static final androidx.core.view.WindowInsetsCompat CONSUMED;
-  }
-
-  public static final class WindowInsetsCompat.Builder {
-    ctor public WindowInsetsCompat.Builder();
-    ctor public WindowInsetsCompat.Builder(androidx.core.view.WindowInsetsCompat);
-    method public androidx.core.view.WindowInsetsCompat build();
-    method public androidx.core.view.WindowInsetsCompat.Builder setDisplayCutout(androidx.core.view.DisplayCutoutCompat?);
-    method public androidx.core.view.WindowInsetsCompat.Builder setInsets(int, androidx.core.graphics.Insets);
-    method public androidx.core.view.WindowInsetsCompat.Builder setInsetsIgnoringVisibility(int, androidx.core.graphics.Insets);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setMandatorySystemGestureInsets(androidx.core.graphics.Insets);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setStableInsets(androidx.core.graphics.Insets);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemGestureInsets(androidx.core.graphics.Insets);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemWindowInsets(androidx.core.graphics.Insets);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setTappableElementInsets(androidx.core.graphics.Insets);
-    method public androidx.core.view.WindowInsetsCompat.Builder setVisible(int, boolean);
-  }
-
-  public static final class WindowInsetsCompat.Type {
-    method public static int captionBar();
-    method public static int displayCutout();
-    method public static int ime();
-    method public static int mandatorySystemGestures();
-    method public static int navigationBars();
-    method public static int statusBars();
-    method public static int systemBars();
-    method public static int systemGestures();
-    method public static int tappableElement();
-  }
-
-  public final class WindowInsetsControllerCompat {
-    ctor public WindowInsetsControllerCompat(android.view.Window, android.view.View);
-    method public void addOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
-    method public void controlWindowInsetsAnimation(int, long, android.view.animation.Interpolator?, android.os.CancellationSignal?, androidx.core.view.WindowInsetsAnimationControlListenerCompat);
-    method public int getSystemBarsBehavior();
-    method public void hide(int);
-    method public boolean isAppearanceLightNavigationBars();
-    method public boolean isAppearanceLightStatusBars();
-    method public void removeOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
-    method public void setAppearanceLightNavigationBars(boolean);
-    method public void setAppearanceLightStatusBars(boolean);
-    method public void setSystemBarsBehavior(int);
-    method public void show(int);
-    method @Deprecated @RequiresApi(30) public static androidx.core.view.WindowInsetsControllerCompat toWindowInsetsControllerCompat(android.view.WindowInsetsController);
-    field public static final int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1; // 0x1
-    field public static final int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0; // 0x0
-    field public static final int BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE = 2; // 0x2
-  }
-
-  public static interface WindowInsetsControllerCompat.OnControllableInsetsChangedListener {
-    method public void onControllableInsetsChanged(androidx.core.view.WindowInsetsControllerCompat, int);
-  }
-
-}
-
-package androidx.core.view.accessibility {
-
-  public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
-    method public void onClick(android.view.View);
-  }
-
-  public final class AccessibilityEventCompat {
-    method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
-    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! asRecord(android.view.accessibility.AccessibilityEvent!);
-    method public static int getAction(android.view.accessibility.AccessibilityEvent);
-    method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
-    method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
-    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
-    method @Deprecated public static int getRecordCount(android.view.accessibility.AccessibilityEvent!);
-    method public static void setAction(android.view.accessibility.AccessibilityEvent, int);
-    method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
-    method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
-    field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
-    field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
-    field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
-    field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
-    field public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 64; // 0x40
-    field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
-    field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
-    field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
-    field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
-    field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
-    field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
-    field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
-    field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
-    field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
-    field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
-    field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
-    field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
-    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
-    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
-    field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
-    field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
-    field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
-    field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
-    field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
-    field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
-    field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
-    field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
-  }
-
-  public final class AccessibilityManagerCompat {
-    method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
-    method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
-    method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
-    method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
-    method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
-    method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
-    method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
-  }
-
-  @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
-    method @Deprecated public void onAccessibilityStateChanged(boolean);
-  }
-
-  @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
-    ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
-  }
-
-  public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
-    method public void onTouchExplorationStateChanged(boolean);
-  }
-
-  public class AccessibilityNodeInfoCompat {
-    ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
-    method public void addAction(int);
-    method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
-    method public void addChild(android.view.View!);
-    method public void addChild(android.view.View!, int);
-    method public boolean canOpenPopup();
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByText(String!);
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByViewId(String!);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
-    method public int getActions();
-    method public java.util.List<java.lang.String!> getAvailableExtraData();
-    method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
-    method public void getBoundsInScreen(android.graphics.Rect!);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
-    method public int getChildCount();
-    method public CharSequence! getClassName();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
-    method public CharSequence! getContentDescription();
-    method public int getDrawingOrder();
-    method public CharSequence! getError();
-    method public android.os.Bundle! getExtras();
-    method public CharSequence? getHintText();
-    method @Deprecated public Object! getInfo();
-    method public int getInputType();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
-    method public int getLiveRegion();
-    method public int getMaxTextLength();
-    method public int getMovementGranularities();
-    method public CharSequence! getPackageName();
-    method public CharSequence? getPaneTitle();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
-    method public CharSequence? getRoleDescription();
-    method public CharSequence? getStateDescription();
-    method public CharSequence! getText();
-    method public int getTextSelectionEnd();
-    method public int getTextSelectionStart();
-    method public CharSequence? getTooltipText();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
-    method public String! getViewIdResourceName();
-    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
-    method public int getWindowId();
-    method public boolean isAccessibilityFocused();
-    method public boolean isCheckable();
-    method public boolean isChecked();
-    method public boolean isClickable();
-    method public boolean isContentInvalid();
-    method public boolean isContextClickable();
-    method public boolean isDismissable();
-    method public boolean isEditable();
-    method public boolean isEnabled();
-    method public boolean isFocusable();
-    method public boolean isFocused();
-    method public boolean isHeading();
-    method public boolean isImportantForAccessibility();
-    method public boolean isLongClickable();
-    method public boolean isMultiLine();
-    method public boolean isPassword();
-    method public boolean isScreenReaderFocusable();
-    method public boolean isScrollable();
-    method public boolean isSelected();
-    method public boolean isShowingHintText();
-    method public boolean isTextEntryKey();
-    method public boolean isVisibleToUser();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
-    method public boolean performAction(int);
-    method public boolean performAction(int, android.os.Bundle!);
-    method public void recycle();
-    method public boolean refresh();
-    method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
-    method public boolean removeChild(android.view.View!);
-    method public boolean removeChild(android.view.View!, int);
-    method public void setAccessibilityFocused(boolean);
-    method public void setAvailableExtraData(java.util.List<java.lang.String!>);
-    method @Deprecated public void setBoundsInParent(android.graphics.Rect!);
-    method public void setBoundsInScreen(android.graphics.Rect!);
-    method public void setCanOpenPopup(boolean);
-    method public void setCheckable(boolean);
-    method public void setChecked(boolean);
-    method public void setClassName(CharSequence!);
-    method public void setClickable(boolean);
-    method public void setCollectionInfo(Object!);
-    method public void setCollectionItemInfo(Object!);
-    method public void setContentDescription(CharSequence!);
-    method public void setContentInvalid(boolean);
-    method public void setContextClickable(boolean);
-    method public void setDismissable(boolean);
-    method public void setDrawingOrder(int);
-    method public void setEditable(boolean);
-    method public void setEnabled(boolean);
-    method public void setError(CharSequence!);
-    method public void setFocusable(boolean);
-    method public void setFocused(boolean);
-    method public void setHeading(boolean);
-    method public void setHintText(CharSequence?);
-    method public void setImportantForAccessibility(boolean);
-    method public void setInputType(int);
-    method public void setLabelFor(android.view.View!);
-    method public void setLabelFor(android.view.View!, int);
-    method public void setLabeledBy(android.view.View!);
-    method public void setLabeledBy(android.view.View!, int);
-    method public void setLiveRegion(int);
-    method public void setLongClickable(boolean);
-    method public void setMaxTextLength(int);
-    method public void setMovementGranularities(int);
-    method public void setMultiLine(boolean);
-    method public void setPackageName(CharSequence!);
-    method public void setPaneTitle(CharSequence?);
-    method public void setParent(android.view.View!);
-    method public void setParent(android.view.View!, int);
-    method public void setPassword(boolean);
-    method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
-    method public void setRoleDescription(CharSequence?);
-    method public void setScreenReaderFocusable(boolean);
-    method public void setScrollable(boolean);
-    method public void setSelected(boolean);
-    method public void setShowingHintText(boolean);
-    method public void setSource(android.view.View!);
-    method public void setSource(android.view.View!, int);
-    method public void setStateDescription(CharSequence?);
-    method public void setText(CharSequence!);
-    method public void setTextEntryKey(boolean);
-    method public void setTextSelection(int, int);
-    method public void setTooltipText(CharSequence?);
-    method public void setTouchDelegateInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat);
-    method public void setTraversalAfter(android.view.View!);
-    method public void setTraversalAfter(android.view.View!, int);
-    method public void setTraversalBefore(android.view.View!);
-    method public void setTraversalBefore(android.view.View!, int);
-    method public void setViewIdResourceName(String!);
-    method public void setVisibleToUser(boolean);
-    method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
-    field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
-    field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
-    field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
-    field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
-    field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
-    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
-    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
-    field public static final String ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT = "android.view.accessibility.action.ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT";
-    field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
-    field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
-    field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
-    field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
-    field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
-    field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
-    field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
-    field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
-    field public static final int ACTION_CLICK = 16; // 0x10
-    field public static final int ACTION_COLLAPSE = 524288; // 0x80000
-    field public static final int ACTION_COPY = 16384; // 0x4000
-    field public static final int ACTION_CUT = 65536; // 0x10000
-    field public static final int ACTION_DISMISS = 1048576; // 0x100000
-    field public static final int ACTION_EXPAND = 262144; // 0x40000
-    field public static final int ACTION_FOCUS = 1; // 0x1
-    field public static final int ACTION_LONG_CLICK = 32; // 0x20
-    field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
-    field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
-    field public static final int ACTION_PASTE = 32768; // 0x8000
-    field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
-    field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
-    field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
-    field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
-    field public static final int ACTION_SELECT = 4; // 0x4
-    field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
-    field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
-    field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
-    field public static final int FOCUS_INPUT = 1; // 0x1
-    field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
-    field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
-    field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
-    field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
-    field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
-  }
-
-  public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
-    ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!);
-    method public int getId();
-    method public CharSequence! getLabel();
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_IME_ENTER;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_DOWN;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_LEFT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_RIGHT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_UP;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PRESS_AND_HOLD;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
-  }
-
-  public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
-    method public int getColumnCount();
-    method public int getRowCount();
-    method public int getSelectionMode();
-    method public boolean isHierarchical();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
-    field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
-    field public static final int SELECTION_MODE_NONE = 0; // 0x0
-    field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
-  }
-
-  public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
-    method public int getColumnIndex();
-    method public int getColumnSpan();
-    method public int getRowIndex();
-    method public int getRowSpan();
-    method @Deprecated public boolean isHeading();
-    method public boolean isSelected();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
-  }
-
-  public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
-    method public float getCurrent();
-    method public float getMax();
-    method public float getMin();
-    method public int getType();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! obtain(int, float, float, float);
-    field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
-    field public static final int RANGE_TYPE_INT = 0; // 0x0
-    field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
-  }
-
-  public static final class AccessibilityNodeInfoCompat.TouchDelegateInfoCompat {
-    ctor public AccessibilityNodeInfoCompat.TouchDelegateInfoCompat(java.util.Map<android.graphics.Region!,android.view.View!>);
-    method public android.graphics.Region? getRegionAt(@IntRange(from=0) int);
-    method @IntRange(from=0) public int getRegionCount();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getTargetForRegion(android.graphics.Region);
-  }
-
-  public class AccessibilityNodeProviderCompat {
-    ctor public AccessibilityNodeProviderCompat();
-    ctor public AccessibilityNodeProviderCompat(Object?);
-    method public void addExtraDataToAccessibilityNodeInfo(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat, String, android.os.Bundle?);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>? findAccessibilityNodeInfosByText(String, int);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
-    method public Object? getProvider();
-    method public boolean performAction(int, int, android.os.Bundle?);
-    field public static final int HOST_VIEW_ID = -1; // 0xffffffff
-  }
-
-  public class AccessibilityRecordCompat {
-    ctor @Deprecated public AccessibilityRecordCompat(Object!);
-    method @Deprecated public boolean equals(Object?);
-    method @Deprecated public int getAddedCount();
-    method @Deprecated public CharSequence! getBeforeText();
-    method @Deprecated public CharSequence! getClassName();
-    method @Deprecated public CharSequence! getContentDescription();
-    method @Deprecated public int getCurrentItemIndex();
-    method @Deprecated public int getFromIndex();
-    method @Deprecated public Object! getImpl();
-    method @Deprecated public int getItemCount();
-    method @Deprecated public int getMaxScrollX();
-    method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord);
-    method @Deprecated public int getMaxScrollY();
-    method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord);
-    method @Deprecated public android.os.Parcelable! getParcelableData();
-    method @Deprecated public int getRemovedCount();
-    method @Deprecated public int getScrollX();
-    method @Deprecated public int getScrollY();
-    method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
-    method @Deprecated public java.util.List<java.lang.CharSequence!>! getText();
-    method @Deprecated public int getToIndex();
-    method @Deprecated public int getWindowId();
-    method @Deprecated public int hashCode();
-    method @Deprecated public boolean isChecked();
-    method @Deprecated public boolean isEnabled();
-    method @Deprecated public boolean isFullScreen();
-    method @Deprecated public boolean isPassword();
-    method @Deprecated public boolean isScrollable();
-    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
-    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
-    method @Deprecated public void recycle();
-    method @Deprecated public void setAddedCount(int);
-    method @Deprecated public void setBeforeText(CharSequence!);
-    method @Deprecated public void setChecked(boolean);
-    method @Deprecated public void setClassName(CharSequence!);
-    method @Deprecated public void setContentDescription(CharSequence!);
-    method @Deprecated public void setCurrentItemIndex(int);
-    method @Deprecated public void setEnabled(boolean);
-    method @Deprecated public void setFromIndex(int);
-    method @Deprecated public void setFullScreen(boolean);
-    method @Deprecated public void setItemCount(int);
-    method @Deprecated public void setMaxScrollX(int);
-    method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
-    method @Deprecated public void setMaxScrollY(int);
-    method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
-    method @Deprecated public void setParcelableData(android.os.Parcelable!);
-    method @Deprecated public void setPassword(boolean);
-    method @Deprecated public void setRemovedCount(int);
-    method @Deprecated public void setScrollX(int);
-    method @Deprecated public void setScrollY(int);
-    method @Deprecated public void setScrollable(boolean);
-    method @Deprecated public void setSource(android.view.View!);
-    method @Deprecated public void setSource(android.view.View!, int);
-    method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
-    method @Deprecated public void setToIndex(int);
-  }
-
-  public interface AccessibilityViewCommand {
-    method public boolean perform(android.view.View, androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments?);
-  }
-
-  public abstract static class AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.CommandArguments();
-  }
-
-  public static final class AccessibilityViewCommand.MoveAtGranularityArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.MoveAtGranularityArguments();
-    method public boolean getExtendSelection();
-    method public int getGranularity();
-  }
-
-  public static final class AccessibilityViewCommand.MoveHtmlArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.MoveHtmlArguments();
-    method public String? getHTMLElement();
-  }
-
-  public static final class AccessibilityViewCommand.MoveWindowArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.MoveWindowArguments();
-    method public int getX();
-    method public int getY();
-  }
-
-  public static final class AccessibilityViewCommand.ScrollToPositionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.ScrollToPositionArguments();
-    method public int getColumn();
-    method public int getRow();
-  }
-
-  public static final class AccessibilityViewCommand.SetProgressArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.SetProgressArguments();
-    method public float getProgress();
-  }
-
-  public static final class AccessibilityViewCommand.SetSelectionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.SetSelectionArguments();
-    method public int getEnd();
-    method public int getStart();
-  }
-
-  public static final class AccessibilityViewCommand.SetTextArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.SetTextArguments();
-    method public CharSequence? getText();
-  }
-
-  public class AccessibilityWindowInfoCompat {
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getAnchor();
-    method public void getBoundsInScreen(android.graphics.Rect);
-    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
-    method public int getChildCount();
-    method public int getId();
-    method public int getLayer();
-    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
-    method public CharSequence? getTitle();
-    method public int getType();
-    method public boolean isAccessibilityFocused();
-    method public boolean isActive();
-    method public boolean isFocused();
-    method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
-    method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
-    method public void recycle();
-    field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
-    field public static final int TYPE_APPLICATION = 1; // 0x1
-    field public static final int TYPE_INPUT_METHOD = 2; // 0x2
-    field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
-    field public static final int TYPE_SYSTEM = 3; // 0x3
-  }
-
-}
-
-package androidx.core.view.animation {
-
-  public final class PathInterpolatorCompat {
-    method public static android.view.animation.Interpolator create(android.graphics.Path);
-    method public static android.view.animation.Interpolator create(float, float);
-    method public static android.view.animation.Interpolator create(float, float, float, float);
-  }
-
-}
-
-package androidx.core.view.inputmethod {
-
-  public final class EditorInfoCompat {
-    ctor @Deprecated public EditorInfoCompat();
-    method public static String![] getContentMimeTypes(android.view.inputmethod.EditorInfo);
-    method public static CharSequence? getInitialSelectedText(android.view.inputmethod.EditorInfo, int);
-    method public static CharSequence? getInitialTextAfterCursor(android.view.inputmethod.EditorInfo, int, int);
-    method public static CharSequence? getInitialTextBeforeCursor(android.view.inputmethod.EditorInfo, int, int);
-    method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, String![]?);
-    method public static void setInitialSurroundingSubText(android.view.inputmethod.EditorInfo, CharSequence, int);
-    method public static void setInitialSurroundingText(android.view.inputmethod.EditorInfo, CharSequence);
-    field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
-    field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
-  }
-
-  public final class InputConnectionCompat {
-    ctor @Deprecated public InputConnectionCompat();
-    method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
-    method @Deprecated public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
-    method public static android.view.inputmethod.InputConnection createWrapper(android.view.View, android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
-    field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
-  }
-
-  public static interface InputConnectionCompat.OnCommitContentListener {
-    method public boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
-  }
-
-  public final class InputContentInfoCompat {
-    ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri?);
-    method public android.net.Uri getContentUri();
-    method public android.content.ClipDescription getDescription();
-    method public android.net.Uri? getLinkUri();
-    method public void releasePermission();
-    method public void requestPermission();
-    method public Object? unwrap();
-    method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
-  }
-
-}
-
-package androidx.core.widget {
-
-  public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
-    ctor public AutoScrollHelper(android.view.View);
-    method public abstract boolean canTargetScrollHorizontally(int);
-    method public abstract boolean canTargetScrollVertically(int);
-    method public boolean isEnabled();
-    method public boolean isExclusive();
-    method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
-    method public abstract void scrollTargetBy(int, int);
-    method public androidx.core.widget.AutoScrollHelper setActivationDelay(int);
-    method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
-    method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
-    method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
-    method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
-    method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
-    method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
-    method public androidx.core.widget.AutoScrollHelper setRampDownDuration(int);
-    method public androidx.core.widget.AutoScrollHelper setRampUpDuration(int);
-    method public androidx.core.widget.AutoScrollHelper setRelativeEdges(float, float);
-    method public androidx.core.widget.AutoScrollHelper setRelativeVelocity(float, float);
-    field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
-    field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
-    field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
-    field public static final float NO_MAX = 3.4028235E38f;
-    field public static final float NO_MIN = 0.0f;
-    field public static final float RELATIVE_UNSPECIFIED = 0.0f;
-  }
-
-  public final class CheckedTextViewCompat {
-    method public static android.graphics.drawable.Drawable? getCheckMarkDrawable(android.widget.CheckedTextView);
-    method public static android.content.res.ColorStateList? getCheckMarkTintList(android.widget.CheckedTextView);
-    method public static android.graphics.PorterDuff.Mode? getCheckMarkTintMode(android.widget.CheckedTextView);
-    method public static void setCheckMarkTintList(android.widget.CheckedTextView, android.content.res.ColorStateList?);
-    method public static void setCheckMarkTintMode(android.widget.CheckedTextView, android.graphics.PorterDuff.Mode?);
-  }
-
-  public final class CompoundButtonCompat {
-    method public static android.graphics.drawable.Drawable? getButtonDrawable(android.widget.CompoundButton);
-    method public static android.content.res.ColorStateList? getButtonTintList(android.widget.CompoundButton);
-    method public static android.graphics.PorterDuff.Mode? getButtonTintMode(android.widget.CompoundButton);
-    method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList?);
-    method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode?);
-  }
-
-  public class ContentLoadingProgressBar extends android.widget.ProgressBar {
-    ctor public ContentLoadingProgressBar(android.content.Context);
-    ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
-    method public void hide();
-    method public void onAttachedToWindow();
-    method public void onDetachedFromWindow();
-    method public void show();
-  }
-
-  public final class EdgeEffectCompat {
-    ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
-    method public static android.widget.EdgeEffect create(android.content.Context, android.util.AttributeSet?);
-    method @Deprecated public boolean draw(android.graphics.Canvas!);
-    method @Deprecated public void finish();
-    method public static float getDistance(android.widget.EdgeEffect);
-    method @Deprecated public boolean isFinished();
-    method @Deprecated public boolean onAbsorb(int);
-    method @Deprecated public boolean onPull(float);
-    method @Deprecated public boolean onPull(float, float);
-    method public static void onPull(android.widget.EdgeEffect, float, float);
-    method public static float onPullDistance(android.widget.EdgeEffect, float, float);
-    method @Deprecated public boolean onRelease();
-    method @Deprecated public void setSize(int, int);
-  }
-
-  public class ImageViewCompat {
-    method public static android.content.res.ColorStateList? getImageTintList(android.widget.ImageView);
-    method public static android.graphics.PorterDuff.Mode? getImageTintMode(android.widget.ImageView);
-    method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList?);
-    method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode?);
-  }
-
-  public final class ListPopupWindowCompat {
-    method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
-    method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
-  }
-
-  public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
-    ctor public ListViewAutoScrollHelper(android.widget.ListView);
-    method public boolean canTargetScrollHorizontally(int);
-    method public boolean canTargetScrollVertically(int);
-    method public void scrollTargetBy(int, int);
-  }
-
-  public final class ListViewCompat {
-    method public static boolean canScrollList(android.widget.ListView, int);
-    method public static void scrollListBy(android.widget.ListView, int);
-  }
-
-  public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
-    ctor public NestedScrollView(android.content.Context);
-    ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?);
-    ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?, int);
-    method public boolean arrowScroll(int);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
-    method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
-    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
-    method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
-    method public boolean executeKeyEvent(android.view.KeyEvent);
-    method public void fling(int);
-    method public boolean fullScroll(int);
-    method public int getMaxScrollAmount();
-    method public boolean hasNestedScrollingParent(int);
-    method public boolean isFillViewport();
-    method public boolean isSmoothScrollingEnabled();
-    method public void onAttachedToWindow();
-    method public void onNestedPreScroll(android.view.View, int, int, int[], int);
-    method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
-    method public void onNestedScroll(android.view.View, int, int, int, int, int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
-    method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
-    method public void onStopNestedScroll(android.view.View, int);
-    method public boolean pageScroll(int);
-    method public void setFillViewport(boolean);
-    method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener?);
-    method public void setSmoothScrollingEnabled(boolean);
-    method public final void smoothScrollBy(int, int);
-    method public final void smoothScrollBy(int, int, int);
-    method public final void smoothScrollTo(int, int);
-    method public final void smoothScrollTo(int, int, int);
-    method public boolean startNestedScroll(int, int);
-    method public void stopNestedScroll(int);
-  }
-
-  public static interface NestedScrollView.OnScrollChangeListener {
-    method public void onScrollChange(androidx.core.widget.NestedScrollView, int, int, int, int);
-  }
-
-  public final class PopupMenuCompat {
-    method public static android.view.View.OnTouchListener? getDragToOpenListener(Object);
-  }
-
-  public final class PopupWindowCompat {
-    method public static boolean getOverlapAnchor(android.widget.PopupWindow);
-    method public static int getWindowLayoutType(android.widget.PopupWindow);
-    method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
-    method public static void setWindowLayoutType(android.widget.PopupWindow, int);
-    method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
-  }
-
-  @Deprecated public final class ScrollerCompat {
-    method @Deprecated public void abortAnimation();
-    method @Deprecated public boolean computeScrollOffset();
-    method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
-    method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
-    method @Deprecated public void fling(int, int, int, int, int, int, int, int);
-    method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
-    method @Deprecated public float getCurrVelocity();
-    method @Deprecated public int getCurrX();
-    method @Deprecated public int getCurrY();
-    method @Deprecated public int getFinalX();
-    method @Deprecated public int getFinalY();
-    method @Deprecated public boolean isFinished();
-    method @Deprecated public boolean isOverScrolled();
-    method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
-    method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
-    method @Deprecated public boolean springBack(int, int, int, int, int, int);
-    method @Deprecated public void startScroll(int, int, int, int);
-    method @Deprecated public void startScroll(int, int, int, int, int);
-  }
-
-  public final class TextViewCompat {
-    method public static int getAutoSizeMaxTextSize(android.widget.TextView);
-    method public static int getAutoSizeMinTextSize(android.widget.TextView);
-    method public static int getAutoSizeStepGranularity(android.widget.TextView);
-    method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
-    method public static int getAutoSizeTextType(android.widget.TextView);
-    method public static android.content.res.ColorStateList? getCompoundDrawableTintList(android.widget.TextView);
-    method public static android.graphics.PorterDuff.Mode? getCompoundDrawableTintMode(android.widget.TextView);
-    method public static android.graphics.drawable.Drawable![] getCompoundDrawablesRelative(android.widget.TextView);
-    method public static int getFirstBaselineToTopHeight(android.widget.TextView);
-    method public static int getLastBaselineToBottomHeight(android.widget.TextView);
-    method public static int getMaxLines(android.widget.TextView);
-    method public static int getMinLines(android.widget.TextView);
-    method public static androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParams(android.widget.TextView);
-    method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
-    method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
-    method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
-    method public static void setCompoundDrawableTintList(android.widget.TextView, android.content.res.ColorStateList?);
-    method public static void setCompoundDrawableTintMode(android.widget.TextView, android.graphics.PorterDuff.Mode?);
-    method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
-    method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
-    method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
-    method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
-    method public static void setFirstBaselineToTopHeight(android.widget.TextView, @IntRange(from=0) @Px int);
-    method public static void setLastBaselineToBottomHeight(android.widget.TextView, @IntRange(from=0) @Px int);
-    method public static void setLineHeight(android.widget.TextView, @IntRange(from=0) @Px int);
-    method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
-    method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
-    method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
-    field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
-    field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
-  }
-
-  public interface TintableCompoundButton {
-    method public android.content.res.ColorStateList? getSupportButtonTintList();
-    method public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
-    method public void setSupportButtonTintList(android.content.res.ColorStateList?);
-    method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
-  }
-
-  public interface TintableCompoundDrawablesView {
-    method public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
-    method public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
-    method public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
-    method public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
-  }
-
-}
-
diff --git a/core/core/api/current.txt b/core/core/api/current.txt
index c80fec8..9a52abd4 100644
--- a/core/core/api/current.txt
+++ b/core/core/api/current.txt
@@ -167,6 +167,10 @@
     method @Deprecated public void setInterruptIfStopped(boolean);
   }
 
+  public final class LocaleManagerCompat {
+    method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
+  }
+
   public final class MultiWindowModeChangedInfo {
     ctor public MultiWindowModeChangedInfo(boolean);
     ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
@@ -768,8 +772,8 @@
     method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroupsCompat();
     method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
     method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannelsCompat();
-    method public void notify(int, android.app.Notification);
-    method public void notify(String?, int, android.app.Notification);
+    method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(int, android.app.Notification);
+    method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(String?, int, android.app.Notification);
     field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
     field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
     field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
@@ -1012,10 +1016,15 @@
     method public static <T> T? getSystemService(android.content.Context, Class<T!>);
     method public static String? getSystemServiceName(android.content.Context, Class<?>);
     method public static boolean isDeviceProtectedStorage(android.content.Context);
+    method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, int);
+    method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, String?, android.os.Handler?, int);
     method public static boolean startActivities(android.content.Context, android.content.Intent![]);
     method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
     method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
     method public static void startForegroundService(android.content.Context, android.content.Intent);
+    field public static final int RECEIVER_EXPORTED = 2; // 0x2
+    field public static final int RECEIVER_NOT_EXPORTED = 4; // 0x4
+    field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
   }
 
   public class FileProvider extends android.content.ContentProvider {
@@ -1751,6 +1760,7 @@
     method public java.util.Locale? getFirstMatch(String![]);
     method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
     method public boolean isEmpty();
+    method @RequiresApi(21) public static boolean matchesLanguageAndScript(java.util.Locale, java.util.Locale);
     method @IntRange(from=0) public int size();
     method public String toLanguageTags();
     method public Object? unwrap();
@@ -1769,7 +1779,18 @@
   }
 
   public final class ParcelCompat {
+    method public static <T> T![]? readArray(android.os.Parcel, ClassLoader?, Class<T!>);
+    method public static <T> java.util.ArrayList<T!>? readArrayList(android.os.Parcel, ClassLoader?, Class<? extends T>);
     method public static boolean readBoolean(android.os.Parcel);
+    method public static <K, V> java.util.HashMap<K!,V!>? readHashMap(android.os.Parcel, ClassLoader?, Class<? extends K>, Class<? extends V>);
+    method public static <T> void readList(android.os.Parcel, java.util.List<? super T>, ClassLoader?, Class<T!>);
+    method public static <K, V> void readMap(android.os.Parcel, java.util.Map<? super K,? super V>, ClassLoader?, Class<K!>, Class<V!>);
+    method public static <T extends android.os.Parcelable> T? readParcelable(android.os.Parcel, ClassLoader?, Class<T!>);
+    method public static <T> T![]? readParcelableArray(android.os.Parcel, ClassLoader?, Class<T!>);
+    method @RequiresApi(30) public static <T> android.os.Parcelable.Creator<T!>? readParcelableCreator(android.os.Parcel, ClassLoader?, Class<T!>);
+    method @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public static <T> java.util.List<T!> readParcelableList(android.os.Parcel, java.util.List<T!>, ClassLoader?, Class<T!>);
+    method public static <T extends java.io.Serializable> T? readSerializable(android.os.Parcel, ClassLoader?, Class<T!>);
+    method public static <T> android.util.SparseArray<T!>? readSparseArray(android.os.Parcel, ClassLoader?, Class<? extends T>);
     method public static void writeBoolean(android.os.Parcel, boolean);
   }
 
@@ -3038,6 +3059,9 @@
     method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
     method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
     field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
     field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
     field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
     field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
@@ -3100,7 +3124,7 @@
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
     method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
-    method public int getActions();
+    method @Deprecated public int getActions();
     method public java.util.List<java.lang.String!> getAvailableExtraData();
     method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
     method public void getBoundsInScreen(android.graphics.Rect!);
@@ -3112,6 +3136,7 @@
     method public CharSequence! getContentDescription();
     method public int getDrawingOrder();
     method public CharSequence! getError();
+    method public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo? getExtraRenderingInfo();
     method public android.os.Bundle! getExtras();
     method public CharSequence? getHintText();
     method @Deprecated public Object! getInfo();
@@ -3134,6 +3159,7 @@
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+    method public String? getUniqueId();
     method public String! getViewIdResourceName();
     method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
     method public int getWindowId();
@@ -3227,6 +3253,7 @@
     method public void setTraversalAfter(android.view.View!, int);
     method public void setTraversalBefore(android.view.View!);
     method public void setTraversalBefore(android.view.View!, int);
+    method public void setUniqueId(String?);
     method public void setViewIdResourceName(String!);
     method public void setVisibleToUser(boolean);
     method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
@@ -3292,6 +3319,9 @@
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_CANCEL;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_DROP;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_START;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
@@ -3486,18 +3516,22 @@
     method public void getBoundsInScreen(android.graphics.Rect);
     method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
     method public int getChildCount();
+    method public int getDisplayId();
     method public int getId();
     method public int getLayer();
     method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
+    method public void getRegionInScreen(android.graphics.Region);
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
     method public CharSequence? getTitle();
     method public int getType();
     method public boolean isAccessibilityFocused();
     method public boolean isActive();
     method public boolean isFocused();
+    method public boolean isInPictureInPictureMode();
     method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
     method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
     method public void recycle();
+    method public android.view.accessibility.AccessibilityWindowInfo? unwrap();
     field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
     field public static final int TYPE_APPLICATION = 1; // 0x1
     field public static final int TYPE_INPUT_METHOD = 2; // 0x2
diff --git a/core/core/api/public_plus_experimental_1.8.0-beta02.txt b/core/core/api/public_plus_experimental_1.8.0-beta02.txt
index 8ea9b73..abd1c17 100644
--- a/core/core/api/public_plus_experimental_1.8.0-beta02.txt
+++ b/core/core/api/public_plus_experimental_1.8.0-beta02.txt
@@ -1690,8 +1690,8 @@
     method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
     method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
     method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
-    method @Deprecated @ChecksSdkIntAtLeast(api=32, codename="Sv2") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastSv2();
-    method @Deprecated @ChecksSdkIntAtLeast(codename="Tiramisu") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastT();
+    method @ChecksSdkIntAtLeast(api=32, codename="Sv2") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastSv2();
+    method @ChecksSdkIntAtLeast(codename="Tiramisu") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastT();
   }
 
   @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public static @interface BuildCompat.PrereleaseSdkCheck {
diff --git a/core/core/api/public_plus_experimental_current.txt b/core/core/api/public_plus_experimental_current.txt
index 4ffe2f0..52f7cbc 100644
--- a/core/core/api/public_plus_experimental_current.txt
+++ b/core/core/api/public_plus_experimental_current.txt
@@ -167,6 +167,10 @@
     method @Deprecated public void setInterruptIfStopped(boolean);
   }
 
+  public final class LocaleManagerCompat {
+    method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
+  }
+
   public final class MultiWindowModeChangedInfo {
     ctor public MultiWindowModeChangedInfo(boolean);
     ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
@@ -768,8 +772,8 @@
     method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroupsCompat();
     method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
     method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannelsCompat();
-    method public void notify(int, android.app.Notification);
-    method public void notify(String?, int, android.app.Notification);
+    method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(int, android.app.Notification);
+    method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(String?, int, android.app.Notification);
     field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
     field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
     field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
@@ -1012,10 +1016,15 @@
     method public static <T> T? getSystemService(android.content.Context, Class<T!>);
     method public static String? getSystemServiceName(android.content.Context, Class<?>);
     method public static boolean isDeviceProtectedStorage(android.content.Context);
+    method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, int);
+    method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, String?, android.os.Handler?, int);
     method public static boolean startActivities(android.content.Context, android.content.Intent![]);
     method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
     method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
     method public static void startForegroundService(android.content.Context, android.content.Intent);
+    field public static final int RECEIVER_EXPORTED = 2; // 0x2
+    field public static final int RECEIVER_NOT_EXPORTED = 4; // 0x4
+    field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
   }
 
   public class FileProvider extends android.content.ContentProvider {
@@ -1757,6 +1766,7 @@
     method public java.util.Locale? getFirstMatch(String![]);
     method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
     method public boolean isEmpty();
+    method @RequiresApi(21) public static boolean matchesLanguageAndScript(java.util.Locale, java.util.Locale);
     method @IntRange(from=0) public int size();
     method public String toLanguageTags();
     method public Object? unwrap();
@@ -1775,7 +1785,18 @@
   }
 
   public final class ParcelCompat {
+    method public static <T> T![]? readArray(android.os.Parcel, ClassLoader?, Class<T!>);
+    method public static <T> java.util.ArrayList<T!>? readArrayList(android.os.Parcel, ClassLoader?, Class<? extends T>);
     method public static boolean readBoolean(android.os.Parcel);
+    method public static <K, V> java.util.HashMap<K!,V!>? readHashMap(android.os.Parcel, ClassLoader?, Class<? extends K>, Class<? extends V>);
+    method public static <T> void readList(android.os.Parcel, java.util.List<? super T>, ClassLoader?, Class<T!>);
+    method public static <K, V> void readMap(android.os.Parcel, java.util.Map<? super K,? super V>, ClassLoader?, Class<K!>, Class<V!>);
+    method public static <T extends android.os.Parcelable> T? readParcelable(android.os.Parcel, ClassLoader?, Class<T!>);
+    method public static <T> T![]? readParcelableArray(android.os.Parcel, ClassLoader?, Class<T!>);
+    method @RequiresApi(30) public static <T> android.os.Parcelable.Creator<T!>? readParcelableCreator(android.os.Parcel, ClassLoader?, Class<T!>);
+    method @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public static <T> java.util.List<T!> readParcelableList(android.os.Parcel, java.util.List<T!>, ClassLoader?, Class<T!>);
+    method public static <T extends java.io.Serializable> T? readSerializable(android.os.Parcel, ClassLoader?, Class<T!>);
+    method public static <T> android.util.SparseArray<T!>? readSparseArray(android.os.Parcel, ClassLoader?, Class<? extends T>);
     method public static void writeBoolean(android.os.Parcel, boolean);
   }
 
@@ -3044,6 +3065,9 @@
     method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
     method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
     field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
     field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
     field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
     field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
@@ -3106,7 +3130,7 @@
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
     method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
-    method public int getActions();
+    method @Deprecated public int getActions();
     method public java.util.List<java.lang.String!> getAvailableExtraData();
     method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
     method public void getBoundsInScreen(android.graphics.Rect!);
@@ -3118,6 +3142,7 @@
     method public CharSequence! getContentDescription();
     method public int getDrawingOrder();
     method public CharSequence! getError();
+    method public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo? getExtraRenderingInfo();
     method public android.os.Bundle! getExtras();
     method public CharSequence? getHintText();
     method @Deprecated public Object! getInfo();
@@ -3140,6 +3165,7 @@
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+    method public String? getUniqueId();
     method public String! getViewIdResourceName();
     method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
     method public int getWindowId();
@@ -3233,6 +3259,7 @@
     method public void setTraversalAfter(android.view.View!, int);
     method public void setTraversalBefore(android.view.View!);
     method public void setTraversalBefore(android.view.View!, int);
+    method public void setUniqueId(String?);
     method public void setViewIdResourceName(String!);
     method public void setVisibleToUser(boolean);
     method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
@@ -3298,6 +3325,9 @@
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_CANCEL;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_DROP;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_START;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
@@ -3492,18 +3522,22 @@
     method public void getBoundsInScreen(android.graphics.Rect);
     method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
     method public int getChildCount();
+    method public int getDisplayId();
     method public int getId();
     method public int getLayer();
     method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
+    method public void getRegionInScreen(android.graphics.Region);
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
     method public CharSequence? getTitle();
     method public int getType();
     method public boolean isAccessibilityFocused();
     method public boolean isActive();
     method public boolean isFocused();
+    method public boolean isInPictureInPictureMode();
     method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
     method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
     method public void recycle();
+    method public android.view.accessibility.AccessibilityWindowInfo? unwrap();
     field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
     field public static final int TYPE_APPLICATION = 1; // 0x1
     field public static final int TYPE_INPUT_METHOD = 2; // 0x2
diff --git a/core/core/api/res-1.8.0-beta01.txt b/core/core/api/res-1.8.0-beta01.txt
deleted file mode 100644
index dd913d3..0000000
--- a/core/core/api/res-1.8.0-beta01.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-attr alpha
-attr font
-attr fontProviderAuthority
-attr fontProviderCerts
-attr fontProviderFetchStrategy
-attr fontProviderFetchTimeout
-attr fontProviderPackage
-attr fontProviderQuery
-attr fontProviderSystemFontFamily
-attr fontStyle
-attr fontVariationSettings
-attr fontWeight
-attr lStar
-attr queryPatterns
-attr shortcutMatchRequired
-attr ttcIndex
-style TextAppearance_Compat_Notification
-style TextAppearance_Compat_Notification_Info
-style TextAppearance_Compat_Notification_Line2
-style TextAppearance_Compat_Notification_Time
-style TextAppearance_Compat_Notification_Title
diff --git a/core/core/api/restricted_1.8.0-beta01.txt b/core/core/api/restricted_1.8.0-beta01.txt
deleted file mode 100644
index ec250b5..0000000
--- a/core/core/api/restricted_1.8.0-beta01.txt
+++ /dev/null
@@ -1,4263 +0,0 @@
-// Signature format: 4.0
-package android.support.v4.os {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ResultReceiver implements android.os.Parcelable {
-    ctor public ResultReceiver(android.os.Handler!);
-    method public int describeContents();
-    method protected void onReceiveResult(int, android.os.Bundle!);
-    method public void send(int, android.os.Bundle!);
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.support.v4.os.ResultReceiver!>! CREATOR;
-  }
-
-}
-
-package androidx.core.accessibilityservice {
-
-  public final class AccessibilityServiceInfoCompat {
-    method public static String capabilityToString(int);
-    method public static String feedbackTypeToString(int);
-    method public static String? flagToString(int);
-    method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
-    method public static String? loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
-    field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
-    field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
-    field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
-    field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
-    field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
-    field public static final int FEEDBACK_BRAILLE = 32; // 0x20
-    field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
-    field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
-    field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
-    field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
-    field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
-  }
-
-}
-
-package androidx.core.app {
-
-  public class ActivityCompat extends androidx.core.content.ContextCompat {
-    ctor protected ActivityCompat();
-    method public static void finishAffinity(android.app.Activity);
-    method public static void finishAfterTransition(android.app.Activity);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.ActivityCompat.PermissionCompatDelegate? getPermissionCompatDelegate();
-    method public static android.net.Uri? getReferrer(android.app.Activity);
-    method @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
-    method public static boolean isLaunchedFromBubble(android.app.Activity);
-    method public static void postponeEnterTransition(android.app.Activity);
-    method public static void recreate(android.app.Activity);
-    method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
-    method public static void requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
-    method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
-    method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
-    method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
-    method public static void setLocusContext(android.app.Activity, androidx.core.content.LocusIdCompat?, android.os.Bundle?);
-    method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
-    method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, String);
-    method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle?);
-    method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
-    method public static void startPostponedEnterTransition(android.app.Activity);
-  }
-
-  public static interface ActivityCompat.OnRequestPermissionsResultCallback {
-    method public void onRequestPermissionsResult(int, String![], int[]);
-  }
-
-  public static interface ActivityCompat.PermissionCompatDelegate {
-    method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
-    method public boolean requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ActivityCompat.RequestPermissionsRequestCodeValidator {
-    method public void validateRequestPermissionsRequestCode(int);
-  }
-
-  public final class ActivityManagerCompat {
-    method public static boolean isLowRamDevice(android.app.ActivityManager);
-  }
-
-  public class ActivityOptionsCompat {
-    ctor protected ActivityOptionsCompat();
-    method public android.graphics.Rect? getLaunchBounds();
-    method public static androidx.core.app.ActivityOptionsCompat makeBasic();
-    method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
-    method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
-    method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
-    method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
-    method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View!,java.lang.String!>!...);
-    method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
-    method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
-    method public void requestUsageTimeReport(android.app.PendingIntent);
-    method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
-    method public android.os.Bundle? toBundle();
-    method public void update(androidx.core.app.ActivityOptionsCompat);
-    field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
-    field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
-  }
-
-  public final class AlarmManagerCompat {
-    method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
-    method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
-    method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
-    method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
-  }
-
-  @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
-    ctor public AppComponentFactory();
-    method public final android.app.Activity instantiateActivity(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.app.Application instantiateApplication(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.content.ContentProvider instantiateProvider(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.content.BroadcastReceiver instantiateReceiver(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public final android.app.Service instantiateService(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
-  }
-
-  public class AppLaunchChecker {
-    ctor @Deprecated public AppLaunchChecker();
-    method public static boolean hasStartedFromLauncher(android.content.Context);
-    method public static void onActivityCreate(android.app.Activity);
-  }
-
-  public final class AppOpsManagerCompat {
-    method public static int checkOrNoteProxyOp(android.content.Context, int, String, String);
-    method public static int noteOp(android.content.Context, String, int, String);
-    method public static int noteOpNoThrow(android.content.Context, String, int, String);
-    method public static int noteProxyOp(android.content.Context, String, String);
-    method public static int noteProxyOpNoThrow(android.content.Context, String, String);
-    method public static String? permissionToOp(String);
-    field public static final int MODE_ALLOWED = 0; // 0x0
-    field public static final int MODE_DEFAULT = 3; // 0x3
-    field public static final int MODE_ERRORED = 2; // 0x2
-    field public static final int MODE_IGNORED = 1; // 0x1
-  }
-
-  public final class BundleCompat {
-    method public static android.os.IBinder? getBinder(android.os.Bundle, String?);
-    method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ComponentActivity extends android.app.Activity implements androidx.core.view.KeyEventDispatcher.Component androidx.lifecycle.LifecycleOwner {
-    ctor public ComponentActivity();
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public <T extends androidx.core.app.ComponentActivity.ExtraData> T! getExtraData(Class<T!>!);
-    method public androidx.lifecycle.Lifecycle getLifecycle();
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void putExtraData(androidx.core.app.ComponentActivity.ExtraData!);
-    method protected final boolean shouldDumpInternalState(String![]?);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean superDispatchKeyEvent(android.view.KeyEvent);
-  }
-
-  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class ComponentActivity.ExtraData {
-    ctor @Deprecated public ComponentActivity.ExtraData();
-  }
-
-  @RequiresApi(api=28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class CoreComponentFactory extends android.app.AppComponentFactory {
-    ctor public CoreComponentFactory();
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface CoreComponentFactory.CompatWrapped {
-    method public Object! getWrapper();
-  }
-
-  public class DialogCompat {
-    method public static android.view.View requireViewById(android.app.Dialog, int);
-  }
-
-  public class FrameMetricsAggregator {
-    ctor public FrameMetricsAggregator();
-    ctor public FrameMetricsAggregator(@androidx.core.app.FrameMetricsAggregator.MetricType int);
-    method public void add(android.app.Activity);
-    method public android.util.SparseIntArray![]? getMetrics();
-    method public android.util.SparseIntArray![]? remove(android.app.Activity);
-    method public android.util.SparseIntArray![]? reset();
-    method public android.util.SparseIntArray![]? stop();
-    field public static final int ANIMATION_DURATION = 256; // 0x100
-    field public static final int ANIMATION_INDEX = 8; // 0x8
-    field public static final int COMMAND_DURATION = 32; // 0x20
-    field public static final int COMMAND_INDEX = 5; // 0x5
-    field public static final int DELAY_DURATION = 128; // 0x80
-    field public static final int DELAY_INDEX = 7; // 0x7
-    field public static final int DRAW_DURATION = 8; // 0x8
-    field public static final int DRAW_INDEX = 3; // 0x3
-    field public static final int EVERY_DURATION = 511; // 0x1ff
-    field public static final int INPUT_DURATION = 2; // 0x2
-    field public static final int INPUT_INDEX = 1; // 0x1
-    field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
-    field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
-    field public static final int SWAP_DURATION = 64; // 0x40
-    field public static final int SWAP_INDEX = 6; // 0x6
-    field public static final int SYNC_DURATION = 16; // 0x10
-    field public static final int SYNC_INDEX = 4; // 0x4
-    field public static final int TOTAL_DURATION = 1; // 0x1
-    field public static final int TOTAL_INDEX = 0; // 0x0
-  }
-
-  @IntDef(flag=true, value={androidx.core.app.FrameMetricsAggregator.TOTAL_DURATION, androidx.core.app.FrameMetricsAggregator.INPUT_DURATION, androidx.core.app.FrameMetricsAggregator.LAYOUT_MEASURE_DURATION, androidx.core.app.FrameMetricsAggregator.DRAW_DURATION, androidx.core.app.FrameMetricsAggregator.SYNC_DURATION, androidx.core.app.FrameMetricsAggregator.COMMAND_DURATION, androidx.core.app.FrameMetricsAggregator.SWAP_DURATION, androidx.core.app.FrameMetricsAggregator.DELAY_DURATION, androidx.core.app.FrameMetricsAggregator.ANIMATION_DURATION, androidx.core.app.FrameMetricsAggregator.EVERY_DURATION}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FrameMetricsAggregator.MetricType {
-  }
-
-  @Deprecated public abstract class JobIntentService extends android.app.Service {
-    ctor @Deprecated public JobIntentService();
-    method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
-    method @Deprecated public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
-    method @Deprecated public boolean isStopped();
-    method @Deprecated public android.os.IBinder! onBind(android.content.Intent);
-    method @Deprecated protected abstract void onHandleWork(android.content.Intent);
-    method @Deprecated public boolean onStopCurrentWork();
-    method @Deprecated public void setInterruptIfStopped(boolean);
-  }
-
-  public final class MultiWindowModeChangedInfo {
-    ctor public MultiWindowModeChangedInfo(boolean);
-    ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
-    method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
-    method public boolean isInMultiWindowMode();
-  }
-
-  public final class NavUtils {
-    method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
-    method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
-    method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
-    method public static String? getParentActivityName(android.app.Activity);
-    method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
-    method public static void navigateUpFromSameTask(android.app.Activity);
-    method public static void navigateUpTo(android.app.Activity, android.content.Intent);
-    method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
-    field public static final String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface NotificationBuilderWithBuilderAccessor {
-    method public android.app.Notification.Builder! getBuilder();
-  }
-
-  public class NotificationChannelCompat {
-    method public boolean canBubble();
-    method public boolean canBypassDnd();
-    method public boolean canShowBadge();
-    method public android.media.AudioAttributes? getAudioAttributes();
-    method public String? getConversationId();
-    method public String? getDescription();
-    method public String? getGroup();
-    method public String getId();
-    method public int getImportance();
-    method public int getLightColor();
-    method @androidx.core.app.NotificationCompat.NotificationVisibility public int getLockscreenVisibility();
-    method public CharSequence? getName();
-    method public String? getParentChannelId();
-    method public android.net.Uri? getSound();
-    method public long[]? getVibrationPattern();
-    method public boolean isImportantConversation();
-    method public boolean shouldShowLights();
-    method public boolean shouldVibrate();
-    method public androidx.core.app.NotificationChannelCompat.Builder toBuilder();
-    field public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
-  }
-
-  public static class NotificationChannelCompat.Builder {
-    ctor public NotificationChannelCompat.Builder(String, int);
-    method public androidx.core.app.NotificationChannelCompat build();
-    method public androidx.core.app.NotificationChannelCompat.Builder setConversationId(String, String);
-    method public androidx.core.app.NotificationChannelCompat.Builder setDescription(String?);
-    method public androidx.core.app.NotificationChannelCompat.Builder setGroup(String?);
-    method public androidx.core.app.NotificationChannelCompat.Builder setImportance(int);
-    method public androidx.core.app.NotificationChannelCompat.Builder setLightColor(int);
-    method public androidx.core.app.NotificationChannelCompat.Builder setLightsEnabled(boolean);
-    method public androidx.core.app.NotificationChannelCompat.Builder setName(CharSequence?);
-    method public androidx.core.app.NotificationChannelCompat.Builder setShowBadge(boolean);
-    method public androidx.core.app.NotificationChannelCompat.Builder setSound(android.net.Uri?, android.media.AudioAttributes?);
-    method public androidx.core.app.NotificationChannelCompat.Builder setVibrationEnabled(boolean);
-    method public androidx.core.app.NotificationChannelCompat.Builder setVibrationPattern(long[]?);
-  }
-
-  public class NotificationChannelGroupCompat {
-    method public java.util.List<androidx.core.app.NotificationChannelCompat!> getChannels();
-    method public String? getDescription();
-    method public String getId();
-    method public CharSequence? getName();
-    method public boolean isBlocked();
-    method public androidx.core.app.NotificationChannelGroupCompat.Builder toBuilder();
-  }
-
-  public static class NotificationChannelGroupCompat.Builder {
-    ctor public NotificationChannelGroupCompat.Builder(String);
-    method public androidx.core.app.NotificationChannelGroupCompat build();
-    method public androidx.core.app.NotificationChannelGroupCompat.Builder setDescription(String?);
-    method public androidx.core.app.NotificationChannelGroupCompat.Builder setName(CharSequence?);
-  }
-
-  public class NotificationCompat {
-    ctor @Deprecated public NotificationCompat();
-    method public static androidx.core.app.NotificationCompat.Action? getAction(android.app.Notification, int);
-    method public static int getActionCount(android.app.Notification);
-    method public static boolean getAllowSystemGeneratedContextualActions(android.app.Notification);
-    method public static boolean getAutoCancel(android.app.Notification);
-    method public static int getBadgeIconType(android.app.Notification);
-    method public static androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata(android.app.Notification);
-    method public static String? getCategory(android.app.Notification);
-    method public static String? getChannelId(android.app.Notification);
-    method public static int getColor(android.app.Notification);
-    method @RequiresApi(19) public static CharSequence? getContentInfo(android.app.Notification);
-    method @RequiresApi(19) public static CharSequence? getContentText(android.app.Notification);
-    method @RequiresApi(19) public static CharSequence? getContentTitle(android.app.Notification);
-    method public static android.os.Bundle? getExtras(android.app.Notification);
-    method public static String? getGroup(android.app.Notification);
-    method @androidx.core.app.NotificationCompat.GroupAlertBehavior public static int getGroupAlertBehavior(android.app.Notification);
-    method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
-    method public static boolean getLocalOnly(android.app.Notification);
-    method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
-    method public static boolean getOngoing(android.app.Notification);
-    method public static boolean getOnlyAlertOnce(android.app.Notification);
-    method public static java.util.List<androidx.core.app.Person!> getPeople(android.app.Notification);
-    method public static android.app.Notification? getPublicVersion(android.app.Notification);
-    method public static CharSequence? getSettingsText(android.app.Notification);
-    method public static String? getShortcutId(android.app.Notification);
-    method @RequiresApi(19) public static boolean getShowWhen(android.app.Notification);
-    method public static String? getSortKey(android.app.Notification);
-    method @RequiresApi(19) public static CharSequence? getSubText(android.app.Notification);
-    method public static long getTimeoutAfter(android.app.Notification);
-    method @RequiresApi(19) public static boolean getUsesChronometer(android.app.Notification);
-    method @androidx.core.app.NotificationCompat.NotificationVisibility public static int getVisibility(android.app.Notification);
-    method public static boolean isGroupSummary(android.app.Notification);
-    field public static final int BADGE_ICON_LARGE = 2; // 0x2
-    field public static final int BADGE_ICON_NONE = 0; // 0x0
-    field public static final int BADGE_ICON_SMALL = 1; // 0x1
-    field public static final String CATEGORY_ALARM = "alarm";
-    field public static final String CATEGORY_CALL = "call";
-    field public static final String CATEGORY_EMAIL = "email";
-    field public static final String CATEGORY_ERROR = "err";
-    field public static final String CATEGORY_EVENT = "event";
-    field public static final String CATEGORY_LOCATION_SHARING = "location_sharing";
-    field public static final String CATEGORY_MESSAGE = "msg";
-    field public static final String CATEGORY_MISSED_CALL = "missed_call";
-    field public static final String CATEGORY_NAVIGATION = "navigation";
-    field public static final String CATEGORY_PROGRESS = "progress";
-    field public static final String CATEGORY_PROMO = "promo";
-    field public static final String CATEGORY_RECOMMENDATION = "recommendation";
-    field public static final String CATEGORY_REMINDER = "reminder";
-    field public static final String CATEGORY_SERVICE = "service";
-    field public static final String CATEGORY_SOCIAL = "social";
-    field public static final String CATEGORY_STATUS = "status";
-    field public static final String CATEGORY_STOPWATCH = "stopwatch";
-    field public static final String CATEGORY_SYSTEM = "sys";
-    field public static final String CATEGORY_TRANSPORT = "transport";
-    field public static final String CATEGORY_WORKOUT = "workout";
-    field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
-    field public static final int DEFAULT_ALL = -1; // 0xffffffff
-    field public static final int DEFAULT_LIGHTS = 4; // 0x4
-    field public static final int DEFAULT_SOUND = 1; // 0x1
-    field public static final int DEFAULT_VIBRATE = 2; // 0x2
-    field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
-    field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
-    field public static final String EXTRA_BIG_TEXT = "android.bigText";
-    field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
-    field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
-    field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
-    field public static final String EXTRA_COLORIZED = "android.colorized";
-    field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
-    field public static final String EXTRA_COMPAT_TEMPLATE = "androidx.core.app.extra.COMPAT_TEMPLATE";
-    field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
-    field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
-    field public static final String EXTRA_HISTORIC_MESSAGES = "android.messages.historic";
-    field public static final String EXTRA_INFO_TEXT = "android.infoText";
-    field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
-    field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
-    field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
-    field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
-    field public static final String EXTRA_MESSAGES = "android.messages";
-    field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
-    field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
-    field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
-    field @Deprecated public static final String EXTRA_PEOPLE = "android.people";
-    field public static final String EXTRA_PEOPLE_LIST = "android.people.list";
-    field public static final String EXTRA_PICTURE = "android.picture";
-    field public static final String EXTRA_PICTURE_CONTENT_DESCRIPTION = "android.pictureContentDescription";
-    field public static final String EXTRA_PROGRESS = "android.progress";
-    field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
-    field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
-    field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
-    field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
-    field public static final String EXTRA_SHOW_BIG_PICTURE_WHEN_COLLAPSED = "android.showBigPictureWhenCollapsed";
-    field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
-    field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
-    field public static final String EXTRA_SMALL_ICON = "android.icon";
-    field public static final String EXTRA_SUB_TEXT = "android.subText";
-    field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
-    field public static final String EXTRA_TEMPLATE = "android.template";
-    field public static final String EXTRA_TEXT = "android.text";
-    field public static final String EXTRA_TEXT_LINES = "android.textLines";
-    field public static final String EXTRA_TITLE = "android.title";
-    field public static final String EXTRA_TITLE_BIG = "android.title.big";
-    field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
-    field public static final int FLAG_BUBBLE = 4096; // 0x1000
-    field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
-    field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
-    field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
-    field public static final int FLAG_INSISTENT = 4; // 0x4
-    field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
-    field public static final int FLAG_NO_CLEAR = 32; // 0x20
-    field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
-    field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
-    field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
-    field public static final int FOREGROUND_SERVICE_DEFAULT = 0; // 0x0
-    field public static final int FOREGROUND_SERVICE_DEFERRED = 2; // 0x2
-    field public static final int FOREGROUND_SERVICE_IMMEDIATE = 1; // 0x1
-    field public static final int GROUP_ALERT_ALL = 0; // 0x0
-    field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
-    field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
-    field public static final String GROUP_KEY_SILENT = "silent";
-    field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
-    field public static final int PRIORITY_DEFAULT = 0; // 0x0
-    field public static final int PRIORITY_HIGH = 1; // 0x1
-    field public static final int PRIORITY_LOW = -1; // 0xffffffff
-    field public static final int PRIORITY_MAX = 2; // 0x2
-    field public static final int PRIORITY_MIN = -2; // 0xfffffffe
-    field public static final int STREAM_DEFAULT = -1; // 0xffffffff
-    field public static final int VISIBILITY_PRIVATE = 0; // 0x0
-    field public static final int VISIBILITY_PUBLIC = 1; // 0x1
-    field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
-  }
-
-  public static class NotificationCompat.Action {
-    ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
-    ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
-    method public android.app.PendingIntent? getActionIntent();
-    method public boolean getAllowGeneratedReplies();
-    method public androidx.core.app.RemoteInput![]? getDataOnlyRemoteInputs();
-    method public android.os.Bundle getExtras();
-    method @Deprecated public int getIcon();
-    method public androidx.core.graphics.drawable.IconCompat? getIconCompat();
-    method public androidx.core.app.RemoteInput![]? getRemoteInputs();
-    method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
-    method public boolean getShowsUserInterface();
-    method public CharSequence? getTitle();
-    method public boolean isAuthenticationRequired();
-    method public boolean isContextual();
-    field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
-    field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
-    field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
-    field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
-    field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
-    field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
-    field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
-    field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
-    field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
-    field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
-    field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
-    field public android.app.PendingIntent! actionIntent;
-    field @Deprecated public int icon;
-    field public CharSequence! title;
-  }
-
-  public static final class NotificationCompat.Action.Builder {
-    ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
-    ctor public NotificationCompat.Action.Builder(int, CharSequence?, android.app.PendingIntent?);
-    ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
-    method public androidx.core.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle?);
-    method public androidx.core.app.NotificationCompat.Action.Builder addRemoteInput(androidx.core.app.RemoteInput?);
-    method public androidx.core.app.NotificationCompat.Action build();
-    method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Extender);
-    method @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.NotificationCompat.Action.Builder fromAndroidAction(android.app.Notification.Action);
-    method public android.os.Bundle getExtras();
-    method public androidx.core.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
-    method public androidx.core.app.NotificationCompat.Action.Builder setAuthenticationRequired(boolean);
-    method public androidx.core.app.NotificationCompat.Action.Builder setContextual(boolean);
-    method public androidx.core.app.NotificationCompat.Action.Builder setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
-    method public androidx.core.app.NotificationCompat.Action.Builder setShowsUserInterface(boolean);
-  }
-
-  public static interface NotificationCompat.Action.Extender {
-    method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
-  }
-
-  @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
-  }
-
-  public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
-    ctor public NotificationCompat.Action.WearableExtender();
-    ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action);
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender clone();
-    method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
-    method @Deprecated public CharSequence? getCancelLabel();
-    method @Deprecated public CharSequence? getConfirmLabel();
-    method public boolean getHintDisplayActionInline();
-    method public boolean getHintLaunchesActivity();
-    method @Deprecated public CharSequence? getInProgressLabel();
-    method public boolean isAvailableOffline();
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setCancelLabel(CharSequence?);
-    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setConfirmLabel(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
-    method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setInProgressLabel(CharSequence?);
-  }
-
-  @IntDef({androidx.core.app.NotificationCompat.BADGE_ICON_NONE, androidx.core.app.NotificationCompat.BADGE_ICON_SMALL, androidx.core.app.NotificationCompat.BADGE_ICON_LARGE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.BadgeIconType {
-  }
-
-  public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
-    ctor public NotificationCompat.BigPictureStyle();
-    ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder?);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap?);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap?);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle setBigContentTitle(CharSequence?);
-    method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle setContentDescription(CharSequence?);
-    method public androidx.core.app.NotificationCompat.BigPictureStyle setSummaryText(CharSequence?);
-    method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle showBigPictureWhenCollapsed(boolean);
-  }
-
-  public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
-    ctor public NotificationCompat.BigTextStyle();
-    ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder?);
-    method public androidx.core.app.NotificationCompat.BigTextStyle bigText(CharSequence?);
-    method public androidx.core.app.NotificationCompat.BigTextStyle setBigContentTitle(CharSequence?);
-    method public androidx.core.app.NotificationCompat.BigTextStyle setSummaryText(CharSequence?);
-  }
-
-  public static final class NotificationCompat.BubbleMetadata {
-    method public static androidx.core.app.NotificationCompat.BubbleMetadata? fromPlatform(android.app.Notification.BubbleMetadata?);
-    method public boolean getAutoExpandBubble();
-    method public android.app.PendingIntent? getDeleteIntent();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getDesiredHeight();
-    method @DimenRes public int getDesiredHeightResId();
-    method public androidx.core.graphics.drawable.IconCompat? getIcon();
-    method public android.app.PendingIntent? getIntent();
-    method public String? getShortcutId();
-    method public boolean isNotificationSuppressed();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setFlags(int);
-    method public static android.app.Notification.BubbleMetadata? toPlatform(androidx.core.app.NotificationCompat.BubbleMetadata?);
-  }
-
-  public static final class NotificationCompat.BubbleMetadata.Builder {
-    ctor @Deprecated public NotificationCompat.BubbleMetadata.Builder();
-    ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
-    ctor public NotificationCompat.BubbleMetadata.Builder(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata build();
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=androidx.annotation.Dimension.DP) int);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIntent(android.app.PendingIntent);
-    method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setSuppressNotification(boolean);
-  }
-
-  public static class NotificationCompat.Builder {
-    ctor @RequiresApi(19) public NotificationCompat.Builder(android.content.Context, android.app.Notification);
-    ctor public NotificationCompat.Builder(android.content.Context, String);
-    ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
-    method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
-    method public androidx.core.app.NotificationCompat.Builder addAction(androidx.core.app.NotificationCompat.Action?);
-    method public androidx.core.app.NotificationCompat.Builder addExtras(android.os.Bundle?);
-    method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
-    method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(androidx.core.app.NotificationCompat.Action?);
-    method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
-    method public androidx.core.app.NotificationCompat.Builder addPerson(androidx.core.app.Person?);
-    method public android.app.Notification build();
-    method public androidx.core.app.NotificationCompat.Builder clearActions();
-    method public androidx.core.app.NotificationCompat.Builder clearInvisibleActions();
-    method public androidx.core.app.NotificationCompat.Builder clearPeople();
-    method public android.widget.RemoteViews? createBigContentView();
-    method public android.widget.RemoteViews? createContentView();
-    method public android.widget.RemoteViews? createHeadsUpContentView();
-    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Extender);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getBigContentView();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata();
-    method @ColorInt @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getColor();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getContentView();
-    method public android.os.Bundle getExtras();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getForegroundServiceBehavior();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getHeadsUpContentView();
-    method @Deprecated public android.app.Notification getNotification();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getPriority();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public long getWhenIfShowing();
-    method protected static CharSequence? limitCharSequenceLength(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setAllowSystemGeneratedContextualActions(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setAutoCancel(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setBadgeIconType(@androidx.core.app.NotificationCompat.BadgeIconType int);
-    method public androidx.core.app.NotificationCompat.Builder setBubbleMetadata(androidx.core.app.NotificationCompat.BubbleMetadata?);
-    method public androidx.core.app.NotificationCompat.Builder setCategory(String?);
-    method public androidx.core.app.NotificationCompat.Builder setChannelId(String);
-    method @RequiresApi(24) public androidx.core.app.NotificationCompat.Builder setChronometerCountDown(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setColor(@ColorInt int);
-    method public androidx.core.app.NotificationCompat.Builder setColorized(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setContent(android.widget.RemoteViews?);
-    method public androidx.core.app.NotificationCompat.Builder setContentInfo(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent?);
-    method public androidx.core.app.NotificationCompat.Builder setContentText(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setContentTitle(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews?);
-    method public androidx.core.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews?);
-    method public androidx.core.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews?);
-    method public androidx.core.app.NotificationCompat.Builder setDefaults(int);
-    method public androidx.core.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent?);
-    method public androidx.core.app.NotificationCompat.Builder setExtras(android.os.Bundle?);
-    method public androidx.core.app.NotificationCompat.Builder setForegroundServiceBehavior(@androidx.core.app.NotificationCompat.ServiceNotificationBehavior int);
-    method public androidx.core.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent?, boolean);
-    method public androidx.core.app.NotificationCompat.Builder setGroup(String?);
-    method public androidx.core.app.NotificationCompat.Builder setGroupAlertBehavior(@androidx.core.app.NotificationCompat.GroupAlertBehavior int);
-    method public androidx.core.app.NotificationCompat.Builder setGroupSummary(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap?);
-    method public androidx.core.app.NotificationCompat.Builder setLights(@ColorInt int, int, int);
-    method public androidx.core.app.NotificationCompat.Builder setLocalOnly(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
-    method @Deprecated public androidx.core.app.NotificationCompat.Builder setNotificationSilent();
-    method public androidx.core.app.NotificationCompat.Builder setNumber(int);
-    method public androidx.core.app.NotificationCompat.Builder setOngoing(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setPriority(int);
-    method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
-    method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
-    method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
-    method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
-    method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
-    method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setSilent(boolean);
-    method @RequiresApi(23) public androidx.core.app.NotificationCompat.Builder setSmallIcon(androidx.core.graphics.drawable.IconCompat);
-    method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int);
-    method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int, int);
-    method public androidx.core.app.NotificationCompat.Builder setSortKey(String?);
-    method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?);
-    method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?, @androidx.core.app.NotificationCompat.StreamType int);
-    method public androidx.core.app.NotificationCompat.Builder setStyle(androidx.core.app.NotificationCompat.Style?);
-    method public androidx.core.app.NotificationCompat.Builder setSubText(CharSequence?);
-    method public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?);
-    method @Deprecated public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?, android.widget.RemoteViews?);
-    method public androidx.core.app.NotificationCompat.Builder setTimeoutAfter(long);
-    method public androidx.core.app.NotificationCompat.Builder setUsesChronometer(boolean);
-    method public androidx.core.app.NotificationCompat.Builder setVibrate(long[]?);
-    method public androidx.core.app.NotificationCompat.Builder setVisibility(@androidx.core.app.NotificationCompat.NotificationVisibility int);
-    method public androidx.core.app.NotificationCompat.Builder setWhen(long);
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.ArrayList<androidx.core.app.NotificationCompat.Action!>! mActions;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.Context! mContext;
-    field @Deprecated public java.util.ArrayList<java.lang.String!>! mPeople;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.ArrayList<androidx.core.app.Person!> mPersonList;
-  }
-
-  public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
-    ctor public NotificationCompat.CarExtender();
-    ctor public NotificationCompat.CarExtender(android.app.Notification);
-    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
-    method @ColorInt public int getColor();
-    method public android.graphics.Bitmap? getLargeIcon();
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation? getUnreadConversation();
-    method public androidx.core.app.NotificationCompat.CarExtender setColor(@ColorInt int);
-    method public androidx.core.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap?);
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation?);
-  }
-
-  @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation {
-    method @Deprecated public long getLatestTimestamp();
-    method @Deprecated public String![]? getMessages();
-    method @Deprecated public String? getParticipant();
-    method @Deprecated public String![]? getParticipants();
-    method @Deprecated public android.app.PendingIntent? getReadPendingIntent();
-    method @Deprecated public androidx.core.app.RemoteInput? getRemoteInput();
-    method @Deprecated public android.app.PendingIntent? getReplyPendingIntent();
-  }
-
-  @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
-    ctor @Deprecated public NotificationCompat.CarExtender.UnreadConversation.Builder(String);
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(String?);
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation build();
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent?);
-    method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent?, androidx.core.app.RemoteInput?);
-  }
-
-  public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
-    ctor public NotificationCompat.DecoratedCustomViewStyle();
-  }
-
-  public static interface NotificationCompat.Extender {
-    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
-  }
-
-  @IntDef({androidx.core.app.NotificationCompat.GROUP_ALERT_ALL, androidx.core.app.NotificationCompat.GROUP_ALERT_SUMMARY, androidx.core.app.NotificationCompat.GROUP_ALERT_CHILDREN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.GroupAlertBehavior {
-  }
-
-  public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
-    ctor public NotificationCompat.InboxStyle();
-    ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder?);
-    method public androidx.core.app.NotificationCompat.InboxStyle addLine(CharSequence?);
-    method public androidx.core.app.NotificationCompat.InboxStyle setBigContentTitle(CharSequence?);
-    method public androidx.core.app.NotificationCompat.InboxStyle setSummaryText(CharSequence?);
-  }
-
-  public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
-    ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
-    ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
-    method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
-    method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
-    method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
-    method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
-    method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
-    method public CharSequence? getConversationTitle();
-    method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
-    method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
-    method public androidx.core.app.Person getUser();
-    method @Deprecated public CharSequence? getUserDisplayName();
-    method public boolean isGroupConversation();
-    method public androidx.core.app.NotificationCompat.MessagingStyle setConversationTitle(CharSequence?);
-    method public androidx.core.app.NotificationCompat.MessagingStyle setGroupConversation(boolean);
-    field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
-  }
-
-  public static final class NotificationCompat.MessagingStyle.Message {
-    ctor public NotificationCompat.MessagingStyle.Message(CharSequence?, long, androidx.core.app.Person?);
-    ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence?, long, CharSequence?);
-    method public String? getDataMimeType();
-    method public android.net.Uri? getDataUri();
-    method public android.os.Bundle getExtras();
-    method public androidx.core.app.Person? getPerson();
-    method @Deprecated public CharSequence? getSender();
-    method public CharSequence? getText();
-    method public long getTimestamp();
-    method public androidx.core.app.NotificationCompat.MessagingStyle.Message setData(String?, android.net.Uri?);
-  }
-
-  @IntDef({androidx.core.app.NotificationCompat.VISIBILITY_PUBLIC, androidx.core.app.NotificationCompat.VISIBILITY_PRIVATE, androidx.core.app.NotificationCompat.VISIBILITY_SECRET}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.NotificationVisibility {
-  }
-
-  @IntDef({androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_DEFAULT, androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE, androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_DEFERRED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.ServiceNotificationBehavior {
-  }
-
-  @IntDef({android.media.AudioManager.STREAM_VOICE_CALL, android.media.AudioManager.STREAM_SYSTEM, android.media.AudioManager.STREAM_RING, android.media.AudioManager.STREAM_MUSIC, android.media.AudioManager.STREAM_ALARM, android.media.AudioManager.STREAM_NOTIFICATION, android.media.AudioManager.STREAM_DTMF, android.media.AudioManager.STREAM_ACCESSIBILITY}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.StreamType {
-  }
-
-  public abstract static class NotificationCompat.Style {
-    ctor public NotificationCompat.Style();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addCompatExtras(android.os.Bundle);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void apply(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews applyStandardTemplate(boolean, int, boolean);
-    method public android.app.Notification? build();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void buildIntoRemoteViews(android.widget.RemoteViews!, android.widget.RemoteViews!);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void clearCompatExtraKeys(android.os.Bundle);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.Bitmap! createColoredBitmap(int, int);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean displayCustomViewInline();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.NotificationCompat.Style? extractStyleFromNotification(android.app.Notification);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected String? getClassName();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeBigContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeHeadsUpContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void restoreFromCompatExtras(android.os.Bundle);
-    method public void setBuilder(androidx.core.app.NotificationCompat.Builder?);
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected androidx.core.app.NotificationCompat.Builder! mBuilder;
-  }
-
-  public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
-    ctor public NotificationCompat.WearableExtender();
-    ctor public NotificationCompat.WearableExtender(android.app.Notification);
-    method public androidx.core.app.NotificationCompat.WearableExtender addAction(androidx.core.app.NotificationCompat.Action);
-    method public androidx.core.app.NotificationCompat.WearableExtender addActions(java.util.List<androidx.core.app.NotificationCompat.Action!>);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification!>);
-    method public androidx.core.app.NotificationCompat.WearableExtender clearActions();
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender clearPages();
-    method public androidx.core.app.NotificationCompat.WearableExtender clone();
-    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
-    method public java.util.List<androidx.core.app.NotificationCompat.Action!> getActions();
-    method @Deprecated public android.graphics.Bitmap? getBackground();
-    method public String? getBridgeTag();
-    method public int getContentAction();
-    method @Deprecated public int getContentIcon();
-    method @Deprecated public int getContentIconGravity();
-    method public boolean getContentIntentAvailableOffline();
-    method @Deprecated public int getCustomContentHeight();
-    method @Deprecated public int getCustomSizePreset();
-    method public String? getDismissalId();
-    method @Deprecated public android.app.PendingIntent? getDisplayIntent();
-    method @Deprecated public int getGravity();
-    method @Deprecated public boolean getHintAmbientBigPicture();
-    method @Deprecated public boolean getHintAvoidBackgroundClipping();
-    method public boolean getHintContentIntentLaunchesActivity();
-    method @Deprecated public boolean getHintHideIcon();
-    method @Deprecated public int getHintScreenTimeout();
-    method @Deprecated public boolean getHintShowBackgroundOnly();
-    method @Deprecated public java.util.List<android.app.Notification!> getPages();
-    method public boolean getStartScrollBottom();
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap?);
-    method public androidx.core.app.NotificationCompat.WearableExtender setBridgeTag(String?);
-    method public androidx.core.app.NotificationCompat.WearableExtender setContentAction(int);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIcon(int);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIconGravity(int);
-    method public androidx.core.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
-    method public androidx.core.app.NotificationCompat.WearableExtender setDismissalId(String?);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent?);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setGravity(int);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
-    method public androidx.core.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
-    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
-    method public androidx.core.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
-    field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
-    field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
-    field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
-    field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
-    field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
-    field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
-    field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
-    field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
-    field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
-  }
-
-  public final class NotificationCompatExtras {
-    field public static final String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
-    field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
-    field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
-    field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
-    field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
-    field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
-  }
-
-  public abstract class NotificationCompatSideChannelService extends android.app.Service {
-    ctor public NotificationCompatSideChannelService();
-    method public abstract void cancel(String!, int, String!);
-    method public abstract void cancelAll(String!);
-    method public abstract void notify(String!, int, String!, android.app.Notification!);
-    method public android.os.IBinder! onBind(android.content.Intent!);
-  }
-
-  public final class NotificationManagerCompat {
-    method public boolean areNotificationsEnabled();
-    method public void cancel(int);
-    method public void cancel(String?, int);
-    method public void cancelAll();
-    method public void createNotificationChannel(android.app.NotificationChannel);
-    method public void createNotificationChannel(androidx.core.app.NotificationChannelCompat);
-    method public void createNotificationChannelGroup(android.app.NotificationChannelGroup);
-    method public void createNotificationChannelGroup(androidx.core.app.NotificationChannelGroupCompat);
-    method public void createNotificationChannelGroups(java.util.List<android.app.NotificationChannelGroup!>);
-    method public void createNotificationChannelGroupsCompat(java.util.List<androidx.core.app.NotificationChannelGroupCompat!>);
-    method public void createNotificationChannels(java.util.List<android.app.NotificationChannel!>);
-    method public void createNotificationChannelsCompat(java.util.List<androidx.core.app.NotificationChannelCompat!>);
-    method public void deleteNotificationChannel(String);
-    method public void deleteNotificationChannelGroup(String);
-    method public void deleteUnlistedNotificationChannels(java.util.Collection<java.lang.String!>);
-    method public static androidx.core.app.NotificationManagerCompat from(android.content.Context);
-    method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
-    method public int getImportance();
-    method public android.app.NotificationChannel? getNotificationChannel(String);
-    method public android.app.NotificationChannel? getNotificationChannel(String, String);
-    method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String);
-    method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String, String);
-    method public android.app.NotificationChannelGroup? getNotificationChannelGroup(String);
-    method public androidx.core.app.NotificationChannelGroupCompat? getNotificationChannelGroupCompat(String);
-    method public java.util.List<android.app.NotificationChannelGroup!> getNotificationChannelGroups();
-    method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroupsCompat();
-    method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
-    method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannelsCompat();
-    method public void notify(int, android.app.Notification);
-    method public void notify(String?, int, android.app.Notification);
-    field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
-    field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
-    field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
-    field public static final int IMPORTANCE_HIGH = 4; // 0x4
-    field public static final int IMPORTANCE_LOW = 2; // 0x2
-    field public static final int IMPORTANCE_MAX = 5; // 0x5
-    field public static final int IMPORTANCE_MIN = 1; // 0x1
-    field public static final int IMPORTANCE_NONE = 0; // 0x0
-    field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
-  }
-
-  public interface OnMultiWindowModeChangedProvider {
-    method public void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
-    method public void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
-  }
-
-  public interface OnNewIntentProvider {
-    method public void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
-    method public void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
-  }
-
-  public interface OnPictureInPictureModeChangedProvider {
-    method public void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
-    method public void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
-  }
-
-  public class Person {
-    method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.Person fromAndroidPerson(android.app.Person);
-    method public static androidx.core.app.Person fromBundle(android.os.Bundle);
-    method @RequiresApi(22) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.Person fromPersistableBundle(android.os.PersistableBundle);
-    method public androidx.core.graphics.drawable.IconCompat? getIcon();
-    method public String? getKey();
-    method public CharSequence? getName();
-    method public String? getUri();
-    method public boolean isBot();
-    method public boolean isImportant();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String resolveToLegacyUri();
-    method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.app.Person toAndroidPerson();
-    method public androidx.core.app.Person.Builder toBuilder();
-    method public android.os.Bundle toBundle();
-    method @RequiresApi(22) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.PersistableBundle toPersistableBundle();
-  }
-
-  public static class Person.Builder {
-    ctor public Person.Builder();
-    method public androidx.core.app.Person build();
-    method public androidx.core.app.Person.Builder setBot(boolean);
-    method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
-    method public androidx.core.app.Person.Builder setImportant(boolean);
-    method public androidx.core.app.Person.Builder setKey(String?);
-    method public androidx.core.app.Person.Builder setName(CharSequence?);
-    method public androidx.core.app.Person.Builder setUri(String?);
-  }
-
-  public final class PictureInPictureModeChangedInfo {
-    ctor public PictureInPictureModeChangedInfo(boolean);
-    ctor @RequiresApi(26) public PictureInPictureModeChangedInfo(boolean, android.content.res.Configuration);
-    method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
-    method public boolean isInPictureInPictureMode();
-  }
-
-  @androidx.versionedparcelable.VersionedParcelize(jetifyAs="android.support.v4.app.RemoteActionCompat") public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
-    ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
-    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public RemoteActionCompat();
-    ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
-    method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
-    method public android.app.PendingIntent getActionIntent();
-    method public CharSequence getContentDescription();
-    method public androidx.core.graphics.drawable.IconCompat getIcon();
-    method public CharSequence getTitle();
-    method public boolean isEnabled();
-    method public void setEnabled(boolean);
-    method public void setShouldShowIcon(boolean);
-    method public boolean shouldShowIcon();
-    method @RequiresApi(26) public android.app.RemoteAction toRemoteAction();
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(4) public android.app.PendingIntent mActionIntent;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(3) public CharSequence mContentDescription;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(5) public boolean mEnabled;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(1) public androidx.core.graphics.drawable.IconCompat mIcon;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(6) public boolean mShouldShowIcon;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(2) public CharSequence mTitle;
-  }
-
-  public final class RemoteInput {
-    method public static void addDataResultToIntent(androidx.core.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String!,android.net.Uri!>);
-    method public static void addResultsToIntent(androidx.core.app.RemoteInput![], android.content.Intent, android.os.Bundle);
-    method public boolean getAllowFreeFormInput();
-    method public java.util.Set<java.lang.String!>? getAllowedDataTypes();
-    method public CharSequence![]? getChoices();
-    method public static java.util.Map<java.lang.String!,android.net.Uri!>? getDataResultsFromIntent(android.content.Intent, String);
-    method @androidx.core.app.RemoteInput.EditChoicesBeforeSending public int getEditChoicesBeforeSending();
-    method public android.os.Bundle getExtras();
-    method public CharSequence? getLabel();
-    method public String getResultKey();
-    method public static android.os.Bundle? getResultsFromIntent(android.content.Intent);
-    method @androidx.core.app.RemoteInput.Source public static int getResultsSource(android.content.Intent);
-    method public boolean isDataOnly();
-    method public static void setResultsSource(android.content.Intent, @androidx.core.app.RemoteInput.Source int);
-    field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
-    field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
-    field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
-    field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
-    field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
-    field public static final int SOURCE_CHOICE = 1; // 0x1
-    field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
-  }
-
-  public static final class RemoteInput.Builder {
-    ctor public RemoteInput.Builder(String);
-    method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
-    method public androidx.core.app.RemoteInput build();
-    method public android.os.Bundle getExtras();
-    method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
-    method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
-    method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence![]?);
-    method public androidx.core.app.RemoteInput.Builder setEditChoicesBeforeSending(@androidx.core.app.RemoteInput.EditChoicesBeforeSending int);
-    method public androidx.core.app.RemoteInput.Builder setLabel(CharSequence?);
-  }
-
-  @IntDef({androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO, androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_DISABLED, androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_ENABLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RemoteInput.EditChoicesBeforeSending {
-  }
-
-  @IntDef({androidx.core.app.RemoteInput.SOURCE_FREE_FORM_INPUT, androidx.core.app.RemoteInput.SOURCE_CHOICE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RemoteInput.Source {
-  }
-
-  public final class ServiceCompat {
-    method public static void stopForeground(android.app.Service, @androidx.core.app.ServiceCompat.StopForegroundFlags int);
-    field public static final int START_STICKY = 1; // 0x1
-    field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
-    field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
-  }
-
-  @IntDef(flag=true, value={androidx.core.app.ServiceCompat.STOP_FOREGROUND_REMOVE, androidx.core.app.ServiceCompat.STOP_FOREGROUND_DETACH}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ServiceCompat.StopForegroundFlags {
-  }
-
-  public final class ShareCompat {
-    method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
-    method @Deprecated public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
-    method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
-    method public static String? getCallingPackage(android.app.Activity);
-    field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
-    field public static final String EXTRA_CALLING_ACTIVITY_INTEROP = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
-    field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
-    field public static final String EXTRA_CALLING_PACKAGE_INTEROP = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
-  }
-
-  public static class ShareCompat.IntentBuilder {
-    ctor public ShareCompat.IntentBuilder(android.content.Context);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String![]);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String![]);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String);
-    method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String![]);
-    method public androidx.core.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
-    method public android.content.Intent createChooserIntent();
-    method @Deprecated public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
-    method public android.content.Intent getIntent();
-    method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
-    method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setHtmlText(String?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setStream(android.net.Uri?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setSubject(String?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setText(CharSequence?);
-    method public androidx.core.app.ShareCompat.IntentBuilder setType(String?);
-    method public void startChooser();
-  }
-
-  public static class ShareCompat.IntentReader {
-    ctor public ShareCompat.IntentReader(android.app.Activity);
-    ctor public ShareCompat.IntentReader(android.content.Context, android.content.Intent);
-    method @Deprecated public static androidx.core.app.ShareCompat.IntentReader from(android.app.Activity);
-    method public android.content.ComponentName? getCallingActivity();
-    method public android.graphics.drawable.Drawable? getCallingActivityIcon();
-    method public android.graphics.drawable.Drawable? getCallingApplicationIcon();
-    method public CharSequence? getCallingApplicationLabel();
-    method public String? getCallingPackage();
-    method public String![]? getEmailBcc();
-    method public String![]? getEmailCc();
-    method public String![]? getEmailTo();
-    method public String? getHtmlText();
-    method public android.net.Uri? getStream();
-    method public android.net.Uri? getStream(int);
-    method public int getStreamCount();
-    method public String? getSubject();
-    method public CharSequence? getText();
-    method public String? getType();
-    method public boolean isMultipleShare();
-    method public boolean isShareIntent();
-    method public boolean isSingleShare();
-  }
-
-  public abstract class SharedElementCallback {
-    ctor public SharedElementCallback();
-    method public android.os.Parcelable! onCaptureSharedElementSnapshot(android.view.View!, android.graphics.Matrix!, android.graphics.RectF!);
-    method public android.view.View! onCreateSnapshotView(android.content.Context!, android.os.Parcelable!);
-    method public void onMapSharedElements(java.util.List<java.lang.String!>!, java.util.Map<java.lang.String!,android.view.View!>!);
-    method public void onRejectSharedElements(java.util.List<android.view.View!>!);
-    method public void onSharedElementEnd(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
-    method public void onSharedElementStart(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
-    method public void onSharedElementsArrived(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
-  }
-
-  public static interface SharedElementCallback.OnSharedElementsReadyListener {
-    method public void onSharedElementsReady();
-  }
-
-  public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
-    method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
-    method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
-    method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
-    method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
-    method public androidx.core.app.TaskStackBuilder addParentStack(android.content.ComponentName);
-    method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
-    method public android.content.Intent? editIntentAt(int);
-    method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
-    method @Deprecated public android.content.Intent! getIntent(int);
-    method public int getIntentCount();
-    method public android.content.Intent![] getIntents();
-    method public android.app.PendingIntent? getPendingIntent(int, int);
-    method public android.app.PendingIntent? getPendingIntent(int, int, android.os.Bundle?);
-    method @Deprecated public java.util.Iterator<android.content.Intent!> iterator();
-    method public void startActivities();
-    method public void startActivities(android.os.Bundle?);
-  }
-
-  public static interface TaskStackBuilder.SupportParentable {
-    method public android.content.Intent? getSupportParentActivityIntent();
-  }
-
-}
-
-package androidx.core.content {
-
-  public final class ContentProviderCompat {
-    method public static android.content.Context requireContext(android.content.ContentProvider);
-  }
-
-  public final class ContentResolverCompat {
-    method public static android.database.Cursor? query(android.content.ContentResolver, android.net.Uri, String![]?, String?, String![]?, String?, androidx.core.os.CancellationSignal?);
-  }
-
-  public class ContextCompat {
-    ctor protected ContextCompat();
-    method public static int checkSelfPermission(android.content.Context, String);
-    method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
-    method public static String? getAttributionTag(android.content.Context);
-    method public static java.io.File getCodeCacheDir(android.content.Context);
-    method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
-    method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
-    method public static java.io.File? getDataDir(android.content.Context);
-    method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
-    method public static java.io.File![] getExternalCacheDirs(android.content.Context);
-    method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
-    method public static java.util.concurrent.Executor getMainExecutor(android.content.Context);
-    method public static java.io.File? getNoBackupFilesDir(android.content.Context);
-    method public static java.io.File![] getObbDirs(android.content.Context);
-    method public static <T> T? getSystemService(android.content.Context, Class<T!>);
-    method public static String? getSystemServiceName(android.content.Context, Class<?>);
-    method public static boolean isDeviceProtectedStorage(android.content.Context);
-    method public static boolean startActivities(android.content.Context, android.content.Intent![]);
-    method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
-    method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
-    method public static void startForegroundService(android.content.Context, android.content.Intent);
-  }
-
-  public class FileProvider extends android.content.ContentProvider {
-    ctor public FileProvider();
-    ctor protected FileProvider(@XmlRes int);
-    method public int delete(android.net.Uri, String?, String![]?);
-    method public String? getType(android.net.Uri);
-    method public static android.net.Uri! getUriForFile(android.content.Context, String, java.io.File);
-    method public static android.net.Uri getUriForFile(android.content.Context, String, java.io.File, String);
-    method public android.net.Uri! insert(android.net.Uri, android.content.ContentValues);
-    method public boolean onCreate();
-    method public android.database.Cursor query(android.net.Uri, String![]?, String?, String![]?, String?);
-    method public int update(android.net.Uri, android.content.ContentValues, String?, String![]?);
-  }
-
-  public final class IntentCompat {
-    method public static android.content.Intent createManageUnusedAppRestrictionsIntent(android.content.Context, String);
-    method public static android.content.Intent makeMainSelectorActivity(String, String);
-    field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
-    field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
-    field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
-    field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
-    field public static final String EXTRA_TIME = "android.intent.extra.TIME";
-  }
-
-  public final class LocusIdCompat {
-    ctor public LocusIdCompat(String);
-    method public String getId();
-    method @RequiresApi(29) public android.content.LocusId toLocusId();
-    method @RequiresApi(29) public static androidx.core.content.LocusIdCompat toLocusIdCompat(android.content.LocusId);
-  }
-
-  public final class MimeTypeFilter {
-    method public static boolean matches(String?, String);
-    method public static String? matches(String?, String![]);
-    method public static String? matches(String![]?, String);
-    method public static String![] matchesMany(String![]?, String);
-  }
-
-  public interface OnConfigurationChangedProvider {
-    method public void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
-    method public void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
-  }
-
-  public interface OnTrimMemoryProvider {
-    method public void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
-    method public void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
-  }
-
-  public final class PackageManagerCompat {
-    method public static com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> getUnusedAppRestrictionsStatus(android.content.Context);
-    field public static final String ACTION_PERMISSION_REVOCATION_SETTINGS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
-  }
-
-  public final class PermissionChecker {
-    method @androidx.core.content.PermissionChecker.PermissionResult public static int checkCallingOrSelfPermission(android.content.Context, String);
-    method @androidx.core.content.PermissionChecker.PermissionResult public static int checkCallingPermission(android.content.Context, String, String?);
-    method @androidx.core.content.PermissionChecker.PermissionResult public static int checkPermission(android.content.Context, String, int, int, String?);
-    method @androidx.core.content.PermissionChecker.PermissionResult public static int checkSelfPermission(android.content.Context, String);
-    field public static final int PERMISSION_DENIED = -1; // 0xffffffff
-    field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
-    field public static final int PERMISSION_GRANTED = 0; // 0x0
-  }
-
-  @IntDef({androidx.core.content.PermissionChecker.PERMISSION_GRANTED, androidx.core.content.PermissionChecker.PERMISSION_DENIED, androidx.core.content.PermissionChecker.PERMISSION_DENIED_APP_OP}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PermissionChecker.PermissionResult {
-  }
-
-  @Deprecated public final class SharedPreferencesCompat {
-  }
-
-  @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
-    method @Deprecated public void apply(android.content.SharedPreferences.Editor);
-    method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
-  }
-
-  public class UnusedAppRestrictionsBackportCallback {
-    method public void onResult(boolean, boolean) throws android.os.RemoteException;
-  }
-
-  public abstract class UnusedAppRestrictionsBackportService extends android.app.Service {
-    ctor public UnusedAppRestrictionsBackportService();
-    method protected abstract void isPermissionRevocationEnabled(androidx.core.content.UnusedAppRestrictionsBackportCallback);
-    method public android.os.IBinder? onBind(android.content.Intent?);
-    field public static final String ACTION_UNUSED_APP_RESTRICTIONS_BACKPORT_CONNECTION = "android.support.unusedapprestrictions.action.CustomUnusedAppRestrictionsBackportService";
-  }
-
-  public final class UnusedAppRestrictionsConstants {
-    field public static final int API_30 = 4; // 0x4
-    field public static final int API_30_BACKPORT = 3; // 0x3
-    field public static final int API_31 = 5; // 0x5
-    field public static final int DISABLED = 2; // 0x2
-    field public static final int ERROR = 0; // 0x0
-    field public static final int FEATURE_NOT_AVAILABLE = 1; // 0x1
-  }
-
-}
-
-package androidx.core.content.pm {
-
-  @Deprecated public final class ActivityInfoCompat {
-    field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
-  }
-
-  public final class PackageInfoCompat {
-    method public static long getLongVersionCode(android.content.pm.PackageInfo);
-    method public static java.util.List<android.content.pm.Signature!> getSignatures(android.content.pm.PackageManager, String) throws android.content.pm.PackageManager.NameNotFoundException;
-    method public static boolean hasSignatures(android.content.pm.PackageManager, String, @Size(min=1) java.util.Map<byte[]!,java.lang.Integer!>, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
-  }
-
-  public final class PermissionInfoCompat {
-    method public static int getProtection(android.content.pm.PermissionInfo);
-    method public static int getProtectionFlags(android.content.pm.PermissionInfo);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ShortcutInfoChangeListener {
-    ctor public ShortcutInfoChangeListener();
-    method @AnyThread public void onAllShortcutsRemoved();
-    method @AnyThread public void onShortcutAdded(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
-    method @AnyThread public void onShortcutRemoved(java.util.List<java.lang.String!>);
-    method @AnyThread public void onShortcutUpdated(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
-    method @AnyThread public void onShortcutUsageReported(java.util.List<java.lang.String!>);
-  }
-
-  public class ShortcutInfoCompat {
-    method public android.content.ComponentName? getActivity();
-    method public java.util.Set<java.lang.String!>? getCategories();
-    method public CharSequence? getDisabledMessage();
-    method public int getDisabledReason();
-    method @androidx.core.content.pm.ShortcutInfoCompat.Surface public int getExcludedFromSurfaces();
-    method public android.os.PersistableBundle? getExtras();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.graphics.drawable.IconCompat! getIcon();
-    method public String getId();
-    method public android.content.Intent getIntent();
-    method public android.content.Intent![] getIntents();
-    method public long getLastChangedTimestamp();
-    method public androidx.core.content.LocusIdCompat? getLocusId();
-    method public CharSequence? getLongLabel();
-    method public String getPackage();
-    method public int getRank();
-    method public CharSequence getShortLabel();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.Bundle? getTransientExtras();
-    method public android.os.UserHandle? getUserHandle();
-    method public boolean hasKeyFieldsOnly();
-    method public boolean isCached();
-    method public boolean isDeclaredInManifest();
-    method public boolean isDynamic();
-    method public boolean isEnabled();
-    method public boolean isExcludedFromSurfaces(@androidx.core.content.pm.ShortcutInfoCompat.Surface int);
-    method public boolean isImmutable();
-    method public boolean isPinned();
-    method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
-    field public static final int SURFACE_LAUNCHER = 1; // 0x1
-  }
-
-  public static class ShortcutInfoCompat.Builder {
-    ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
-    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(androidx.core.content.pm.ShortcutInfoCompat);
-    ctor @RequiresApi(25) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(android.content.Context, android.content.pm.ShortcutInfo);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String, String, java.util.List<java.lang.String!>);
-    method public androidx.core.content.pm.ShortcutInfoCompat build();
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setCategories(java.util.Set<java.lang.String!>);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExcludedFromSurfaces(int);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExtras(android.os.PersistableBundle);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent![]);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIsConversation();
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
-    method @Deprecated public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived();
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived(boolean);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPerson(androidx.core.app.Person);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPersons(androidx.core.app.Person![]);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setRank(int);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
-    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setSliceUri(android.net.Uri);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.content.pm.ShortcutInfoCompat.Builder setTransientExtras(android.os.Bundle);
-  }
-
-  @IntDef(flag=true, value={androidx.core.content.pm.ShortcutInfoCompat.SURFACE_LAUNCHER}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ShortcutInfoCompat.Surface {
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ShortcutInfoCompatSaver<T> {
-    ctor public ShortcutInfoCompatSaver();
-    method @AnyThread public abstract T! addShortcuts(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>!);
-    method @WorkerThread public java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>! getShortcuts() throws java.lang.Exception;
-    method @AnyThread public abstract T! removeAllShortcuts();
-    method @AnyThread public abstract T! removeShortcuts(java.util.List<java.lang.String!>!);
-  }
-
-  public class ShortcutManagerCompat {
-    method public static boolean addDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
-    method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
-    method public static void disableShortcuts(android.content.Context, java.util.List<java.lang.String!>, CharSequence?);
-    method public static void enableShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
-    method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getDynamicShortcuts(android.content.Context);
-    method public static int getIconMaxHeight(android.content.Context);
-    method public static int getIconMaxWidth(android.content.Context);
-    method public static int getMaxShortcutCountPerActivity(android.content.Context);
-    method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getShortcuts(android.content.Context, @androidx.core.content.pm.ShortcutManagerCompat.ShortcutMatchFlags int);
-    method public static boolean isRateLimitingActive(android.content.Context);
-    method public static boolean isRequestPinShortcutSupported(android.content.Context);
-    method public static boolean pushDynamicShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
-    method public static void removeAllDynamicShortcuts(android.content.Context);
-    method public static void removeDynamicShortcuts(android.content.Context, java.util.List<java.lang.String!>);
-    method public static void removeLongLivedShortcuts(android.content.Context, java.util.List<java.lang.String!>);
-    method public static void reportShortcutUsed(android.content.Context, String);
-    method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
-    method public static boolean setDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
-    method public static boolean updateShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
-    field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
-    field public static final int FLAG_MATCH_CACHED = 8; // 0x8
-    field public static final int FLAG_MATCH_DYNAMIC = 2; // 0x2
-    field public static final int FLAG_MATCH_MANIFEST = 1; // 0x1
-    field public static final int FLAG_MATCH_PINNED = 4; // 0x4
-  }
-
-  @IntDef(flag=true, value={androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_MANIFEST, androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_DYNAMIC, androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_PINNED, androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_CACHED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ShortcutManagerCompat.ShortcutMatchFlags {
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class ShortcutXmlParser {
-    method @WorkerThread public static java.util.List<java.lang.String!> getShortcutIds(android.content.Context);
-    method @VisibleForTesting public static java.util.List<java.lang.String!> parseShortcutIds(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-  }
-
-}
-
-package androidx.core.content.res {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ColorStateListInflaterCompat {
-    method public static android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static android.content.res.ColorStateList createFromXmlInner(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static android.content.res.ColorStateList? inflate(android.content.res.Resources, @XmlRes int, android.content.res.Resources.Theme?);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ComplexColorCompat {
-    method @ColorInt public int getColor();
-    method public android.graphics.Shader? getShader();
-    method public static androidx.core.content.res.ComplexColorCompat? inflate(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?);
-    method public boolean isGradient();
-    method public boolean isStateful();
-    method public boolean onStateChanged(int[]!);
-    method public void setColor(@ColorInt int);
-    method public boolean willDraw();
-  }
-
-  public final class ConfigurationHelper {
-    method public static int getDensityDpi(android.content.res.Resources);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class FontResourcesParserCompat {
-    method public static androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry? parse(org.xmlpull.v1.XmlPullParser, android.content.res.Resources) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static java.util.List<java.util.List<byte[]!>!> readCerts(android.content.res.Resources, @ArrayRes int);
-    field public static final int FETCH_STRATEGY_ASYNC = 1; // 0x1
-    field public static final int FETCH_STRATEGY_BLOCKING = 0; // 0x0
-    field public static final int INFINITE_TIMEOUT_VALUE = -1; // 0xffffffff
-  }
-
-  public static interface FontResourcesParserCompat.FamilyResourceEntry {
-  }
-
-  @IntDef({androidx.core.content.res.FontResourcesParserCompat.FETCH_STRATEGY_BLOCKING, androidx.core.content.res.FontResourcesParserCompat.FETCH_STRATEGY_ASYNC}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FontResourcesParserCompat.FetchStrategy {
-  }
-
-  public static final class FontResourcesParserCompat.FontFamilyFilesResourceEntry implements androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry {
-    ctor public FontResourcesParserCompat.FontFamilyFilesResourceEntry(androidx.core.content.res.FontResourcesParserCompat.FontFileResourceEntry![]);
-    method public androidx.core.content.res.FontResourcesParserCompat.FontFileResourceEntry![] getEntries();
-  }
-
-  public static final class FontResourcesParserCompat.FontFileResourceEntry {
-    ctor public FontResourcesParserCompat.FontFileResourceEntry(String, int, boolean, String?, int, int);
-    method public String getFileName();
-    method public int getResourceId();
-    method public int getTtcIndex();
-    method public String? getVariationSettings();
-    method public int getWeight();
-    method public boolean isItalic();
-  }
-
-  public static final class FontResourcesParserCompat.ProviderResourceEntry implements androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry {
-    ctor public FontResourcesParserCompat.ProviderResourceEntry(androidx.core.provider.FontRequest, @androidx.core.content.res.FontResourcesParserCompat.FetchStrategy int, int);
-    method @androidx.core.content.res.FontResourcesParserCompat.FetchStrategy public int getFetchStrategy();
-    method public androidx.core.provider.FontRequest getRequest();
-    method public int getTimeout();
-  }
-
-  public final class ResourcesCompat {
-    method public static void clearCachesForTheme(android.content.res.Resources.Theme);
-    method public static android.graphics.Typeface? getCachedFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
-    method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
-    method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
-    method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
-    method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
-    method public static float getFloat(android.content.res.Resources, @DimenRes int);
-    method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
-    method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int, android.util.TypedValue, int, androidx.core.content.res.ResourcesCompat.FontCallback?) throws android.content.res.Resources.NotFoundException;
-    field @AnyRes public static final int ID_NULL = 0; // 0x0
-  }
-
-  public abstract static class ResourcesCompat.FontCallback {
-    ctor public ResourcesCompat.FontCallback();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final void callbackFailAsync(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int, android.os.Handler?);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final void callbackSuccessAsync(android.graphics.Typeface, android.os.Handler?);
-    method public abstract void onFontRetrievalFailed(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int);
-    method public abstract void onFontRetrieved(android.graphics.Typeface);
-  }
-
-  public static final class ResourcesCompat.ThemeCompat {
-    method public static void rebase(android.content.res.Resources.Theme);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypedArrayUtils {
-    method public static int getAttr(android.content.Context, int, int);
-    method public static boolean getBoolean(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, boolean);
-    method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
-    method public static int getInt(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, int);
-    method public static boolean getNamedBoolean(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, boolean);
-    method @ColorInt public static int getNamedColor(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, @ColorInt int);
-    method public static android.content.res.ColorStateList? getNamedColorStateList(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?, String, @StyleableRes int);
-    method public static androidx.core.content.res.ComplexColorCompat! getNamedComplexColor(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?, String, @StyleableRes int, @ColorInt int);
-    method public static float getNamedFloat(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, float);
-    method public static int getNamedInt(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, int);
-    method @AnyRes public static int getNamedResourceId(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, @AnyRes int);
-    method public static String? getNamedString(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int);
-    method @AnyRes public static int getResourceId(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, @AnyRes int);
-    method public static String? getString(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
-    method public static CharSequence? getText(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
-    method public static CharSequence![]? getTextArray(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
-    method public static boolean hasAttribute(org.xmlpull.v1.XmlPullParser, String);
-    method public static android.content.res.TypedArray obtainAttributes(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet, int[]);
-    method public static android.util.TypedValue? peekNamedValue(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, int);
-  }
-
-}
-
-package androidx.core.database {
-
-  public final class CursorWindowCompat {
-    method public static android.database.CursorWindow create(String?, long);
-  }
-
-  @Deprecated public final class DatabaseUtilsCompat {
-    method @Deprecated public static String![]! appendSelectionArgs(String![]!, String![]!);
-    method @Deprecated public static String! concatenateWhere(String!, String!);
-  }
-
-}
-
-package androidx.core.database.sqlite {
-
-  public final class SQLiteCursorCompat {
-    method public static void setFillWindowForwardOnly(android.database.sqlite.SQLiteCursor, boolean);
-  }
-
-}
-
-package androidx.core.graphics {
-
-  public final class BitmapCompat {
-    method public static android.graphics.Bitmap createScaledBitmap(android.graphics.Bitmap, int, int, android.graphics.Rect?, boolean);
-    method public static int getAllocationByteCount(android.graphics.Bitmap);
-    method public static boolean hasMipMap(android.graphics.Bitmap);
-    method public static void setHasMipMap(android.graphics.Bitmap, boolean);
-  }
-
-  public class BlendModeColorFilterCompat {
-    method public static android.graphics.ColorFilter? createBlendModeColorFilterCompat(int, androidx.core.graphics.BlendModeCompat);
-  }
-
-  public enum BlendModeCompat {
-    enum_constant public static final androidx.core.graphics.BlendModeCompat CLEAR;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_BURN;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_DODGE;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DARKEN;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat DIFFERENCE;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DST;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DST_ATOP;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DST_IN;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OUT;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OVER;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat EXCLUSION;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HARD_LIGHT;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HUE;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat LIGHTEN;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat LUMINOSITY;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat MODULATE;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat MULTIPLY;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat OVERLAY;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat PLUS;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SATURATION;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SCREEN;
-    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SOFT_LIGHT;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SRC;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_ATOP;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_IN;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OUT;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OVER;
-    enum_constant public static final androidx.core.graphics.BlendModeCompat XOR;
-  }
-
-  public final class ColorUtils {
-    method @ColorInt public static int HSLToColor(float[]);
-    method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
-    method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
-    method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
-    method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
-    method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
-    method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double);
-    method public static void XYZToLAB(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double, double[]);
-    method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
-    method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
-    method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
-    method public static double calculateContrast(@ColorInt int, @ColorInt int);
-    method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
-    method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
-    method public static void colorToHSL(@ColorInt int, float[]);
-    method public static void colorToLAB(@ColorInt int, double[]);
-    method public static void colorToXYZ(@ColorInt int, double[]);
-    method public static int compositeColors(@ColorInt int, @ColorInt int);
-    method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
-    method public static double distanceEuclidean(double[], double[]);
-    method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
-  }
-
-  public final class Insets {
-    method public static androidx.core.graphics.Insets add(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
-    method public static androidx.core.graphics.Insets max(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
-    method public static androidx.core.graphics.Insets min(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
-    method public static androidx.core.graphics.Insets of(int, int, int, int);
-    method public static androidx.core.graphics.Insets of(android.graphics.Rect);
-    method public static androidx.core.graphics.Insets subtract(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
-    method @RequiresApi(api=29) public static androidx.core.graphics.Insets toCompatInsets(android.graphics.Insets);
-    method @RequiresApi(29) public android.graphics.Insets toPlatformInsets();
-    method @Deprecated @RequiresApi(api=29) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.Insets wrap(android.graphics.Insets);
-    field public static final androidx.core.graphics.Insets NONE;
-    field public final int bottom;
-    field public final int left;
-    field public final int right;
-    field public final int top;
-  }
-
-  public final class PaintCompat {
-    method public static boolean hasGlyph(android.graphics.Paint, String);
-    method public static boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat?);
-  }
-
-  public final class PathSegment {
-    ctor public PathSegment(android.graphics.PointF, float, android.graphics.PointF, float);
-    method public android.graphics.PointF getEnd();
-    method public float getEndFraction();
-    method public android.graphics.PointF getStart();
-    method public float getStartFraction();
-  }
-
-  public final class PathUtils {
-    method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path);
-    method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path, @FloatRange(from=0) float);
-  }
-
-  public class TypefaceCompat {
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public static void clearCache();
-    method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, int);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromFontInfo(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromResourcesFamilyXml(android.content.Context, androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry, android.content.res.Resources, int, int, androidx.core.content.res.ResourcesCompat.FontCallback?, android.os.Handler?, boolean);
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromResourcesFontFile(android.content.Context, android.content.res.Resources, int, String!, int);
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? findFromCache(android.content.res.Resources, int, int);
-  }
-
-  @RequiresApi(26) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatApi26Impl {
-    ctor public TypefaceCompatApi26Impl();
-    method protected android.graphics.Typeface? createFromFamiliesWithDefault(Object!);
-    method public android.graphics.Typeface? createFromFontFamilyFilesResourceEntry(android.content.Context!, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry!, android.content.res.Resources!, int);
-    method public android.graphics.Typeface? createFromFontInfo(android.content.Context!, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
-    method public android.graphics.Typeface? createFromResourcesFontFile(android.content.Context!, android.content.res.Resources!, int, String!, int);
-    method protected java.lang.reflect.Method! obtainAbortCreationMethod(Class<?>!) throws java.lang.NoSuchMethodException;
-    method protected java.lang.reflect.Method! obtainAddFontFromAssetManagerMethod(Class<?>!) throws java.lang.NoSuchMethodException;
-    method protected java.lang.reflect.Method! obtainAddFontFromBufferMethod(Class<?>!) throws java.lang.NoSuchMethodException;
-    method protected java.lang.reflect.Method! obtainCreateFromFamiliesWithDefaultMethod(Class<?>!) throws java.lang.NoSuchMethodException;
-    method protected Class<?>! obtainFontFamily() throws java.lang.ClassNotFoundException;
-    method protected java.lang.reflect.Constructor<?>! obtainFontFamilyCtor(Class<?>!) throws java.lang.NoSuchMethodException;
-    method protected java.lang.reflect.Method! obtainFreezeMethod(Class<?>!) throws java.lang.NoSuchMethodException;
-    field protected final java.lang.reflect.Method! mAbortCreation;
-    field protected final java.lang.reflect.Method! mAddFontFromAssetManager;
-    field protected final java.lang.reflect.Method! mAddFontFromBuffer;
-    field protected final java.lang.reflect.Method! mCreateFromFamiliesWithDefault;
-    field protected final Class<?>! mFontFamily;
-    field protected final java.lang.reflect.Constructor<?>! mFontFamilyCtor;
-    field protected final java.lang.reflect.Method! mFreeze;
-  }
-
-  @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatApi28Impl extends androidx.core.graphics.TypefaceCompatApi26Impl {
-    ctor public TypefaceCompatApi28Impl();
-  }
-
-  @RequiresApi(29) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class TypefaceCompatApi29Impl {
-    ctor public TypefaceCompatApi29Impl();
-    method public android.graphics.Typeface? createFromFontFamilyFilesResourceEntry(android.content.Context!, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry!, android.content.res.Resources!, int);
-    method public android.graphics.Typeface? createFromFontInfo(android.content.Context!, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
-    method protected android.graphics.Typeface! createFromInputStream(android.content.Context!, java.io.InputStream!);
-    method public android.graphics.Typeface? createFromResourcesFontFile(android.content.Context!, android.content.res.Resources!, int, String!, int);
-    method protected androidx.core.provider.FontsContractCompat.FontInfo! findBestInfo(androidx.core.provider.FontsContractCompat.FontInfo![]!, int);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatUtil {
-    method public static void closeQuietly(java.io.Closeable?);
-    method @RequiresApi(19) public static java.nio.ByteBuffer? copyToDirectBuffer(android.content.Context, android.content.res.Resources, int);
-    method public static boolean copyToFile(java.io.File, java.io.InputStream);
-    method public static boolean copyToFile(java.io.File, android.content.res.Resources, int);
-    method public static java.io.File? getTempFile(android.content.Context);
-    method @RequiresApi(19) public static java.nio.ByteBuffer? mmap(android.content.Context, android.os.CancellationSignal?, android.net.Uri);
-  }
-
-}
-
-package androidx.core.graphics.drawable {
-
-  public final class DrawableCompat {
-    method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
-    method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
-    method public static void clearColorFilter(android.graphics.drawable.Drawable);
-    method public static int getAlpha(android.graphics.drawable.Drawable);
-    method public static android.graphics.ColorFilter? getColorFilter(android.graphics.drawable.Drawable);
-    method public static int getLayoutDirection(android.graphics.drawable.Drawable);
-    method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
-    method @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
-    method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
-    method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
-    method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
-    method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
-    method public static void setTint(android.graphics.drawable.Drawable, @ColorInt int);
-    method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList?);
-    method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
-    method public static <T extends android.graphics.drawable.Drawable> T! unwrap(android.graphics.drawable.Drawable);
-    method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
-  }
-
-  @androidx.versionedparcelable.VersionedParcelize(allowSerialization=true, ignoreParcelables=true, isCustom=true, jetifyAs="android.support.v4.graphics.drawable.IconCompat") public class IconCompat extends androidx.versionedparcelable.CustomVersionedParcelable {
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addToShortcutIntent(android.content.Intent, android.graphics.drawable.Drawable?, android.content.Context);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void checkResource(android.content.Context);
-    method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
-    method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
-    method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.graphics.drawable.Icon);
-    method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? createFromIconOrNullIfZeroResId(android.graphics.drawable.Icon);
-    method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
-    method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
-    method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(android.net.Uri);
-    method public static androidx.core.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
-    method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
-    method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
-    method public static androidx.core.graphics.drawable.IconCompat createWithData(byte[], int, int);
-    method public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.Context, @DrawableRes int);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.res.Resources?, String, @DrawableRes int);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.Bitmap? getBitmap();
-    method @DrawableRes public int getResId();
-    method public String getResPackage();
-    method public int getType();
-    method public android.net.Uri getUri();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.io.InputStream? getUriInputStream(android.content.Context);
-    method public android.graphics.drawable.Drawable? loadDrawable(android.content.Context);
-    method public androidx.core.graphics.drawable.IconCompat setTint(@ColorInt int);
-    method public androidx.core.graphics.drawable.IconCompat setTintList(android.content.res.ColorStateList?);
-    method public androidx.core.graphics.drawable.IconCompat setTintMode(android.graphics.PorterDuff.Mode?);
-    method public android.os.Bundle toBundle();
-    method @Deprecated @RequiresApi(23) public android.graphics.drawable.Icon toIcon();
-    method @RequiresApi(23) public android.graphics.drawable.Icon toIcon(android.content.Context?);
-    field public static final int TYPE_ADAPTIVE_BITMAP = 5; // 0x5
-    field public static final int TYPE_BITMAP = 1; // 0x1
-    field public static final int TYPE_DATA = 3; // 0x3
-    field public static final int TYPE_RESOURCE = 2; // 0x2
-    field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
-    field public static final int TYPE_URI = 4; // 0x4
-    field public static final int TYPE_URI_ADAPTIVE_BITMAP = 6; // 0x6
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.versionedparcelable.ParcelField(value=1, defaultValue="androidx.core.graphics.drawable.IconCompat.TYPE_UNKNOWN") public int mType;
-  }
-
-  public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
-    method public void draw(android.graphics.Canvas);
-    method public final android.graphics.Bitmap? getBitmap();
-    method public float getCornerRadius();
-    method public int getGravity();
-    method public int getOpacity();
-    method public final android.graphics.Paint getPaint();
-    method public boolean hasAntiAlias();
-    method public boolean hasMipMap();
-    method public boolean isCircular();
-    method public void setAlpha(int);
-    method public void setAntiAlias(boolean);
-    method public void setCircular(boolean);
-    method public void setColorFilter(android.graphics.ColorFilter!);
-    method public void setCornerRadius(float);
-    method public void setDither(boolean);
-    method public void setGravity(int);
-    method public void setMipMap(boolean);
-    method public void setTargetDensity(android.graphics.Canvas);
-    method public void setTargetDensity(android.util.DisplayMetrics);
-    method public void setTargetDensity(int);
-  }
-
-  public final class RoundedBitmapDrawableFactory {
-    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
-    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
-    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintAwareDrawable {
-    method public void setTint(@ColorInt int);
-    method public void setTintList(android.content.res.ColorStateList!);
-    method public void setTintMode(android.graphics.PorterDuff.Mode!);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface WrappedDrawable {
-    method public android.graphics.drawable.Drawable! getWrappedDrawable();
-    method public void setWrappedDrawable(android.graphics.drawable.Drawable!);
-  }
-
-}
-
-package androidx.core.hardware.display {
-
-  public final class DisplayManagerCompat {
-    method public android.view.Display? getDisplay(int);
-    method public android.view.Display![] getDisplays();
-    method public android.view.Display![] getDisplays(String?);
-    method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
-    field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
-  }
-
-}
-
-package androidx.core.hardware.fingerprint {
-
-  @Deprecated public class FingerprintManagerCompat {
-    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
-    method @Deprecated public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
-    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
-    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
-  }
-
-  @Deprecated public abstract static class FingerprintManagerCompat.AuthenticationCallback {
-    ctor @Deprecated public FingerprintManagerCompat.AuthenticationCallback();
-    method @Deprecated public void onAuthenticationError(int, CharSequence!);
-    method @Deprecated public void onAuthenticationFailed();
-    method @Deprecated public void onAuthenticationHelp(int, CharSequence!);
-    method @Deprecated public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
-  }
-
-  @Deprecated public static final class FingerprintManagerCompat.AuthenticationResult {
-    ctor @Deprecated public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
-    method @Deprecated public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
-  }
-
-  @Deprecated public static class FingerprintManagerCompat.CryptoObject {
-    ctor @Deprecated public FingerprintManagerCompat.CryptoObject(java.security.Signature);
-    ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
-    ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
-    method @Deprecated public javax.crypto.Cipher? getCipher();
-    method @Deprecated public javax.crypto.Mac? getMac();
-    method @Deprecated public java.security.Signature? getSignature();
-  }
-
-}
-
-package androidx.core.internal.view {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportMenu extends android.view.Menu {
-    method public void setGroupDividerEnabled(boolean);
-    field public static final int CATEGORY_MASK = -65536; // 0xffff0000
-    field public static final int CATEGORY_SHIFT = 16; // 0x10
-    field public static final int FLAG_KEEP_OPEN_ON_SUBMENU_OPENED = 4; // 0x4
-    field public static final int SUPPORTED_MODIFIERS_MASK = 69647; // 0x1100f
-    field public static final int USER_MASK = 65535; // 0xffff
-    field public static final int USER_SHIFT = 0; // 0x0
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportMenuItem extends android.view.MenuItem {
-    method public int getAlphabeticModifiers();
-    method public CharSequence? getContentDescription();
-    method public android.content.res.ColorStateList? getIconTintList();
-    method public android.graphics.PorterDuff.Mode? getIconTintMode();
-    method public int getNumericModifiers();
-    method public androidx.core.view.ActionProvider? getSupportActionProvider();
-    method public CharSequence? getTooltipText();
-    method public boolean requiresActionButton();
-    method public boolean requiresOverflow();
-    method public android.view.MenuItem setAlphabeticShortcut(char, int);
-    method public androidx.core.internal.view.SupportMenuItem setContentDescription(CharSequence?);
-    method public android.view.MenuItem setIconTintList(android.content.res.ColorStateList?);
-    method public android.view.MenuItem setIconTintMode(android.graphics.PorterDuff.Mode?);
-    method public android.view.MenuItem setNumericShortcut(char, int);
-    method public android.view.MenuItem setShortcut(char, char, int, int);
-    method public androidx.core.internal.view.SupportMenuItem setSupportActionProvider(androidx.core.view.ActionProvider?);
-    method public androidx.core.internal.view.SupportMenuItem setTooltipText(CharSequence?);
-    field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
-    field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
-    field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
-    field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
-    field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportSubMenu extends androidx.core.internal.view.SupportMenu android.view.SubMenu {
-  }
-
-}
-
-package androidx.core.location {
-
-  public abstract class GnssStatusCompat {
-    method @FloatRange(from=0, to=360) public abstract float getAzimuthDegrees(@IntRange(from=0) int);
-    method @FloatRange(from=0, to=63) public abstract float getBasebandCn0DbHz(@IntRange(from=0) int);
-    method @FloatRange(from=0) public abstract float getCarrierFrequencyHz(@IntRange(from=0) int);
-    method @FloatRange(from=0, to=63) public abstract float getCn0DbHz(@IntRange(from=0) int);
-    method public abstract int getConstellationType(@IntRange(from=0) int);
-    method @FloatRange(from=0xffffffa6, to=90) public abstract float getElevationDegrees(@IntRange(from=0) int);
-    method @IntRange(from=0) public abstract int getSatelliteCount();
-    method @IntRange(from=1, to=200) public abstract int getSvid(@IntRange(from=0) int);
-    method public abstract boolean hasAlmanacData(@IntRange(from=0) int);
-    method public abstract boolean hasBasebandCn0DbHz(@IntRange(from=0) int);
-    method public abstract boolean hasCarrierFrequencyHz(@IntRange(from=0) int);
-    method public abstract boolean hasEphemerisData(@IntRange(from=0) int);
-    method public abstract boolean usedInFix(@IntRange(from=0) int);
-    method @RequiresApi(android.os.Build.VERSION_CODES.N) public static androidx.core.location.GnssStatusCompat wrap(android.location.GnssStatus);
-    method public static androidx.core.location.GnssStatusCompat wrap(android.location.GpsStatus);
-    field public static final int CONSTELLATION_BEIDOU = 5; // 0x5
-    field public static final int CONSTELLATION_GALILEO = 6; // 0x6
-    field public static final int CONSTELLATION_GLONASS = 3; // 0x3
-    field public static final int CONSTELLATION_GPS = 1; // 0x1
-    field public static final int CONSTELLATION_IRNSS = 7; // 0x7
-    field public static final int CONSTELLATION_QZSS = 4; // 0x4
-    field public static final int CONSTELLATION_SBAS = 2; // 0x2
-    field public static final int CONSTELLATION_UNKNOWN = 0; // 0x0
-  }
-
-  public abstract static class GnssStatusCompat.Callback {
-    ctor public GnssStatusCompat.Callback();
-    method public void onFirstFix(@IntRange(from=0) int);
-    method public void onSatelliteStatusChanged(androidx.core.location.GnssStatusCompat);
-    method public void onStarted();
-    method public void onStopped();
-  }
-
-  public final class LocationCompat {
-    method public static float getBearingAccuracyDegrees(android.location.Location);
-    method public static long getElapsedRealtimeMillis(android.location.Location);
-    method public static long getElapsedRealtimeNanos(android.location.Location);
-    method public static float getSpeedAccuracyMetersPerSecond(android.location.Location);
-    method public static float getVerticalAccuracyMeters(android.location.Location);
-    method public static boolean hasBearingAccuracy(android.location.Location);
-    method public static boolean hasSpeedAccuracy(android.location.Location);
-    method public static boolean hasVerticalAccuracy(android.location.Location);
-    method public static boolean isMock(android.location.Location);
-    method public static void setBearingAccuracyDegrees(android.location.Location, float);
-    method public static void setMock(android.location.Location, boolean);
-    method public static void setSpeedAccuracyMetersPerSecond(android.location.Location, float);
-    method public static void setVerticalAccuracyMeters(android.location.Location, float);
-    field public static final String EXTRA_BEARING_ACCURACY = "bearingAccuracy";
-    field public static final String EXTRA_IS_MOCK = "mockLocation";
-    field public static final String EXTRA_SPEED_ACCURACY = "speedAccuracy";
-    field public static final String EXTRA_VERTICAL_ACCURACY = "verticalAccuracy";
-  }
-
-  public interface LocationListenerCompat extends android.location.LocationListener {
-    method public default void onStatusChanged(String, int, android.os.Bundle?);
-  }
-
-  public final class LocationManagerCompat {
-    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void getCurrentLocation(android.location.LocationManager, String, androidx.core.os.CancellationSignal?, java.util.concurrent.Executor, androidx.core.util.Consumer<android.location.Location!>);
-    method public static String? getGnssHardwareModelName(android.location.LocationManager);
-    method public static int getGnssYearOfHardware(android.location.LocationManager);
-    method public static boolean hasProvider(android.location.LocationManager, String);
-    method public static boolean isLocationEnabled(android.location.LocationManager);
-    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback, android.os.Handler);
-    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, java.util.concurrent.Executor, androidx.core.location.GnssStatusCompat.Callback);
-    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void removeUpdates(android.location.LocationManager, androidx.core.location.LocationListenerCompat);
-    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
-    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, androidx.core.location.LocationListenerCompat, android.os.Looper);
-    method public static void unregisterGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback);
-  }
-
-  public final class LocationRequestCompat {
-    method @IntRange(from=1) public long getDurationMillis();
-    method @IntRange(from=0) public long getIntervalMillis();
-    method @IntRange(from=0) public long getMaxUpdateDelayMillis();
-    method @IntRange(from=1, to=java.lang.Integer.MAX_VALUE) public int getMaxUpdates();
-    method @FloatRange(from=0, to=java.lang.Float.MAX_VALUE) public float getMinUpdateDistanceMeters();
-    method @IntRange(from=0) public long getMinUpdateIntervalMillis();
-    method public int getQuality();
-    method @RequiresApi(31) public android.location.LocationRequest toLocationRequest();
-    method @RequiresApi(19) public android.location.LocationRequest? toLocationRequest(String);
-    field public static final long PASSIVE_INTERVAL = 9223372036854775807L; // 0x7fffffffffffffffL
-    field public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; // 0x66
-    field public static final int QUALITY_HIGH_ACCURACY = 100; // 0x64
-    field public static final int QUALITY_LOW_POWER = 104; // 0x68
-  }
-
-  public static final class LocationRequestCompat.Builder {
-    ctor public LocationRequestCompat.Builder(long);
-    ctor public LocationRequestCompat.Builder(androidx.core.location.LocationRequestCompat);
-    method public androidx.core.location.LocationRequestCompat build();
-    method public androidx.core.location.LocationRequestCompat.Builder clearMinUpdateIntervalMillis();
-    method public androidx.core.location.LocationRequestCompat.Builder setDurationMillis(@IntRange(from=1) long);
-    method public androidx.core.location.LocationRequestCompat.Builder setIntervalMillis(@IntRange(from=0) long);
-    method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdateDelayMillis(@IntRange(from=0) long);
-    method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdates(@IntRange(from=1, to=java.lang.Integer.MAX_VALUE) int);
-    method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateDistanceMeters(@FloatRange(from=0, to=java.lang.Float.MAX_VALUE) float);
-    method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateIntervalMillis(@IntRange(from=0) long);
-    method public androidx.core.location.LocationRequestCompat.Builder setQuality(int);
-  }
-
-}
-
-package androidx.core.math {
-
-  public class MathUtils {
-    method public static int addExact(int, int);
-    method public static long addExact(long, long);
-    method public static float clamp(float, float, float);
-    method public static double clamp(double, double, double);
-    method public static int clamp(int, int, int);
-    method public static long clamp(long, long, long);
-    method public static int decrementExact(int);
-    method public static long decrementExact(long);
-    method public static int incrementExact(int);
-    method public static long incrementExact(long);
-    method public static int multiplyExact(int, int);
-    method public static long multiplyExact(long, long);
-    method public static int negateExact(int);
-    method public static long negateExact(long);
-    method public static int subtractExact(int, int);
-    method public static long subtractExact(long, long);
-    method public static int toIntExact(long);
-  }
-
-}
-
-package androidx.core.net {
-
-  public final class ConnectivityManagerCompat {
-    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
-    method @androidx.core.net.ConnectivityManagerCompat.RestrictBackgroundStatus public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
-    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
-    field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
-    field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
-    field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
-  }
-
-  @IntDef({androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_DISABLED, androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_WHITELISTED, androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_ENABLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ConnectivityManagerCompat.RestrictBackgroundStatus {
-  }
-
-  public final class MailTo {
-    method public String? getBcc();
-    method public String? getBody();
-    method public String? getCc();
-    method public java.util.Map<java.lang.String!,java.lang.String!>? getHeaders();
-    method public String? getSubject();
-    method public String? getTo();
-    method public static boolean isMailTo(String?);
-    method public static boolean isMailTo(android.net.Uri?);
-    method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
-    method public static androidx.core.net.MailTo parse(android.net.Uri) throws androidx.core.net.ParseException;
-    field public static final String MAILTO_SCHEME = "mailto:";
-  }
-
-  public class ParseException extends java.lang.RuntimeException {
-    field public final String response;
-  }
-
-  public final class TrafficStatsCompat {
-    method @Deprecated public static void clearThreadStatsTag();
-    method @Deprecated public static int getThreadStatsTag();
-    method @Deprecated public static void incrementOperationCount(int);
-    method @Deprecated public static void incrementOperationCount(int, int);
-    method @Deprecated public static void setThreadStatsTag(int);
-    method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
-    method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
-    method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
-    method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
-  }
-
-  public final class UriCompat {
-    method public static String toSafeString(android.net.Uri);
-  }
-
-}
-
-package androidx.core.os {
-
-  public class BuildCompat {
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N) public static boolean isAtLeastN();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N_MR1) public static boolean isAtLeastNMR1();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O) public static boolean isAtLeastO();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O_MR1) public static boolean isAtLeastOMR1();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.P) public static boolean isAtLeastP();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
-    method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
-    method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
-  }
-
-  public final class CancellationSignal {
-    ctor public CancellationSignal();
-    method public void cancel();
-    method public Object? getCancellationSignalObject();
-    method public boolean isCanceled();
-    method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener?);
-    method public void throwIfCanceled();
-  }
-
-  public static interface CancellationSignal.OnCancelListener {
-    method public void onCancel();
-  }
-
-  public final class ConfigurationCompat {
-    method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
-  }
-
-  public final class EnvironmentCompat {
-    method public static String getStorageState(java.io.File);
-    field public static final String MEDIA_UNKNOWN = "unknown";
-  }
-
-  public final class ExecutorCompat {
-    method public static java.util.concurrent.Executor create(android.os.Handler);
-  }
-
-  public final class HandlerCompat {
-    method public static android.os.Handler createAsync(android.os.Looper);
-    method public static android.os.Handler createAsync(android.os.Looper, android.os.Handler.Callback);
-    method @RequiresApi(16) public static boolean hasCallbacks(android.os.Handler, Runnable);
-    method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
-  }
-
-  public final class LocaleListCompat {
-    method public static androidx.core.os.LocaleListCompat create(java.util.Locale!...);
-    method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
-    method public java.util.Locale? get(int);
-    method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
-    method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
-    method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
-    method public java.util.Locale? getFirstMatch(String![]);
-    method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
-    method public boolean isEmpty();
-    method @IntRange(from=0) public int size();
-    method public String toLanguageTags();
-    method public Object? unwrap();
-    method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
-    method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
-  }
-
-  public final class MessageCompat {
-    method public static boolean isAsynchronous(android.os.Message);
-    method public static void setAsynchronous(android.os.Message, boolean);
-  }
-
-  public class OperationCanceledException extends java.lang.RuntimeException {
-    ctor public OperationCanceledException();
-    ctor public OperationCanceledException(String?);
-  }
-
-  public final class ParcelCompat {
-    method public static boolean readBoolean(android.os.Parcel);
-    method public static void writeBoolean(android.os.Parcel, boolean);
-  }
-
-  @Deprecated public final class ParcelableCompat {
-    method @Deprecated public static <T> android.os.Parcelable.Creator<T!>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T!>!);
-  }
-
-  @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
-    method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
-    method @Deprecated public T![]! newArray(int);
-  }
-
-  public final class ProcessCompat {
-    method public static boolean isApplicationUid(int);
-  }
-
-  @Deprecated public final class TraceCompat {
-    method @Deprecated public static void beginAsyncSection(String, int);
-    method @Deprecated public static void beginSection(String);
-    method @Deprecated public static void endAsyncSection(String, int);
-    method @Deprecated public static void endSection();
-    method @Deprecated public static boolean isEnabled();
-    method @Deprecated public static void setCounter(String, int);
-  }
-
-  @RequiresApi(17) public class UserHandleCompat {
-    method public static android.os.UserHandle getUserHandleForUid(int);
-  }
-
-  public class UserManagerCompat {
-    method public static boolean isUserUnlocked(android.content.Context);
-  }
-
-}
-
-package androidx.core.provider {
-
-  public final class DocumentsContractCompat {
-    method public static android.net.Uri? buildChildDocumentsUri(String, String?);
-    method public static android.net.Uri? buildChildDocumentsUriUsingTree(android.net.Uri, String);
-    method public static android.net.Uri? buildDocumentUri(String, String);
-    method public static android.net.Uri? buildDocumentUriUsingTree(android.net.Uri, String);
-    method public static android.net.Uri? buildTreeDocumentUri(String, String);
-    method public static android.net.Uri? createDocument(android.content.ContentResolver, android.net.Uri, String, String) throws java.io.FileNotFoundException;
-    method public static String? getDocumentId(android.net.Uri);
-    method public static String? getTreeDocumentId(android.net.Uri);
-    method public static boolean isDocumentUri(android.content.Context, android.net.Uri?);
-    method public static boolean isTreeUri(android.net.Uri);
-    method public static boolean removeDocument(android.content.ContentResolver, android.net.Uri, android.net.Uri) throws java.io.FileNotFoundException;
-    method public static android.net.Uri? renameDocument(android.content.ContentResolver, android.net.Uri, String) throws java.io.FileNotFoundException;
-  }
-
-  public static final class DocumentsContractCompat.DocumentCompat {
-    field public static final int FLAG_VIRTUAL_DOCUMENT = 512; // 0x200
-  }
-
-  public final class FontRequest {
-    ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
-    ctor public FontRequest(String, String, String, @ArrayRes int);
-    method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
-    method @ArrayRes public int getCertificatesArrayResId();
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getIdentifier();
-    method public String getProviderAuthority();
-    method public String getProviderPackage();
-    method public String getQuery();
-  }
-
-  public class FontsContractCompat {
-    method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![]);
-    method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface! getFontSync(android.content.Context!, androidx.core.provider.FontRequest!, androidx.core.content.res.ResourcesCompat.FontCallback?, android.os.Handler?, boolean, int, int);
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public static android.content.pm.ProviderInfo? getProvider(android.content.pm.PackageManager, androidx.core.provider.FontRequest, android.content.res.Resources?) throws android.content.pm.PackageManager.NameNotFoundException;
-    method @Deprecated @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static java.util.Map<android.net.Uri!,java.nio.ByteBuffer!>! prepareFontData(android.content.Context!, androidx.core.provider.FontsContractCompat.FontInfo![]!, android.os.CancellationSignal!);
-    method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void resetCache();
-    field @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String PARCEL_FONT_RESULTS = "font_results";
-  }
-
-  public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
-    ctor public FontsContractCompat.Columns();
-    field public static final String FILE_ID = "file_id";
-    field public static final String ITALIC = "font_italic";
-    field public static final String RESULT_CODE = "result_code";
-    field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
-    field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
-    field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
-    field public static final int RESULT_CODE_OK = 0; // 0x0
-    field public static final String TTC_INDEX = "font_ttc_index";
-    field public static final String VARIATION_SETTINGS = "font_variation_settings";
-    field public static final String WEIGHT = "font_weight";
-  }
-
-  public static class FontsContractCompat.FontFamilyResult {
-    ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public FontsContractCompat.FontFamilyResult(int, androidx.core.provider.FontsContractCompat.FontInfo![]?);
-    method public androidx.core.provider.FontsContractCompat.FontInfo![]! getFonts();
-    method public int getStatusCode();
-    field public static final int STATUS_OK = 0; // 0x0
-    field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
-    field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
-  }
-
-  public static class FontsContractCompat.FontInfo {
-    ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public FontsContractCompat.FontInfo(android.net.Uri, @IntRange(from=0) int, @IntRange(from=1, to=1000) int, boolean, int);
-    method public int getResultCode();
-    method @IntRange(from=0) public int getTtcIndex();
-    method public android.net.Uri getUri();
-    method @IntRange(from=1, to=1000) public int getWeight();
-    method public boolean isItalic();
-  }
-
-  public static class FontsContractCompat.FontRequestCallback {
-    ctor public FontsContractCompat.FontRequestCallback();
-    method public void onTypefaceRequestFailed(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int);
-    method public void onTypefaceRetrieved(android.graphics.Typeface!);
-    field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
-    field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
-    field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
-    field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
-    field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
-    field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
-    field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
-    field @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int RESULT_OK = 0; // 0x0
-  }
-
-  @IntDef({androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_PROVIDER_NOT_FOUND, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_NOT_FOUND, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_UNAVAILABLE, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_MALFORMED_QUERY, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_WRONG_CERTIFICATES, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_SECURITY_VIOLATION, androidx.core.provider.FontsContractCompat.FontRequestCallback.RESULT_OK}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FontsContractCompat.FontRequestCallback.FontRequestFailReason {
-  }
-
-  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SelfDestructiveThread {
-    ctor @Deprecated public SelfDestructiveThread(String!, int, int);
-    method @Deprecated @VisibleForTesting public int getGeneration();
-    method @Deprecated @VisibleForTesting public boolean isRunning();
-    method @Deprecated public <T> void postAndReply(java.util.concurrent.Callable<T!>!, androidx.core.provider.SelfDestructiveThread.ReplyCallback<T!>!);
-    method @Deprecated public <T> T! postAndWait(java.util.concurrent.Callable<T!>!, int) throws java.lang.InterruptedException;
-  }
-
-  @Deprecated public static interface SelfDestructiveThread.ReplyCallback<T> {
-    method @Deprecated public void onReply(T!);
-  }
-
-}
-
-package androidx.core.telephony {
-
-  @RequiresApi(22) public class SubscriptionManagerCompat {
-    method public static int getSlotIndex(int);
-  }
-
-  public class TelephonyManagerCompat {
-    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static String? getImei(android.telephony.TelephonyManager);
-    method public static int getSubscriptionId(android.telephony.TelephonyManager);
-  }
-
-}
-
-package androidx.core.telephony.mbms {
-
-  public final class MbmsHelper {
-    method public static CharSequence? getBestNameForService(android.content.Context, android.telephony.mbms.ServiceInfo);
-  }
-
-}
-
-package androidx.core.text {
-
-  public final class BidiFormatter {
-    method public static androidx.core.text.BidiFormatter! getInstance();
-    method public static androidx.core.text.BidiFormatter! getInstance(boolean);
-    method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
-    method public boolean getStereoReset();
-    method public boolean isRtl(String!);
-    method public boolean isRtl(CharSequence!);
-    method public boolean isRtlContext();
-    method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
-    method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
-    method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
-    method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
-    method public String! unicodeWrap(String!, boolean);
-    method public CharSequence! unicodeWrap(CharSequence!, boolean);
-    method public String! unicodeWrap(String!);
-    method public CharSequence! unicodeWrap(CharSequence!);
-  }
-
-  public static final class BidiFormatter.Builder {
-    ctor public BidiFormatter.Builder();
-    ctor public BidiFormatter.Builder(boolean);
-    ctor public BidiFormatter.Builder(java.util.Locale!);
-    method public androidx.core.text.BidiFormatter! build();
-    method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
-    method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
-  }
-
-  public final class HtmlCompat {
-    method public static android.text.Spanned fromHtml(String, int);
-    method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
-    method public static String toHtml(android.text.Spanned, int);
-    field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
-    field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
-    field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
-    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
-    field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
-    field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
-  }
-
-  public final class ICUCompat {
-    method public static String? maximizeAndGetScript(java.util.Locale);
-  }
-
-  public class PrecomputedTextCompat implements android.text.Spannable {
-    method public char charAt(int);
-    method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
-    method @IntRange(from=0) public int getParagraphCount();
-    method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
-    method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
-    method public androidx.core.text.PrecomputedTextCompat.Params getParams();
-    method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.text.PrecomputedText? getPrecomputedText();
-    method public int getSpanEnd(Object!);
-    method public int getSpanFlags(Object!);
-    method public int getSpanStart(Object!);
-    method public <T> T![]! getSpans(int, int, Class<T!>!);
-    method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
-    method public int length();
-    method public int nextSpanTransition(int, int, Class!);
-    method public void removeSpan(Object!);
-    method public void setSpan(Object!, int, int, int);
-    method public CharSequence! subSequence(int, int);
-  }
-
-  public static final class PrecomputedTextCompat.Params {
-    ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean equalsWithoutTextDirection(androidx.core.text.PrecomputedTextCompat.Params);
-    method @RequiresApi(23) public int getBreakStrategy();
-    method @RequiresApi(23) public int getHyphenationFrequency();
-    method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
-    method public android.text.TextPaint getTextPaint();
-  }
-
-  public static class PrecomputedTextCompat.Params.Builder {
-    ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
-    method public androidx.core.text.PrecomputedTextCompat.Params build();
-    method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
-    method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
-    method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
-  }
-
-  public interface TextDirectionHeuristicCompat {
-    method public boolean isRtl(char[]!, int, int);
-    method public boolean isRtl(CharSequence!, int, int);
-  }
-
-  public final class TextDirectionHeuristicsCompat {
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
-    field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
-  }
-
-  public final class TextUtilsCompat {
-    method public static int getLayoutDirectionFromLocale(java.util.Locale?);
-    method public static String htmlEncode(String);
-  }
-
-}
-
-package androidx.core.text.util {
-
-  public final class LinkifyCompat {
-    method public static boolean addLinks(android.text.Spannable, @androidx.core.text.util.LinkifyCompat.LinkifyMask int);
-    method public static boolean addLinks(android.widget.TextView, @androidx.core.text.util.LinkifyCompat.LinkifyMask int);
-    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
-    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
-    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
-    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
-    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
-    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
-  }
-
-  @IntDef(flag=true, value={android.text.util.Linkify.WEB_URLS, android.text.util.Linkify.EMAIL_ADDRESSES, android.text.util.Linkify.PHONE_NUMBERS, android.text.util.Linkify.MAP_ADDRESSES, android.text.util.Linkify.ALL}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface LinkifyCompat.LinkifyMask {
-  }
-
-}
-
-package androidx.core.util {
-
-  public class AtomicFile {
-    ctor public AtomicFile(java.io.File);
-    method public void delete();
-    method public void failWrite(java.io.FileOutputStream?);
-    method public void finishWrite(java.io.FileOutputStream?);
-    method public java.io.File getBaseFile();
-    method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
-    method public byte[] readFully() throws java.io.IOException;
-    method public java.io.FileOutputStream startWrite() throws java.io.IOException;
-  }
-
-  public interface Consumer<T> {
-    method public void accept(T!);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DebugUtils {
-    method public static void buildShortClassTag(Object!, StringBuilder!);
-  }
-
-  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class LogWriter extends java.io.Writer {
-    ctor @Deprecated public LogWriter(String!);
-    method @Deprecated public void close();
-    method @Deprecated public void flush();
-    method @Deprecated public void write(char[]!, int, int);
-  }
-
-  public class ObjectsCompat {
-    method public static boolean equals(Object?, Object?);
-    method public static int hash(java.lang.Object!...);
-    method public static int hashCode(Object?);
-    method public static <T> T requireNonNull(T?);
-    method public static <T> T requireNonNull(T?, String);
-    method public static String? toString(Object?, String?);
-  }
-
-  public class Pair<F, S> {
-    ctor public Pair(F!, S!);
-    method public static <A, B> androidx.core.util.Pair<A!,B!> create(A!, B!);
-    field public final F! first;
-    field public final S! second;
-  }
-
-  public final class PatternsCompat {
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final java.util.regex.Pattern AUTOLINK_EMAIL_ADDRESS;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final java.util.regex.Pattern AUTOLINK_WEB_URL;
-    field public static final java.util.regex.Pattern DOMAIN_NAME;
-    field public static final java.util.regex.Pattern EMAIL_ADDRESS;
-    field public static final java.util.regex.Pattern IP_ADDRESS;
-    field public static final java.util.regex.Pattern WEB_URL;
-  }
-
-  public final class Pools {
-  }
-
-  public static interface Pools.Pool<T> {
-    method public T? acquire();
-    method public boolean release(T);
-  }
-
-  public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
-    ctor public Pools.SimplePool(int);
-    method public T! acquire();
-    method public boolean release(T);
-  }
-
-  public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
-    ctor public Pools.SynchronizedPool(int);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Preconditions {
-    method public static void checkArgument(boolean);
-    method public static void checkArgument(boolean, Object);
-    method public static void checkArgument(boolean, String, java.lang.Object!...);
-    method public static float checkArgumentFinite(float, String);
-    method public static int checkArgumentInRange(int, int, int, String);
-    method public static long checkArgumentInRange(long, long, long, String);
-    method public static float checkArgumentInRange(float, float, float, String);
-    method public static double checkArgumentInRange(double, double, double, String);
-    method @IntRange(from=0) public static int checkArgumentNonnegative(int, String?);
-    method @IntRange(from=0) public static int checkArgumentNonnegative(int);
-    method public static int checkFlagsArgument(int, int);
-    method public static <T> T checkNotNull(T?);
-    method public static <T> T checkNotNull(T?, Object);
-    method public static void checkState(boolean, String?);
-    method public static void checkState(boolean);
-    method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?);
-    method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?, Object);
-    method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?, String, java.lang.Object!...);
-  }
-
-  public interface Predicate<T> {
-    method public boolean test(T!);
-  }
-
-  public final class SizeFCompat {
-    ctor public SizeFCompat(float, float);
-    method public float getHeight();
-    method public float getWidth();
-    method @RequiresApi(21) public android.util.SizeF toSizeF();
-    method @RequiresApi(21) public static androidx.core.util.SizeFCompat toSizeFCompat(android.util.SizeF);
-  }
-
-  public interface Supplier<T> {
-    method public T! get();
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TimeUtils {
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, StringBuilder!);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!, int);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, long, java.io.PrintWriter!);
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int HUNDRED_DAY_FIELD_LEN = 19; // 0x13
-  }
-
-}
-
-package androidx.core.view {
-
-  public class AccessibilityDelegateCompat {
-    ctor public AccessibilityDelegateCompat();
-    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityDelegateCompat(android.view.View.AccessibilityDelegate);
-    method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
-    method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
-    method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
-    method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
-    method public void sendAccessibilityEvent(android.view.View, int);
-    method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
-  }
-
-  public abstract class ActionProvider {
-    ctor public ActionProvider(android.content.Context);
-    method public android.content.Context getContext();
-    method public boolean hasSubMenu();
-    method public boolean isVisible();
-    method public abstract android.view.View onCreateActionView();
-    method public android.view.View onCreateActionView(android.view.MenuItem);
-    method public boolean onPerformDefaultAction();
-    method public void onPrepareSubMenu(android.view.SubMenu);
-    method public boolean overridesItemVisibility();
-    method public void refreshVisibility();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void reset();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSubUiVisibilityListener(androidx.core.view.ActionProvider.SubUiVisibilityListener?);
-    method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener?);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void subUiVisibilityChanged(boolean);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ActionProvider.SubUiVisibilityListener {
-    method public void onSubUiVisibilityChanged(boolean);
-  }
-
-  public static interface ActionProvider.VisibilityListener {
-    method public void onActionProviderVisibilityChanged(boolean);
-  }
-
-  public final class ContentInfoCompat {
-    method public android.content.ClipData getClip();
-    method public android.os.Bundle? getExtras();
-    method @androidx.core.view.ContentInfoCompat.Flags public int getFlags();
-    method public android.net.Uri? getLinkUri();
-    method @androidx.core.view.ContentInfoCompat.Source public int getSource();
-    method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
-    method @RequiresApi(31) public static android.util.Pair<android.view.ContentInfo!,android.view.ContentInfo!> partition(android.view.ContentInfo, java.util.function.Predicate<android.content.ClipData.Item!>);
-    method @RequiresApi(31) public android.view.ContentInfo toContentInfo();
-    method @RequiresApi(31) public static androidx.core.view.ContentInfoCompat toContentInfoCompat(android.view.ContentInfo);
-    field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
-    field public static final int SOURCE_APP = 0; // 0x0
-    field public static final int SOURCE_AUTOFILL = 4; // 0x4
-    field public static final int SOURCE_CLIPBOARD = 1; // 0x1
-    field public static final int SOURCE_DRAG_AND_DROP = 3; // 0x3
-    field public static final int SOURCE_INPUT_METHOD = 2; // 0x2
-    field public static final int SOURCE_PROCESS_TEXT = 5; // 0x5
-  }
-
-  public static final class ContentInfoCompat.Builder {
-    ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
-    ctor public ContentInfoCompat.Builder(android.content.ClipData, @androidx.core.view.ContentInfoCompat.Source int);
-    method public androidx.core.view.ContentInfoCompat build();
-    method public androidx.core.view.ContentInfoCompat.Builder setClip(android.content.ClipData);
-    method public androidx.core.view.ContentInfoCompat.Builder setExtras(android.os.Bundle?);
-    method public androidx.core.view.ContentInfoCompat.Builder setFlags(@androidx.core.view.ContentInfoCompat.Flags int);
-    method public androidx.core.view.ContentInfoCompat.Builder setLinkUri(android.net.Uri?);
-    method public androidx.core.view.ContentInfoCompat.Builder setSource(@androidx.core.view.ContentInfoCompat.Source int);
-  }
-
-  @IntDef(flag=true, value={androidx.core.view.ContentInfoCompat.FLAG_CONVERT_TO_PLAIN_TEXT}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ContentInfoCompat.Flags {
-  }
-
-  @IntDef({androidx.core.view.ContentInfoCompat.SOURCE_APP, androidx.core.view.ContentInfoCompat.SOURCE_CLIPBOARD, androidx.core.view.ContentInfoCompat.SOURCE_INPUT_METHOD, androidx.core.view.ContentInfoCompat.SOURCE_DRAG_AND_DROP, androidx.core.view.ContentInfoCompat.SOURCE_AUTOFILL, androidx.core.view.ContentInfoCompat.SOURCE_PROCESS_TEXT}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ContentInfoCompat.Source {
-  }
-
-  public final class DisplayCompat {
-    method public static androidx.core.view.DisplayCompat.ModeCompat getMode(android.content.Context, android.view.Display);
-    method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
-  }
-
-  public static final class DisplayCompat.ModeCompat {
-    method public int getPhysicalHeight();
-    method public int getPhysicalWidth();
-    method @Deprecated public boolean isNative();
-    method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
-  }
-
-  public final class DisplayCutoutCompat {
-    ctor public DisplayCutoutCompat(android.graphics.Rect?, java.util.List<android.graphics.Rect!>?);
-    ctor public DisplayCutoutCompat(androidx.core.graphics.Insets, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, androidx.core.graphics.Insets);
-    method public java.util.List<android.graphics.Rect!> getBoundingRects();
-    method public int getSafeInsetBottom();
-    method public int getSafeInsetLeft();
-    method public int getSafeInsetRight();
-    method public int getSafeInsetTop();
-    method public androidx.core.graphics.Insets getWaterfallInsets();
-  }
-
-  public final class DragAndDropPermissionsCompat {
-    method public void release();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.view.DragAndDropPermissionsCompat? request(android.app.Activity, android.view.DragEvent);
-  }
-
-  public class DragStartHelper {
-    ctor public DragStartHelper(android.view.View, androidx.core.view.DragStartHelper.OnDragStartListener);
-    method public void attach();
-    method public void detach();
-    method public void getTouchPosition(android.graphics.Point);
-    method public boolean onLongClick(android.view.View);
-    method public boolean onTouch(android.view.View, android.view.MotionEvent);
-  }
-
-  public static interface DragStartHelper.OnDragStartListener {
-    method public boolean onDragStart(android.view.View, androidx.core.view.DragStartHelper);
-  }
-
-  public final class GestureDetectorCompat {
-    ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
-    ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler?);
-    method public boolean isLongpressEnabled();
-    method public boolean onTouchEvent(android.view.MotionEvent);
-    method public void setIsLongpressEnabled(boolean);
-    method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener?);
-  }
-
-  public final class GravityCompat {
-    method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
-    method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
-    method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
-    method public static int getAbsoluteGravity(int, int);
-    field public static final int END = 8388613; // 0x800005
-    field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
-    field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
-    field public static final int START = 8388611; // 0x800003
-  }
-
-  public final class InputDeviceCompat {
-    field public static final int SOURCE_ANY = -256; // 0xffffff00
-    field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
-    field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
-    field public static final int SOURCE_CLASS_MASK = 255; // 0xff
-    field public static final int SOURCE_CLASS_NONE = 0; // 0x0
-    field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
-    field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
-    field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
-    field public static final int SOURCE_DPAD = 513; // 0x201
-    field public static final int SOURCE_GAMEPAD = 1025; // 0x401
-    field public static final int SOURCE_HDMI = 33554433; // 0x2000001
-    field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
-    field public static final int SOURCE_KEYBOARD = 257; // 0x101
-    field public static final int SOURCE_MOUSE = 8194; // 0x2002
-    field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
-    field public static final int SOURCE_STYLUS = 16386; // 0x4002
-    field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
-    field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
-    field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
-    field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
-    field public static final int SOURCE_UNKNOWN = 0; // 0x0
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class KeyEventDispatcher {
-    method public static boolean dispatchBeforeHierarchy(android.view.View, android.view.KeyEvent);
-    method public static boolean dispatchKeyEvent(androidx.core.view.KeyEventDispatcher.Component, android.view.View?, android.view.Window.Callback?, android.view.KeyEvent);
-  }
-
-  public static interface KeyEventDispatcher.Component {
-    method public boolean superDispatchKeyEvent(android.view.KeyEvent);
-  }
-
-  public final class LayoutInflaterCompat {
-    method @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
-    method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
-    method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
-  }
-
-  @Deprecated public interface LayoutInflaterFactory {
-    method @Deprecated public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
-  }
-
-  public final class MarginLayoutParamsCompat {
-    method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
-    method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
-    method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
-    method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
-    method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
-    method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
-    method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
-    method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
-  }
-
-  public final class MenuCompat {
-    method public static void setGroupDividerEnabled(android.view.Menu, boolean);
-    method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
-  }
-
-  public interface MenuHost {
-    method public void addMenuProvider(androidx.core.view.MenuProvider);
-    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
-    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
-    method public void invalidateMenu();
-    method public void removeMenuProvider(androidx.core.view.MenuProvider);
-  }
-
-  public class MenuHostHelper {
-    ctor public MenuHostHelper(Runnable);
-    method public void addMenuProvider(androidx.core.view.MenuProvider);
-    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
-    method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
-    method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
-    method public void onMenuClosed(android.view.Menu);
-    method public boolean onMenuItemSelected(android.view.MenuItem);
-    method public void onPrepareMenu(android.view.Menu);
-    method public void removeMenuProvider(androidx.core.view.MenuProvider);
-  }
-
-  public final class MenuItemCompat {
-    method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
-    method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
-    method public static androidx.core.view.ActionProvider? getActionProvider(android.view.MenuItem);
-    method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
-    method public static int getAlphabeticModifiers(android.view.MenuItem);
-    method public static CharSequence? getContentDescription(android.view.MenuItem);
-    method public static android.content.res.ColorStateList? getIconTintList(android.view.MenuItem);
-    method public static android.graphics.PorterDuff.Mode? getIconTintMode(android.view.MenuItem);
-    method public static int getNumericModifiers(android.view.MenuItem);
-    method public static CharSequence? getTooltipText(android.view.MenuItem);
-    method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
-    method public static android.view.MenuItem? setActionProvider(android.view.MenuItem, androidx.core.view.ActionProvider?);
-    method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
-    method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, int);
-    method public static void setAlphabeticShortcut(android.view.MenuItem, char, int);
-    method public static void setContentDescription(android.view.MenuItem, CharSequence?);
-    method public static void setIconTintList(android.view.MenuItem, android.content.res.ColorStateList?);
-    method public static void setIconTintMode(android.view.MenuItem, android.graphics.PorterDuff.Mode?);
-    method public static void setNumericShortcut(android.view.MenuItem, char, int);
-    method @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
-    method public static void setShortcut(android.view.MenuItem, char, char, int, int);
-    method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
-    method public static void setTooltipText(android.view.MenuItem, CharSequence?);
-    field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
-    field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
-    field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
-    field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
-    field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
-  }
-
-  @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
-    method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
-    method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
-  }
-
-  public interface MenuProvider {
-    method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
-    method public default void onMenuClosed(android.view.Menu);
-    method public boolean onMenuItemSelected(android.view.MenuItem);
-    method public default void onPrepareMenu(android.view.Menu);
-  }
-
-  public final class MotionEventCompat {
-    method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
-    method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
-    method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
-    method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
-    method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
-    method @Deprecated public static int getButtonState(android.view.MotionEvent!);
-    method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
-    method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
-    method @Deprecated public static int getSource(android.view.MotionEvent!);
-    method @Deprecated public static float getX(android.view.MotionEvent!, int);
-    method @Deprecated public static float getY(android.view.MotionEvent!, int);
-    method public static boolean isFromSource(android.view.MotionEvent, int);
-    field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
-    field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
-    field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
-    field @Deprecated public static final int ACTION_MASK = 255; // 0xff
-    field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
-    field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
-    field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
-    field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
-    field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
-    field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
-    field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
-    field @Deprecated public static final int AXIS_GAS = 22; // 0x16
-    field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
-    field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
-    field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
-    field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
-    field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
-    field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
-    field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
-    field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
-    field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
-    field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
-    field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
-    field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
-    field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
-    field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
-    field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
-    field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
-    field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
-    field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
-    field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
-    field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
-    field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
-    field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
-    field public static final int AXIS_RELATIVE_X = 27; // 0x1b
-    field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
-    field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
-    field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
-    field @Deprecated public static final int AXIS_RX = 12; // 0xc
-    field @Deprecated public static final int AXIS_RY = 13; // 0xd
-    field @Deprecated public static final int AXIS_RZ = 14; // 0xe
-    field public static final int AXIS_SCROLL = 26; // 0x1a
-    field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
-    field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
-    field @Deprecated public static final int AXIS_TILT = 25; // 0x19
-    field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
-    field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
-    field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
-    field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
-    field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
-    field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
-    field @Deprecated public static final int AXIS_X = 0; // 0x0
-    field @Deprecated public static final int AXIS_Y = 1; // 0x1
-    field @Deprecated public static final int AXIS_Z = 11; // 0xb
-    field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
-  }
-
-  public interface NestedScrollingChild {
-    method public boolean dispatchNestedFling(float, float, boolean);
-    method public boolean dispatchNestedPreFling(float, float);
-    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
-    method public boolean hasNestedScrollingParent();
-    method public boolean isNestedScrollingEnabled();
-    method public void setNestedScrollingEnabled(boolean);
-    method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int);
-    method public void stopNestedScroll();
-  }
-
-  public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
-    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public boolean hasNestedScrollingParent(@androidx.core.view.ViewCompat.NestedScrollType int);
-    method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public void stopNestedScroll(@androidx.core.view.ViewCompat.NestedScrollType int);
-  }
-
-  public interface NestedScrollingChild3 extends androidx.core.view.NestedScrollingChild2 {
-    method public void dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
-  }
-
-  public class NestedScrollingChildHelper {
-    ctor public NestedScrollingChildHelper(android.view.View);
-    method public boolean dispatchNestedFling(float, float, boolean);
-    method public boolean dispatchNestedPreFling(float, float);
-    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
-    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public void dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]?);
-    method public boolean hasNestedScrollingParent();
-    method public boolean hasNestedScrollingParent(@androidx.core.view.ViewCompat.NestedScrollType int);
-    method public boolean isNestedScrollingEnabled();
-    method public void onDetachedFromWindow();
-    method public void onStopNestedScroll(android.view.View);
-    method public void setNestedScrollingEnabled(boolean);
-    method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int);
-    method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public void stopNestedScroll();
-    method public void stopNestedScroll(@androidx.core.view.ViewCompat.NestedScrollType int);
-  }
-
-  public interface NestedScrollingParent {
-    method @androidx.core.view.ViewCompat.ScrollAxis public int getNestedScrollAxes();
-    method public boolean onNestedFling(android.view.View, float, float, boolean);
-    method public boolean onNestedPreFling(android.view.View, float, float);
-    method public void onNestedPreScroll(android.view.View, int, int, int[]);
-    method public void onNestedScroll(android.view.View, int, int, int, int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
-    method public boolean onStartNestedScroll(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
-    method public void onStopNestedScroll(android.view.View);
-  }
-
-  public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
-    method public void onNestedPreScroll(android.view.View, int, int, int[], @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public void onNestedScroll(android.view.View, int, int, int, int, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public boolean onStartNestedScroll(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public void onStopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
-  }
-
-  public interface NestedScrollingParent3 extends androidx.core.view.NestedScrollingParent2 {
-    method public void onNestedScroll(android.view.View, int, int, int, int, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
-  }
-
-  public class NestedScrollingParentHelper {
-    ctor public NestedScrollingParentHelper(android.view.ViewGroup);
-    method @androidx.core.view.ViewCompat.ScrollAxis public int getNestedScrollAxes();
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public void onStopNestedScroll(android.view.View);
-    method public void onStopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
-  }
-
-  public interface OnApplyWindowInsetsListener {
-    method public androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
-  }
-
-  public interface OnReceiveContentListener {
-    method public androidx.core.view.ContentInfoCompat? onReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
-  }
-
-  public interface OnReceiveContentViewBehavior {
-    method public androidx.core.view.ContentInfoCompat? onReceiveContent(androidx.core.view.ContentInfoCompat);
-  }
-
-  public final class OneShotPreDrawListener implements android.view.View.OnAttachStateChangeListener android.view.ViewTreeObserver.OnPreDrawListener {
-    method public static androidx.core.view.OneShotPreDrawListener add(android.view.View, Runnable);
-    method public boolean onPreDraw();
-    method public void onViewAttachedToWindow(android.view.View);
-    method public void onViewDetachedFromWindow(android.view.View);
-    method public void removeListener();
-  }
-
-  public final class PointerIconCompat {
-    method public static androidx.core.view.PointerIconCompat create(android.graphics.Bitmap, float, float);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public Object? getPointerIcon();
-    method public static androidx.core.view.PointerIconCompat getSystemIcon(android.content.Context, int);
-    method public static androidx.core.view.PointerIconCompat load(android.content.res.Resources, int);
-    field public static final int TYPE_ALIAS = 1010; // 0x3f2
-    field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
-    field public static final int TYPE_ARROW = 1000; // 0x3e8
-    field public static final int TYPE_CELL = 1006; // 0x3ee
-    field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
-    field public static final int TYPE_COPY = 1011; // 0x3f3
-    field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
-    field public static final int TYPE_DEFAULT = 1000; // 0x3e8
-    field public static final int TYPE_GRAB = 1020; // 0x3fc
-    field public static final int TYPE_GRABBING = 1021; // 0x3fd
-    field public static final int TYPE_HAND = 1002; // 0x3ea
-    field public static final int TYPE_HELP = 1003; // 0x3eb
-    field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
-    field public static final int TYPE_NO_DROP = 1012; // 0x3f4
-    field public static final int TYPE_NULL = 0; // 0x0
-    field public static final int TYPE_TEXT = 1008; // 0x3f0
-    field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
-    field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
-    field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
-    field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
-    field public static final int TYPE_WAIT = 1004; // 0x3ec
-    field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
-    field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
-  }
-
-  public final class ScaleGestureDetectorCompat {
-    method @Deprecated public static boolean isQuickScaleEnabled(Object!);
-    method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
-    method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
-    method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
-  }
-
-  public interface ScrollingView {
-    method public int computeHorizontalScrollExtent();
-    method public int computeHorizontalScrollOffset();
-    method public int computeHorizontalScrollRange();
-    method public int computeVerticalScrollExtent();
-    method public int computeVerticalScrollOffset();
-    method public int computeVerticalScrollRange();
-  }
-
-  public interface TintableBackgroundView {
-    method public android.content.res.ColorStateList? getSupportBackgroundTintList();
-    method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
-    method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
-    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
-  }
-
-  @Deprecated public final class VelocityTrackerCompat {
-    method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
-    method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
-  }
-
-  public class ViewCompat {
-    ctor @Deprecated protected ViewCompat();
-    method public static int addAccessibilityAction(android.view.View, CharSequence, androidx.core.view.accessibility.AccessibilityViewCommand);
-    method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View!>, int);
-    method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
-    method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
-    method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
-    method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
-    method public static void cancelDragAndDrop(android.view.View);
-    method @Deprecated public static int combineMeasuredStates(int, int);
-    method public static androidx.core.view.WindowInsetsCompat computeSystemWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat, android.graphics.Rect);
-    method public static androidx.core.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
-    method public static void dispatchFinishTemporaryDetach(android.view.View);
-    method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
-    method public static boolean dispatchNestedPreFling(android.view.View, float, float);
-    method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
-    method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
-    method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
-    method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public static void dispatchStartTemporaryDetach(android.view.View);
-    method public static void enableAccessibleClickableSpanSupport(android.view.View);
-    method public static int generateViewId();
-    method public static androidx.core.view.AccessibilityDelegateCompat? getAccessibilityDelegate(android.view.View);
-    method public static int getAccessibilityLiveRegion(android.view.View);
-    method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
-    method @UiThread public static CharSequence? getAccessibilityPaneTitle(android.view.View);
-    method @Deprecated public static float getAlpha(android.view.View!);
-    method public static android.content.res.ColorStateList? getBackgroundTintList(android.view.View);
-    method public static android.graphics.PorterDuff.Mode? getBackgroundTintMode(android.view.View);
-    method public static android.graphics.Rect? getClipBounds(android.view.View);
-    method public static android.view.Display? getDisplay(android.view.View);
-    method public static float getElevation(android.view.View);
-    method public static boolean getFitsSystemWindows(android.view.View);
-    method public static int getImportantForAccessibility(android.view.View);
-    method public static int getImportantForAutofill(android.view.View);
-    method public static int getLabelFor(android.view.View);
-    method @Deprecated public static int getLayerType(android.view.View!);
-    method public static int getLayoutDirection(android.view.View);
-    method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
-    method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
-    method @Deprecated public static int getMeasuredState(android.view.View!);
-    method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
-    method public static int getMinimumHeight(android.view.View);
-    method public static int getMinimumWidth(android.view.View);
-    method public static int getNextClusterForwardId(android.view.View);
-    method public static String![]? getOnReceiveContentMimeTypes(android.view.View);
-    method @Deprecated public static int getOverScrollMode(android.view.View!);
-    method @Px public static int getPaddingEnd(android.view.View);
-    method @Px public static int getPaddingStart(android.view.View);
-    method public static android.view.ViewParent? getParentForAccessibility(android.view.View);
-    method @Deprecated public static float getPivotX(android.view.View!);
-    method @Deprecated public static float getPivotY(android.view.View!);
-    method public static androidx.core.view.WindowInsetsCompat? getRootWindowInsets(android.view.View);
-    method @Deprecated public static float getRotation(android.view.View!);
-    method @Deprecated public static float getRotationX(android.view.View!);
-    method @Deprecated public static float getRotationY(android.view.View!);
-    method @Deprecated public static float getScaleX(android.view.View!);
-    method @Deprecated public static float getScaleY(android.view.View!);
-    method public static int getScrollIndicators(android.view.View);
-    method @UiThread public static CharSequence? getStateDescription(android.view.View);
-    method public static java.util.List<android.graphics.Rect!> getSystemGestureExclusionRects(android.view.View);
-    method public static String? getTransitionName(android.view.View);
-    method @Deprecated public static float getTranslationX(android.view.View!);
-    method @Deprecated public static float getTranslationY(android.view.View!);
-    method public static float getTranslationZ(android.view.View);
-    method @Deprecated public static androidx.core.view.WindowInsetsControllerCompat? getWindowInsetsController(android.view.View);
-    method @Deprecated public static int getWindowSystemUiVisibility(android.view.View);
-    method @Deprecated public static float getX(android.view.View!);
-    method @Deprecated public static float getY(android.view.View!);
-    method public static float getZ(android.view.View);
-    method public static boolean hasAccessibilityDelegate(android.view.View);
-    method public static boolean hasExplicitFocusable(android.view.View);
-    method public static boolean hasNestedScrollingParent(android.view.View);
-    method public static boolean hasNestedScrollingParent(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public static boolean hasOnClickListeners(android.view.View);
-    method public static boolean hasOverlappingRendering(android.view.View);
-    method public static boolean hasTransientState(android.view.View);
-    method @UiThread public static boolean isAccessibilityHeading(android.view.View);
-    method public static boolean isAttachedToWindow(android.view.View);
-    method public static boolean isFocusedByDefault(android.view.View);
-    method public static boolean isImportantForAccessibility(android.view.View);
-    method public static boolean isImportantForAutofill(android.view.View);
-    method public static boolean isInLayout(android.view.View);
-    method public static boolean isKeyboardNavigationCluster(android.view.View);
-    method public static boolean isLaidOut(android.view.View);
-    method public static boolean isLayoutDirectionResolved(android.view.View);
-    method public static boolean isNestedScrollingEnabled(android.view.View);
-    method @Deprecated public static boolean isOpaque(android.view.View!);
-    method public static boolean isPaddingRelative(android.view.View);
-    method @UiThread public static boolean isScreenReaderFocusable(android.view.View);
-    method @Deprecated public static void jumpDrawablesToCurrentState(android.view.View!);
-    method public static android.view.View? keyboardNavigationClusterSearch(android.view.View, android.view.View?, @androidx.core.view.ViewCompat.FocusDirection int);
-    method public static void offsetLeftAndRight(android.view.View, int);
-    method public static void offsetTopAndBottom(android.view.View, int);
-    method public static androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
-    method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
-    method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
-    method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
-    method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
-    method public static androidx.core.view.ContentInfoCompat? performReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
-    method public static void postInvalidateOnAnimation(android.view.View);
-    method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
-    method public static void postOnAnimation(android.view.View, Runnable);
-    method public static void postOnAnimationDelayed(android.view.View, Runnable, long);
-    method public static void removeAccessibilityAction(android.view.View, int);
-    method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
-    method public static void replaceAccessibilityAction(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat, CharSequence?, androidx.core.view.accessibility.AccessibilityViewCommand?);
-    method public static void requestApplyInsets(android.view.View);
-    method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
-    method @Deprecated public static int resolveSizeAndState(int, int, int);
-    method public static boolean restoreDefaultFocus(android.view.View);
-    method public static void saveAttributeDataForStyleable(android.view.View, android.content.Context, int[], android.util.AttributeSet?, android.content.res.TypedArray, int, int);
-    method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat?);
-    method @UiThread public static void setAccessibilityHeading(android.view.View, boolean);
-    method public static void setAccessibilityLiveRegion(android.view.View, int);
-    method @UiThread public static void setAccessibilityPaneTitle(android.view.View, CharSequence?);
-    method @Deprecated public static void setActivated(android.view.View!, boolean);
-    method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) float);
-    method public static void setAutofillHints(android.view.View, java.lang.String!...);
-    method public static void setBackground(android.view.View, android.graphics.drawable.Drawable?);
-    method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList?);
-    method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode?);
-    method @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
-    method public static void setClipBounds(android.view.View, android.graphics.Rect?);
-    method public static void setElevation(android.view.View, float);
-    method @Deprecated public static void setFitsSystemWindows(android.view.View!, boolean);
-    method public static void setFocusedByDefault(android.view.View, boolean);
-    method public static void setHasTransientState(android.view.View, boolean);
-    method @UiThread public static void setImportantForAccessibility(android.view.View, int);
-    method public static void setImportantForAutofill(android.view.View, int);
-    method public static void setKeyboardNavigationCluster(android.view.View, boolean);
-    method public static void setLabelFor(android.view.View, @IdRes int);
-    method public static void setLayerPaint(android.view.View, android.graphics.Paint?);
-    method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
-    method public static void setLayoutDirection(android.view.View, int);
-    method public static void setNestedScrollingEnabled(android.view.View, boolean);
-    method public static void setNextClusterForwardId(android.view.View, int);
-    method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener?);
-    method public static void setOnReceiveContentListener(android.view.View, String![]?, androidx.core.view.OnReceiveContentListener?);
-    method @Deprecated public static void setOverScrollMode(android.view.View!, int);
-    method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
-    method @Deprecated public static void setPivotX(android.view.View!, float);
-    method @Deprecated public static void setPivotY(android.view.View!, float);
-    method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat?);
-    method @Deprecated public static void setRotation(android.view.View!, float);
-    method @Deprecated public static void setRotationX(android.view.View!, float);
-    method @Deprecated public static void setRotationY(android.view.View!, float);
-    method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
-    method @Deprecated public static void setScaleX(android.view.View!, float);
-    method @Deprecated public static void setScaleY(android.view.View!, float);
-    method @UiThread public static void setScreenReaderFocusable(android.view.View, boolean);
-    method public static void setScrollIndicators(android.view.View, @androidx.core.view.ViewCompat.ScrollIndicators int);
-    method public static void setScrollIndicators(android.view.View, @androidx.core.view.ViewCompat.ScrollIndicators int, @androidx.core.view.ViewCompat.ScrollIndicators int);
-    method @UiThread public static void setStateDescription(android.view.View, CharSequence?);
-    method public static void setSystemGestureExclusionRects(android.view.View, java.util.List<android.graphics.Rect!>);
-    method public static void setTooltipText(android.view.View, CharSequence?);
-    method public static void setTransitionName(android.view.View, String?);
-    method @Deprecated public static void setTranslationX(android.view.View!, float);
-    method @Deprecated public static void setTranslationY(android.view.View!, float);
-    method public static void setTranslationZ(android.view.View, float);
-    method public static void setWindowInsetsAnimationCallback(android.view.View, androidx.core.view.WindowInsetsAnimationCompat.Callback?);
-    method @Deprecated public static void setX(android.view.View!, float);
-    method @Deprecated public static void setY(android.view.View!, float);
-    method public static void setZ(android.view.View, float);
-    method public static boolean startDragAndDrop(android.view.View, android.content.ClipData?, android.view.View.DragShadowBuilder, Object?, int);
-    method public static boolean startNestedScroll(android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
-    method public static boolean startNestedScroll(android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public static void stopNestedScroll(android.view.View);
-    method public static void stopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
-    method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
-    field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
-    field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
-    field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
-    field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
-    field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
-    field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
-    field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
-    field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
-    field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
-    field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
-    field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
-    field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
-    field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
-    field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
-    field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
-    field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
-    field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
-    field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
-    field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
-    field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
-    field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
-    field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
-    field public static final int SCROLL_AXIS_NONE = 0; // 0x0
-    field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
-    field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
-    field public static final int SCROLL_INDICATOR_END = 32; // 0x20
-    field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
-    field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
-    field public static final int SCROLL_INDICATOR_START = 16; // 0x10
-    field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
-    field public static final int TYPE_NON_TOUCH = 1; // 0x1
-    field public static final int TYPE_TOUCH = 0; // 0x0
-  }
-
-  @IntDef({android.view.View.FOCUS_LEFT, android.view.View.FOCUS_UP, android.view.View.FOCUS_RIGHT, android.view.View.FOCUS_DOWN, android.view.View.FOCUS_FORWARD, android.view.View.FOCUS_BACKWARD}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusDirection {
-  }
-
-  @IntDef({android.view.View.FOCUS_LEFT, android.view.View.FOCUS_UP, android.view.View.FOCUS_RIGHT, android.view.View.FOCUS_DOWN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusRealDirection {
-  }
-
-  @IntDef({android.view.View.FOCUS_FORWARD, android.view.View.FOCUS_BACKWARD}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusRelativeDirection {
-  }
-
-  @IntDef({androidx.core.view.ViewCompat.TYPE_TOUCH, androidx.core.view.ViewCompat.TYPE_NON_TOUCH}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.NestedScrollType {
-  }
-
-  public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
-    method public boolean onUnhandledKeyEvent(android.view.View, android.view.KeyEvent);
-  }
-
-  @IntDef(value={androidx.core.view.ViewCompat.SCROLL_AXIS_NONE, androidx.core.view.ViewCompat.SCROLL_AXIS_HORIZONTAL, androidx.core.view.ViewCompat.SCROLL_AXIS_VERTICAL}, flag=true) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.ScrollAxis {
-  }
-
-  @IntDef(flag=true, value={androidx.core.view.ViewCompat.SCROLL_INDICATOR_TOP, androidx.core.view.ViewCompat.SCROLL_INDICATOR_BOTTOM, androidx.core.view.ViewCompat.SCROLL_INDICATOR_LEFT, androidx.core.view.ViewCompat.SCROLL_INDICATOR_RIGHT, androidx.core.view.ViewCompat.SCROLL_INDICATOR_START, androidx.core.view.ViewCompat.SCROLL_INDICATOR_END}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.ScrollIndicators {
-  }
-
-  public final class ViewConfigurationCompat {
-    method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
-    method public static int getScaledHoverSlop(android.view.ViewConfiguration);
-    method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
-    method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
-    method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
-    method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration, android.content.Context);
-  }
-
-  public final class ViewGroupCompat {
-    method public static int getLayoutMode(android.view.ViewGroup);
-    method @androidx.core.view.ViewCompat.ScrollAxis public static int getNestedScrollAxes(android.view.ViewGroup);
-    method public static boolean isTransitionGroup(android.view.ViewGroup);
-    method @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
-    method public static void setLayoutMode(android.view.ViewGroup, int);
-    method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
-    method public static void setTransitionGroup(android.view.ViewGroup, boolean);
-    field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
-    field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
-  }
-
-  public final class ViewParentCompat {
-    method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
-    method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
-    method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
-    method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
-    method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[], int);
-    method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
-    method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int);
-    method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int, int[]);
-    method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
-    method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int, int);
-    method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
-    method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int, int);
-    method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
-    method public static void onStopNestedScroll(android.view.ViewParent, android.view.View, int);
-    method @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
-  }
-
-  public final class ViewPropertyAnimatorCompat {
-    method public androidx.core.view.ViewPropertyAnimatorCompat alpha(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat alphaBy(float);
-    method public void cancel();
-    method public long getDuration();
-    method public android.view.animation.Interpolator? getInterpolator();
-    method public long getStartDelay();
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotation(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationX(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationXBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationY(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat rotationYBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleX(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleXBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleY(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat scaleYBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setDuration(long);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator?);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setListener(androidx.core.view.ViewPropertyAnimatorListener?);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setStartDelay(long);
-    method public androidx.core.view.ViewPropertyAnimatorCompat setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener?);
-    method public void start();
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationX(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationXBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationY(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationYBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationZ(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat translationZBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat withEndAction(Runnable);
-    method public androidx.core.view.ViewPropertyAnimatorCompat withLayer();
-    method public androidx.core.view.ViewPropertyAnimatorCompat withStartAction(Runnable);
-    method public androidx.core.view.ViewPropertyAnimatorCompat x(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat xBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat y(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat yBy(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat z(float);
-    method public androidx.core.view.ViewPropertyAnimatorCompat zBy(float);
-  }
-
-  public interface ViewPropertyAnimatorListener {
-    method public void onAnimationCancel(android.view.View);
-    method public void onAnimationEnd(android.view.View);
-    method public void onAnimationStart(android.view.View);
-  }
-
-  public class ViewPropertyAnimatorListenerAdapter implements androidx.core.view.ViewPropertyAnimatorListener {
-    ctor public ViewPropertyAnimatorListenerAdapter();
-    method public void onAnimationCancel(android.view.View);
-    method public void onAnimationEnd(android.view.View);
-    method public void onAnimationStart(android.view.View);
-  }
-
-  public interface ViewPropertyAnimatorUpdateListener {
-    method public void onAnimationUpdate(android.view.View);
-  }
-
-  public final class WindowCompat {
-    method public static androidx.core.view.WindowInsetsControllerCompat getInsetsController(android.view.Window, android.view.View);
-    method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes int);
-    method public static void setDecorFitsSystemWindows(android.view.Window, boolean);
-    field public static final int FEATURE_ACTION_BAR = 8; // 0x8
-    field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
-    field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
-  }
-
-  public final class WindowInsetsAnimationCompat {
-    ctor public WindowInsetsAnimationCompat(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, android.view.animation.Interpolator?, long);
-    method @FloatRange(from=0.0f, to=1.0f) public float getAlpha();
-    method public long getDurationMillis();
-    method @FloatRange(from=0.0f, to=1.0f) public float getFraction();
-    method public float getInterpolatedFraction();
-    method public android.view.animation.Interpolator? getInterpolator();
-    method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public int getTypeMask();
-    method public void setAlpha(@FloatRange(from=0.0f, to=1.0f) float);
-    method public void setFraction(@FloatRange(from=0.0f, to=1.0f) float);
-  }
-
-  public static final class WindowInsetsAnimationCompat.BoundsCompat {
-    ctor public WindowInsetsAnimationCompat.BoundsCompat(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
-    method public androidx.core.graphics.Insets getLowerBound();
-    method public androidx.core.graphics.Insets getUpperBound();
-    method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat inset(androidx.core.graphics.Insets);
-    method @RequiresApi(30) public android.view.WindowInsetsAnimation.Bounds toBounds();
-    method @RequiresApi(30) public static androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat toBoundsCompat(android.view.WindowInsetsAnimation.Bounds);
-  }
-
-  public abstract static class WindowInsetsAnimationCompat.Callback {
-    ctor public WindowInsetsAnimationCompat.Callback(@androidx.core.view.WindowInsetsAnimationCompat.Callback.DispatchMode int);
-    method @androidx.core.view.WindowInsetsAnimationCompat.Callback.DispatchMode public final int getDispatchMode();
-    method public void onEnd(androidx.core.view.WindowInsetsAnimationCompat);
-    method public void onPrepare(androidx.core.view.WindowInsetsAnimationCompat);
-    method public abstract androidx.core.view.WindowInsetsCompat onProgress(androidx.core.view.WindowInsetsCompat, java.util.List<androidx.core.view.WindowInsetsAnimationCompat!>);
-    method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat onStart(androidx.core.view.WindowInsetsAnimationCompat, androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat);
-    field public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1; // 0x1
-    field public static final int DISPATCH_MODE_STOP = 0; // 0x0
-  }
-
-  @IntDef({androidx.core.view.WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_STOP, androidx.core.view.WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_CONTINUE_ON_SUBTREE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface WindowInsetsAnimationCompat.Callback.DispatchMode {
-  }
-
-  public interface WindowInsetsAnimationControlListenerCompat {
-    method public void onCancelled(androidx.core.view.WindowInsetsAnimationControllerCompat?);
-    method public void onFinished(androidx.core.view.WindowInsetsAnimationControllerCompat);
-    method public void onReady(androidx.core.view.WindowInsetsAnimationControllerCompat, @androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
-  }
-
-  public final class WindowInsetsAnimationControllerCompat {
-    method public void finish(boolean);
-    method public float getCurrentAlpha();
-    method @FloatRange(from=0.0f, to=1.0f) public float getCurrentFraction();
-    method public androidx.core.graphics.Insets getCurrentInsets();
-    method public androidx.core.graphics.Insets getHiddenStateInsets();
-    method public androidx.core.graphics.Insets getShownStateInsets();
-    method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public int getTypes();
-    method public boolean isCancelled();
-    method public boolean isFinished();
-    method public boolean isReady();
-    method public void setInsetsAndAlpha(androidx.core.graphics.Insets?, @FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float);
-  }
-
-  public class WindowInsetsCompat {
-    ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat?);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat consumeDisplayCutout();
-    method @Deprecated public androidx.core.view.WindowInsetsCompat consumeStableInsets();
-    method @Deprecated public androidx.core.view.WindowInsetsCompat consumeSystemWindowInsets();
-    method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
-    method public androidx.core.graphics.Insets getInsets(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
-    method public androidx.core.graphics.Insets getInsetsIgnoringVisibility(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
-    method @Deprecated public androidx.core.graphics.Insets getMandatorySystemGestureInsets();
-    method @Deprecated public int getStableInsetBottom();
-    method @Deprecated public int getStableInsetLeft();
-    method @Deprecated public int getStableInsetRight();
-    method @Deprecated public int getStableInsetTop();
-    method @Deprecated public androidx.core.graphics.Insets getStableInsets();
-    method @Deprecated public androidx.core.graphics.Insets getSystemGestureInsets();
-    method @Deprecated public int getSystemWindowInsetBottom();
-    method @Deprecated public int getSystemWindowInsetLeft();
-    method @Deprecated public int getSystemWindowInsetRight();
-    method @Deprecated public int getSystemWindowInsetTop();
-    method @Deprecated public androidx.core.graphics.Insets getSystemWindowInsets();
-    method @Deprecated public androidx.core.graphics.Insets getTappableElementInsets();
-    method public boolean hasInsets();
-    method @Deprecated public boolean hasStableInsets();
-    method @Deprecated public boolean hasSystemWindowInsets();
-    method public androidx.core.view.WindowInsetsCompat inset(androidx.core.graphics.Insets);
-    method public androidx.core.view.WindowInsetsCompat inset(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
-    method public boolean isConsumed();
-    method public boolean isRound();
-    method public boolean isVisible(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
-    method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
-    method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
-    method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets, android.view.View?);
-    field public static final androidx.core.view.WindowInsetsCompat CONSUMED;
-  }
-
-  public static final class WindowInsetsCompat.Builder {
-    ctor public WindowInsetsCompat.Builder();
-    ctor public WindowInsetsCompat.Builder(androidx.core.view.WindowInsetsCompat);
-    method public androidx.core.view.WindowInsetsCompat build();
-    method public androidx.core.view.WindowInsetsCompat.Builder setDisplayCutout(androidx.core.view.DisplayCutoutCompat?);
-    method public androidx.core.view.WindowInsetsCompat.Builder setInsets(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, androidx.core.graphics.Insets);
-    method public androidx.core.view.WindowInsetsCompat.Builder setInsetsIgnoringVisibility(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, androidx.core.graphics.Insets);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setMandatorySystemGestureInsets(androidx.core.graphics.Insets);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setStableInsets(androidx.core.graphics.Insets);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemGestureInsets(androidx.core.graphics.Insets);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemWindowInsets(androidx.core.graphics.Insets);
-    method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setTappableElementInsets(androidx.core.graphics.Insets);
-    method public androidx.core.view.WindowInsetsCompat.Builder setVisible(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, boolean);
-  }
-
-  public static final class WindowInsetsCompat.Type {
-    method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int captionBar();
-    method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int displayCutout();
-    method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int ime();
-    method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int mandatorySystemGestures();
-    method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int navigationBars();
-    method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int statusBars();
-    method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int systemBars();
-    method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int systemGestures();
-    method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int tappableElement();
-  }
-
-  @IntDef(flag=true, value={0x1, 0x2, 0x4, 0x8, 0x100, 0x10, 0x20, 0x40, 0x80}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface WindowInsetsCompat.Type.InsetsType {
-  }
-
-  public final class WindowInsetsControllerCompat {
-    ctor public WindowInsetsControllerCompat(android.view.Window, android.view.View);
-    method public void addOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
-    method public void controlWindowInsetsAnimation(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, long, android.view.animation.Interpolator?, android.os.CancellationSignal?, androidx.core.view.WindowInsetsAnimationControlListenerCompat);
-    method public int getSystemBarsBehavior();
-    method public void hide(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
-    method public boolean isAppearanceLightNavigationBars();
-    method public boolean isAppearanceLightStatusBars();
-    method public void removeOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
-    method public void setAppearanceLightNavigationBars(boolean);
-    method public void setAppearanceLightStatusBars(boolean);
-    method public void setSystemBarsBehavior(int);
-    method public void show(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
-    method @Deprecated @RequiresApi(30) public static androidx.core.view.WindowInsetsControllerCompat toWindowInsetsControllerCompat(android.view.WindowInsetsController);
-    field public static final int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1; // 0x1
-    field public static final int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0; // 0x0
-    field public static final int BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE = 2; // 0x2
-  }
-
-  public static interface WindowInsetsControllerCompat.OnControllableInsetsChangedListener {
-    method public void onControllableInsetsChanged(androidx.core.view.WindowInsetsControllerCompat, @androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
-  }
-
-}
-
-package androidx.core.view.accessibility {
-
-  public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
-    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityClickableSpanCompat(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat, int);
-    method public void onClick(android.view.View);
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String SPAN_ID = "ACCESSIBILITY_CLICKABLE_SPAN_ID";
-  }
-
-  public final class AccessibilityEventCompat {
-    method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
-    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! asRecord(android.view.accessibility.AccessibilityEvent!);
-    method public static int getAction(android.view.accessibility.AccessibilityEvent);
-    method @androidx.core.view.accessibility.AccessibilityEventCompat.ContentChangeType public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
-    method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
-    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
-    method @Deprecated public static int getRecordCount(android.view.accessibility.AccessibilityEvent!);
-    method public static void setAction(android.view.accessibility.AccessibilityEvent, int);
-    method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, @androidx.core.view.accessibility.AccessibilityEventCompat.ContentChangeType int);
-    method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
-    field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
-    field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
-    field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
-    field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
-    field public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 64; // 0x40
-    field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
-    field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
-    field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
-    field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
-    field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
-    field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
-    field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
-    field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
-    field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
-    field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
-    field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
-    field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
-    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
-    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
-    field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
-    field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
-    field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
-    field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
-    field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
-    field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
-    field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
-    field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
-  }
-
-  @IntDef(flag=true, value={androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_SUBTREE, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_TEXT, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_UNDEFINED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface AccessibilityEventCompat.ContentChangeType {
-  }
-
-  public final class AccessibilityManagerCompat {
-    method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
-    method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
-    method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
-    method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
-    method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
-    method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
-    method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
-  }
-
-  @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
-    method @Deprecated public void onAccessibilityStateChanged(boolean);
-  }
-
-  @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
-    ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
-  }
-
-  public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
-    method public void onTouchExplorationStateChanged(boolean);
-  }
-
-  public class AccessibilityNodeInfoCompat {
-    ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
-    method public void addAction(int);
-    method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
-    method public void addChild(android.view.View!);
-    method public void addChild(android.view.View!, int);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addSpansToExtras(CharSequence!, android.view.View!);
-    method public boolean canOpenPopup();
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByText(String!);
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByViewId(String!);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
-    method public int getActions();
-    method public java.util.List<java.lang.String!> getAvailableExtraData();
-    method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
-    method public void getBoundsInScreen(android.graphics.Rect!);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
-    method public int getChildCount();
-    method public CharSequence! getClassName();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.text.style.ClickableSpan![]! getClickableSpans(CharSequence!);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
-    method public CharSequence! getContentDescription();
-    method public int getDrawingOrder();
-    method public CharSequence! getError();
-    method public android.os.Bundle! getExtras();
-    method public CharSequence? getHintText();
-    method @Deprecated public Object! getInfo();
-    method public int getInputType();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
-    method public int getLiveRegion();
-    method public int getMaxTextLength();
-    method public int getMovementGranularities();
-    method public CharSequence! getPackageName();
-    method public CharSequence? getPaneTitle();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
-    method public CharSequence? getRoleDescription();
-    method public CharSequence? getStateDescription();
-    method public CharSequence! getText();
-    method public int getTextSelectionEnd();
-    method public int getTextSelectionStart();
-    method public CharSequence? getTooltipText();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
-    method public String! getViewIdResourceName();
-    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
-    method public int getWindowId();
-    method public boolean isAccessibilityFocused();
-    method public boolean isCheckable();
-    method public boolean isChecked();
-    method public boolean isClickable();
-    method public boolean isContentInvalid();
-    method public boolean isContextClickable();
-    method public boolean isDismissable();
-    method public boolean isEditable();
-    method public boolean isEnabled();
-    method public boolean isFocusable();
-    method public boolean isFocused();
-    method public boolean isHeading();
-    method public boolean isImportantForAccessibility();
-    method public boolean isLongClickable();
-    method public boolean isMultiLine();
-    method public boolean isPassword();
-    method public boolean isScreenReaderFocusable();
-    method public boolean isScrollable();
-    method public boolean isSelected();
-    method public boolean isShowingHintText();
-    method public boolean isTextEntryKey();
-    method public boolean isVisibleToUser();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
-    method public boolean performAction(int);
-    method public boolean performAction(int, android.os.Bundle!);
-    method public void recycle();
-    method public boolean refresh();
-    method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
-    method public boolean removeChild(android.view.View!);
-    method public boolean removeChild(android.view.View!, int);
-    method public void setAccessibilityFocused(boolean);
-    method public void setAvailableExtraData(java.util.List<java.lang.String!>);
-    method @Deprecated public void setBoundsInParent(android.graphics.Rect!);
-    method public void setBoundsInScreen(android.graphics.Rect!);
-    method public void setCanOpenPopup(boolean);
-    method public void setCheckable(boolean);
-    method public void setChecked(boolean);
-    method public void setClassName(CharSequence!);
-    method public void setClickable(boolean);
-    method public void setCollectionInfo(Object!);
-    method public void setCollectionItemInfo(Object!);
-    method public void setContentDescription(CharSequence!);
-    method public void setContentInvalid(boolean);
-    method public void setContextClickable(boolean);
-    method public void setDismissable(boolean);
-    method public void setDrawingOrder(int);
-    method public void setEditable(boolean);
-    method public void setEnabled(boolean);
-    method public void setError(CharSequence!);
-    method public void setFocusable(boolean);
-    method public void setFocused(boolean);
-    method public void setHeading(boolean);
-    method public void setHintText(CharSequence?);
-    method public void setImportantForAccessibility(boolean);
-    method public void setInputType(int);
-    method public void setLabelFor(android.view.View!);
-    method public void setLabelFor(android.view.View!, int);
-    method public void setLabeledBy(android.view.View!);
-    method public void setLabeledBy(android.view.View!, int);
-    method public void setLiveRegion(int);
-    method public void setLongClickable(boolean);
-    method public void setMaxTextLength(int);
-    method public void setMovementGranularities(int);
-    method public void setMultiLine(boolean);
-    method public void setPackageName(CharSequence!);
-    method public void setPaneTitle(CharSequence?);
-    method public void setParent(android.view.View!);
-    method public void setParent(android.view.View!, int);
-    method public void setPassword(boolean);
-    method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
-    method public void setRoleDescription(CharSequence?);
-    method public void setScreenReaderFocusable(boolean);
-    method public void setScrollable(boolean);
-    method public void setSelected(boolean);
-    method public void setShowingHintText(boolean);
-    method public void setSource(android.view.View!);
-    method public void setSource(android.view.View!, int);
-    method public void setStateDescription(CharSequence?);
-    method public void setText(CharSequence!);
-    method public void setTextEntryKey(boolean);
-    method public void setTextSelection(int, int);
-    method public void setTooltipText(CharSequence?);
-    method public void setTouchDelegateInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat);
-    method public void setTraversalAfter(android.view.View!);
-    method public void setTraversalAfter(android.view.View!, int);
-    method public void setTraversalBefore(android.view.View!);
-    method public void setTraversalBefore(android.view.View!, int);
-    method public void setViewIdResourceName(String!);
-    method public void setVisibleToUser(boolean);
-    method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
-    field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
-    field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
-    field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
-    field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
-    field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
-    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
-    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
-    field public static final String ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT = "android.view.accessibility.action.ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT";
-    field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
-    field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
-    field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
-    field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
-    field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
-    field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
-    field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
-    field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
-    field public static final int ACTION_CLICK = 16; // 0x10
-    field public static final int ACTION_COLLAPSE = 524288; // 0x80000
-    field public static final int ACTION_COPY = 16384; // 0x4000
-    field public static final int ACTION_CUT = 65536; // 0x10000
-    field public static final int ACTION_DISMISS = 1048576; // 0x100000
-    field public static final int ACTION_EXPAND = 262144; // 0x40000
-    field public static final int ACTION_FOCUS = 1; // 0x1
-    field public static final int ACTION_LONG_CLICK = 32; // 0x20
-    field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
-    field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
-    field public static final int ACTION_PASTE = 32768; // 0x8000
-    field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
-    field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
-    field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
-    field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
-    field public static final int ACTION_SELECT = 4; // 0x4
-    field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
-    field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
-    field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
-    field public static final int FOCUS_INPUT = 1; // 0x1
-    field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
-    field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
-    field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
-    field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
-    field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int mParentVirtualDescendantId;
-  }
-
-  public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
-    ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!);
-    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!, androidx.core.view.accessibility.AccessibilityViewCommand!);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! createReplacementAction(CharSequence!, androidx.core.view.accessibility.AccessibilityViewCommand!);
-    method public int getId();
-    method public CharSequence! getLabel();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean perform(android.view.View!, android.os.Bundle!);
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_IME_ENTER;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_DOWN;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_LEFT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_RIGHT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_UP;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PRESS_AND_HOLD;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
-    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected final androidx.core.view.accessibility.AccessibilityViewCommand! mCommand;
-  }
-
-  public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
-    method public int getColumnCount();
-    method public int getRowCount();
-    method public int getSelectionMode();
-    method public boolean isHierarchical();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
-    field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
-    field public static final int SELECTION_MODE_NONE = 0; // 0x0
-    field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
-  }
-
-  public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
-    method public int getColumnIndex();
-    method public int getColumnSpan();
-    method public int getRowIndex();
-    method public int getRowSpan();
-    method @Deprecated public boolean isHeading();
-    method public boolean isSelected();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
-  }
-
-  public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
-    method public float getCurrent();
-    method public float getMax();
-    method public float getMin();
-    method public int getType();
-    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! obtain(int, float, float, float);
-    field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
-    field public static final int RANGE_TYPE_INT = 0; // 0x0
-    field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
-  }
-
-  public static final class AccessibilityNodeInfoCompat.TouchDelegateInfoCompat {
-    ctor public AccessibilityNodeInfoCompat.TouchDelegateInfoCompat(java.util.Map<android.graphics.Region!,android.view.View!>);
-    method public android.graphics.Region? getRegionAt(@IntRange(from=0) int);
-    method @IntRange(from=0) public int getRegionCount();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getTargetForRegion(android.graphics.Region);
-  }
-
-  public class AccessibilityNodeProviderCompat {
-    ctor public AccessibilityNodeProviderCompat();
-    ctor public AccessibilityNodeProviderCompat(Object?);
-    method public void addExtraDataToAccessibilityNodeInfo(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat, String, android.os.Bundle?);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
-    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>? findAccessibilityNodeInfosByText(String, int);
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
-    method public Object? getProvider();
-    method public boolean performAction(int, int, android.os.Bundle?);
-    field public static final int HOST_VIEW_ID = -1; // 0xffffffff
-  }
-
-  public class AccessibilityRecordCompat {
-    ctor @Deprecated public AccessibilityRecordCompat(Object!);
-    method @Deprecated public boolean equals(Object?);
-    method @Deprecated public int getAddedCount();
-    method @Deprecated public CharSequence! getBeforeText();
-    method @Deprecated public CharSequence! getClassName();
-    method @Deprecated public CharSequence! getContentDescription();
-    method @Deprecated public int getCurrentItemIndex();
-    method @Deprecated public int getFromIndex();
-    method @Deprecated public Object! getImpl();
-    method @Deprecated public int getItemCount();
-    method @Deprecated public int getMaxScrollX();
-    method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord);
-    method @Deprecated public int getMaxScrollY();
-    method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord);
-    method @Deprecated public android.os.Parcelable! getParcelableData();
-    method @Deprecated public int getRemovedCount();
-    method @Deprecated public int getScrollX();
-    method @Deprecated public int getScrollY();
-    method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
-    method @Deprecated public java.util.List<java.lang.CharSequence!>! getText();
-    method @Deprecated public int getToIndex();
-    method @Deprecated public int getWindowId();
-    method @Deprecated public int hashCode();
-    method @Deprecated public boolean isChecked();
-    method @Deprecated public boolean isEnabled();
-    method @Deprecated public boolean isFullScreen();
-    method @Deprecated public boolean isPassword();
-    method @Deprecated public boolean isScrollable();
-    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
-    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
-    method @Deprecated public void recycle();
-    method @Deprecated public void setAddedCount(int);
-    method @Deprecated public void setBeforeText(CharSequence!);
-    method @Deprecated public void setChecked(boolean);
-    method @Deprecated public void setClassName(CharSequence!);
-    method @Deprecated public void setContentDescription(CharSequence!);
-    method @Deprecated public void setCurrentItemIndex(int);
-    method @Deprecated public void setEnabled(boolean);
-    method @Deprecated public void setFromIndex(int);
-    method @Deprecated public void setFullScreen(boolean);
-    method @Deprecated public void setItemCount(int);
-    method @Deprecated public void setMaxScrollX(int);
-    method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
-    method @Deprecated public void setMaxScrollY(int);
-    method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
-    method @Deprecated public void setParcelableData(android.os.Parcelable!);
-    method @Deprecated public void setPassword(boolean);
-    method @Deprecated public void setRemovedCount(int);
-    method @Deprecated public void setScrollX(int);
-    method @Deprecated public void setScrollY(int);
-    method @Deprecated public void setScrollable(boolean);
-    method @Deprecated public void setSource(android.view.View!);
-    method @Deprecated public void setSource(android.view.View!, int);
-    method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
-    method @Deprecated public void setToIndex(int);
-  }
-
-  public interface AccessibilityViewCommand {
-    method public boolean perform(android.view.View, androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments?);
-  }
-
-  public abstract static class AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.CommandArguments();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setBundle(android.os.Bundle?);
-  }
-
-  public static final class AccessibilityViewCommand.MoveAtGranularityArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.MoveAtGranularityArguments();
-    method public boolean getExtendSelection();
-    method public int getGranularity();
-  }
-
-  public static final class AccessibilityViewCommand.MoveHtmlArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.MoveHtmlArguments();
-    method public String? getHTMLElement();
-  }
-
-  public static final class AccessibilityViewCommand.MoveWindowArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.MoveWindowArguments();
-    method public int getX();
-    method public int getY();
-  }
-
-  public static final class AccessibilityViewCommand.ScrollToPositionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.ScrollToPositionArguments();
-    method public int getColumn();
-    method public int getRow();
-  }
-
-  public static final class AccessibilityViewCommand.SetProgressArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.SetProgressArguments();
-    method public float getProgress();
-  }
-
-  public static final class AccessibilityViewCommand.SetSelectionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.SetSelectionArguments();
-    method public int getEnd();
-    method public int getStart();
-  }
-
-  public static final class AccessibilityViewCommand.SetTextArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
-    ctor public AccessibilityViewCommand.SetTextArguments();
-    method public CharSequence? getText();
-  }
-
-  public class AccessibilityWindowInfoCompat {
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getAnchor();
-    method public void getBoundsInScreen(android.graphics.Rect);
-    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
-    method public int getChildCount();
-    method public int getId();
-    method public int getLayer();
-    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
-    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
-    method public CharSequence? getTitle();
-    method public int getType();
-    method public boolean isAccessibilityFocused();
-    method public boolean isActive();
-    method public boolean isFocused();
-    method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
-    method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
-    method public void recycle();
-    field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
-    field public static final int TYPE_APPLICATION = 1; // 0x1
-    field public static final int TYPE_INPUT_METHOD = 2; // 0x2
-    field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
-    field public static final int TYPE_SYSTEM = 3; // 0x3
-  }
-
-}
-
-package androidx.core.view.animation {
-
-  public final class PathInterpolatorCompat {
-    method public static android.view.animation.Interpolator create(android.graphics.Path);
-    method public static android.view.animation.Interpolator create(float, float);
-    method public static android.view.animation.Interpolator create(float, float, float, float);
-  }
-
-}
-
-package androidx.core.view.inputmethod {
-
-  public final class EditorInfoCompat {
-    ctor @Deprecated public EditorInfoCompat();
-    method public static String![] getContentMimeTypes(android.view.inputmethod.EditorInfo);
-    method public static CharSequence? getInitialSelectedText(android.view.inputmethod.EditorInfo, int);
-    method public static CharSequence? getInitialTextAfterCursor(android.view.inputmethod.EditorInfo, int, int);
-    method public static CharSequence? getInitialTextBeforeCursor(android.view.inputmethod.EditorInfo, int, int);
-    method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, String![]?);
-    method public static void setInitialSurroundingSubText(android.view.inputmethod.EditorInfo, CharSequence, int);
-    method public static void setInitialSurroundingText(android.view.inputmethod.EditorInfo, CharSequence);
-    field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
-    field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
-  }
-
-  public final class InputConnectionCompat {
-    ctor @Deprecated public InputConnectionCompat();
-    method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
-    method @Deprecated public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
-    method public static android.view.inputmethod.InputConnection createWrapper(android.view.View, android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
-    field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
-  }
-
-  public static interface InputConnectionCompat.OnCommitContentListener {
-    method public boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
-  }
-
-  public final class InputContentInfoCompat {
-    ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri?);
-    method public android.net.Uri getContentUri();
-    method public android.content.ClipDescription getDescription();
-    method public android.net.Uri? getLinkUri();
-    method public void releasePermission();
-    method public void requestPermission();
-    method public Object? unwrap();
-    method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
-  }
-
-}
-
-package androidx.core.widget {
-
-  public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
-    ctor public AutoScrollHelper(android.view.View);
-    method public abstract boolean canTargetScrollHorizontally(int);
-    method public abstract boolean canTargetScrollVertically(int);
-    method public boolean isEnabled();
-    method public boolean isExclusive();
-    method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
-    method public abstract void scrollTargetBy(int, int);
-    method public androidx.core.widget.AutoScrollHelper setActivationDelay(int);
-    method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
-    method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
-    method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
-    method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
-    method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
-    method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
-    method public androidx.core.widget.AutoScrollHelper setRampDownDuration(int);
-    method public androidx.core.widget.AutoScrollHelper setRampUpDuration(int);
-    method public androidx.core.widget.AutoScrollHelper setRelativeEdges(float, float);
-    method public androidx.core.widget.AutoScrollHelper setRelativeVelocity(float, float);
-    field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
-    field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
-    field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
-    field public static final float NO_MAX = 3.4028235E38f;
-    field public static final float NO_MIN = 0.0f;
-    field public static final float RELATIVE_UNSPECIFIED = 0.0f;
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface AutoSizeableTextView {
-    method public int getAutoSizeMaxTextSize();
-    method public int getAutoSizeMinTextSize();
-    method public int getAutoSizeStepGranularity();
-    method public int[]! getAutoSizeTextAvailableSizes();
-    method @androidx.core.widget.TextViewCompat.AutoSizeTextType public int getAutoSizeTextType();
-    method public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
-    method public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
-    method public void setAutoSizeTextTypeWithDefaults(@androidx.core.widget.TextViewCompat.AutoSizeTextType int);
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final boolean PLATFORM_SUPPORTS_AUTOSIZE;
-  }
-
-  public final class CheckedTextViewCompat {
-    method public static android.graphics.drawable.Drawable? getCheckMarkDrawable(android.widget.CheckedTextView);
-    method public static android.content.res.ColorStateList? getCheckMarkTintList(android.widget.CheckedTextView);
-    method public static android.graphics.PorterDuff.Mode? getCheckMarkTintMode(android.widget.CheckedTextView);
-    method public static void setCheckMarkTintList(android.widget.CheckedTextView, android.content.res.ColorStateList?);
-    method public static void setCheckMarkTintMode(android.widget.CheckedTextView, android.graphics.PorterDuff.Mode?);
-  }
-
-  public final class CompoundButtonCompat {
-    method public static android.graphics.drawable.Drawable? getButtonDrawable(android.widget.CompoundButton);
-    method public static android.content.res.ColorStateList? getButtonTintList(android.widget.CompoundButton);
-    method public static android.graphics.PorterDuff.Mode? getButtonTintMode(android.widget.CompoundButton);
-    method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList?);
-    method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode?);
-  }
-
-  public class ContentLoadingProgressBar extends android.widget.ProgressBar {
-    ctor public ContentLoadingProgressBar(android.content.Context);
-    ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
-    method public void hide();
-    method public void onAttachedToWindow();
-    method public void onDetachedFromWindow();
-    method public void show();
-  }
-
-  public final class EdgeEffectCompat {
-    ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
-    method public static android.widget.EdgeEffect create(android.content.Context, android.util.AttributeSet?);
-    method @Deprecated public boolean draw(android.graphics.Canvas!);
-    method @Deprecated public void finish();
-    method public static float getDistance(android.widget.EdgeEffect);
-    method @Deprecated public boolean isFinished();
-    method @Deprecated public boolean onAbsorb(int);
-    method @Deprecated public boolean onPull(float);
-    method @Deprecated public boolean onPull(float, float);
-    method public static void onPull(android.widget.EdgeEffect, float, float);
-    method public static float onPullDistance(android.widget.EdgeEffect, float, float);
-    method @Deprecated public boolean onRelease();
-    method @Deprecated public void setSize(int, int);
-  }
-
-  public class ImageViewCompat {
-    method public static android.content.res.ColorStateList? getImageTintList(android.widget.ImageView);
-    method public static android.graphics.PorterDuff.Mode? getImageTintMode(android.widget.ImageView);
-    method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList?);
-    method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode?);
-  }
-
-  public final class ListPopupWindowCompat {
-    method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
-    method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
-  }
-
-  public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
-    ctor public ListViewAutoScrollHelper(android.widget.ListView);
-    method public boolean canTargetScrollHorizontally(int);
-    method public boolean canTargetScrollVertically(int);
-    method public void scrollTargetBy(int, int);
-  }
-
-  public final class ListViewCompat {
-    method public static boolean canScrollList(android.widget.ListView, int);
-    method public static void scrollListBy(android.widget.ListView, int);
-  }
-
-  public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
-    ctor public NestedScrollView(android.content.Context);
-    ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?);
-    ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?, int);
-    method public boolean arrowScroll(int);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
-    method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
-    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
-    method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
-    method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
-    method public boolean executeKeyEvent(android.view.KeyEvent);
-    method public void fling(int);
-    method public boolean fullScroll(int);
-    method public int getMaxScrollAmount();
-    method public boolean hasNestedScrollingParent(int);
-    method public boolean isFillViewport();
-    method public boolean isSmoothScrollingEnabled();
-    method public void onAttachedToWindow();
-    method public void onNestedPreScroll(android.view.View, int, int, int[], int);
-    method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
-    method public void onNestedScroll(android.view.View, int, int, int, int, int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
-    method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
-    method public void onStopNestedScroll(android.view.View, int);
-    method public boolean pageScroll(int);
-    method public void setFillViewport(boolean);
-    method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener?);
-    method public void setSmoothScrollingEnabled(boolean);
-    method public final void smoothScrollBy(int, int);
-    method public final void smoothScrollBy(int, int, int);
-    method public final void smoothScrollTo(int, int);
-    method public final void smoothScrollTo(int, int, int);
-    method public boolean startNestedScroll(int, int);
-    method public void stopNestedScroll(int);
-  }
-
-  public static interface NestedScrollView.OnScrollChangeListener {
-    method public void onScrollChange(androidx.core.widget.NestedScrollView, int, int, int, int);
-  }
-
-  public final class PopupMenuCompat {
-    method public static android.view.View.OnTouchListener? getDragToOpenListener(Object);
-  }
-
-  public final class PopupWindowCompat {
-    method public static boolean getOverlapAnchor(android.widget.PopupWindow);
-    method public static int getWindowLayoutType(android.widget.PopupWindow);
-    method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
-    method public static void setWindowLayoutType(android.widget.PopupWindow, int);
-    method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
-  }
-
-  @Deprecated public final class ScrollerCompat {
-    method @Deprecated public void abortAnimation();
-    method @Deprecated public boolean computeScrollOffset();
-    method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
-    method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
-    method @Deprecated public void fling(int, int, int, int, int, int, int, int);
-    method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
-    method @Deprecated public float getCurrVelocity();
-    method @Deprecated public int getCurrX();
-    method @Deprecated public int getCurrY();
-    method @Deprecated public int getFinalX();
-    method @Deprecated public int getFinalY();
-    method @Deprecated public boolean isFinished();
-    method @Deprecated public boolean isOverScrolled();
-    method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
-    method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
-    method @Deprecated public boolean springBack(int, int, int, int, int, int);
-    method @Deprecated public void startScroll(int, int, int, int);
-    method @Deprecated public void startScroll(int, int, int, int, int);
-  }
-
-  public final class TextViewCompat {
-    method public static int getAutoSizeMaxTextSize(android.widget.TextView);
-    method public static int getAutoSizeMinTextSize(android.widget.TextView);
-    method public static int getAutoSizeStepGranularity(android.widget.TextView);
-    method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
-    method public static int getAutoSizeTextType(android.widget.TextView);
-    method public static android.content.res.ColorStateList? getCompoundDrawableTintList(android.widget.TextView);
-    method public static android.graphics.PorterDuff.Mode? getCompoundDrawableTintMode(android.widget.TextView);
-    method public static android.graphics.drawable.Drawable![] getCompoundDrawablesRelative(android.widget.TextView);
-    method public static int getFirstBaselineToTopHeight(android.widget.TextView);
-    method public static int getLastBaselineToBottomHeight(android.widget.TextView);
-    method public static int getMaxLines(android.widget.TextView);
-    method public static int getMinLines(android.widget.TextView);
-    method public static androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParams(android.widget.TextView);
-    method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
-    method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
-    method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
-    method public static void setCompoundDrawableTintList(android.widget.TextView, android.content.res.ColorStateList?);
-    method public static void setCompoundDrawableTintMode(android.widget.TextView, android.graphics.PorterDuff.Mode?);
-    method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
-    method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
-    method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
-    method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
-    method public static void setFirstBaselineToTopHeight(android.widget.TextView, @IntRange(from=0) @Px int);
-    method public static void setLastBaselineToBottomHeight(android.widget.TextView, @IntRange(from=0) @Px int);
-    method public static void setLineHeight(android.widget.TextView, @IntRange(from=0) @Px int);
-    method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
-    method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
-    method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.view.ActionMode.Callback? unwrapCustomSelectionActionModeCallback(android.view.ActionMode.Callback?);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.view.ActionMode.Callback? wrapCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback?);
-    field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
-    field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
-  }
-
-  @IntDef({androidx.core.widget.TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE, androidx.core.widget.TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface TextViewCompat.AutoSizeTextType {
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TextViewOnReceiveContentListener implements androidx.core.view.OnReceiveContentListener {
-    ctor public TextViewOnReceiveContentListener();
-    method public androidx.core.view.ContentInfoCompat? onReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintableCheckedTextView {
-    method public android.content.res.ColorStateList? getSupportCheckMarkTintList();
-    method public android.graphics.PorterDuff.Mode? getSupportCheckMarkTintMode();
-    method public void setSupportCheckMarkTintList(android.content.res.ColorStateList?);
-    method public void setSupportCheckMarkTintMode(android.graphics.PorterDuff.Mode?);
-  }
-
-  public interface TintableCompoundButton {
-    method public android.content.res.ColorStateList? getSupportButtonTintList();
-    method public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
-    method public void setSupportButtonTintList(android.content.res.ColorStateList?);
-    method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
-  }
-
-  public interface TintableCompoundDrawablesView {
-    method public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
-    method public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
-    method public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
-    method public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintableImageSourceView {
-    method public android.content.res.ColorStateList? getSupportImageTintList();
-    method public android.graphics.PorterDuff.Mode? getSupportImageTintMode();
-    method public void setSupportImageTintList(android.content.res.ColorStateList?);
-    method public void setSupportImageTintMode(android.graphics.PorterDuff.Mode?);
-  }
-
-}
-
diff --git a/core/core/api/restricted_current.txt b/core/core/api/restricted_current.txt
index 94781c5..ccc9f55 100644
--- a/core/core/api/restricted_current.txt
+++ b/core/core/api/restricted_current.txt
@@ -209,6 +209,10 @@
     method @Deprecated public void setInterruptIfStopped(boolean);
   }
 
+  public final class LocaleManagerCompat {
+    method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
+  }
+
   public final class MultiWindowModeChangedInfo {
     ctor public MultiWindowModeChangedInfo(boolean);
     ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
@@ -856,8 +860,8 @@
     method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroupsCompat();
     method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
     method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannelsCompat();
-    method public void notify(int, android.app.Notification);
-    method public void notify(String?, int, android.app.Notification);
+    method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(int, android.app.Notification);
+    method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void notify(String?, int, android.app.Notification);
     field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
     field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
     field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
@@ -1121,10 +1125,15 @@
     method public static <T> T? getSystemService(android.content.Context, Class<T!>);
     method public static String? getSystemServiceName(android.content.Context, Class<?>);
     method public static boolean isDeviceProtectedStorage(android.content.Context);
+    method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, int);
+    method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, String?, android.os.Handler?, int);
     method public static boolean startActivities(android.content.Context, android.content.Intent![]);
     method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
     method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
     method public static void startForegroundService(android.content.Context, android.content.Intent);
+    field public static final int RECEIVER_EXPORTED = 2; // 0x2
+    field public static final int RECEIVER_NOT_EXPORTED = 4; // 0x4
+    field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
   }
 
   public class FileProvider extends android.content.ContentProvider {
@@ -2086,6 +2095,7 @@
     method public java.util.Locale? getFirstMatch(String![]);
     method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
     method public boolean isEmpty();
+    method @RequiresApi(21) public static boolean matchesLanguageAndScript(java.util.Locale, java.util.Locale);
     method @IntRange(from=0) public int size();
     method public String toLanguageTags();
     method public Object? unwrap();
@@ -2104,7 +2114,18 @@
   }
 
   public final class ParcelCompat {
+    method public static <T> T![]? readArray(android.os.Parcel, ClassLoader?, Class<T!>);
+    method public static <T> java.util.ArrayList<T!>? readArrayList(android.os.Parcel, ClassLoader?, Class<? extends T>);
     method public static boolean readBoolean(android.os.Parcel);
+    method public static <K, V> java.util.HashMap<K!,V!>? readHashMap(android.os.Parcel, ClassLoader?, Class<? extends K>, Class<? extends V>);
+    method public static <T> void readList(android.os.Parcel, java.util.List<? super T>, ClassLoader?, Class<T!>);
+    method public static <K, V> void readMap(android.os.Parcel, java.util.Map<? super K,? super V>, ClassLoader?, Class<K!>, Class<V!>);
+    method public static <T extends android.os.Parcelable> T? readParcelable(android.os.Parcel, ClassLoader?, Class<T!>);
+    method public static <T> T![]? readParcelableArray(android.os.Parcel, ClassLoader?, Class<T!>);
+    method @RequiresApi(30) public static <T> android.os.Parcelable.Creator<T!>? readParcelableCreator(android.os.Parcel, ClassLoader?, Class<T!>);
+    method @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public static <T> java.util.List<T!> readParcelableList(android.os.Parcel, java.util.List<T!>, ClassLoader?, Class<T!>);
+    method public static <T extends java.io.Serializable> T? readSerializable(android.os.Parcel, ClassLoader?, Class<T!>);
+    method public static <T> android.util.SparseArray<T!>? readSparseArray(android.os.Parcel, ClassLoader?, Class<? extends T>);
     method public static void writeBoolean(android.os.Parcel, boolean);
   }
 
@@ -3495,6 +3516,9 @@
     method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, @androidx.core.view.accessibility.AccessibilityEventCompat.ContentChangeType int);
     method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
     field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
     field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
     field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
     field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
@@ -3523,7 +3547,7 @@
     field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
   }
 
-  @IntDef(flag=true, value={androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_SUBTREE, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_TEXT, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_UNDEFINED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface AccessibilityEventCompat.ContentChangeType {
+  @IntDef(flag=true, value={androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_SUBTREE, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_TEXT, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_UNDEFINED, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_DRAG_STARTED, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_DRAG_DROPPED, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_DRAG_CANCELLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface AccessibilityEventCompat.ContentChangeType {
   }
 
   public final class AccessibilityManagerCompat {
@@ -3561,7 +3585,7 @@
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
     method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
-    method public int getActions();
+    method @Deprecated public int getActions();
     method public java.util.List<java.lang.String!> getAvailableExtraData();
     method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
     method public void getBoundsInScreen(android.graphics.Rect!);
@@ -3574,6 +3598,7 @@
     method public CharSequence! getContentDescription();
     method public int getDrawingOrder();
     method public CharSequence! getError();
+    method public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo? getExtraRenderingInfo();
     method public android.os.Bundle! getExtras();
     method public CharSequence? getHintText();
     method @Deprecated public Object! getInfo();
@@ -3596,6 +3621,7 @@
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+    method public String? getUniqueId();
     method public String! getViewIdResourceName();
     method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
     method public int getWindowId();
@@ -3689,6 +3715,7 @@
     method public void setTraversalAfter(android.view.View!, int);
     method public void setTraversalBefore(android.view.View!);
     method public void setTraversalBefore(android.view.View!, int);
+    method public void setUniqueId(String?);
     method public void setViewIdResourceName(String!);
     method public void setVisibleToUser(boolean);
     method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
@@ -3758,6 +3785,9 @@
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_CANCEL;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_DROP;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_START;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
     field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
@@ -3954,18 +3984,22 @@
     method public void getBoundsInScreen(android.graphics.Rect);
     method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
     method public int getChildCount();
+    method public int getDisplayId();
     method public int getId();
     method public int getLayer();
     method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
+    method public void getRegionInScreen(android.graphics.Region);
     method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
     method public CharSequence? getTitle();
     method public int getType();
     method public boolean isAccessibilityFocused();
     method public boolean isActive();
     method public boolean isFocused();
+    method public boolean isInPictureInPictureMode();
     method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
     method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
     method public void recycle();
+    method public android.view.accessibility.AccessibilityWindowInfo? unwrap();
     field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
     field public static final int TYPE_APPLICATION = 1; // 0x1
     field public static final int TYPE_INPUT_METHOD = 2; // 0x2
diff --git a/core/core/lint-baseline.xml b/core/core/lint-baseline.xml
index 3dde51d..c5bbfb0 100644
--- a/core/core/lint-baseline.xml
+++ b/core/core/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
@@ -2172,429 +2172,6 @@
 
     <issue
         id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class androidx.core.app.ActivityOptionsCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeCustomAnimation(context,"
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class androidx.core.app.ActivityOptionsCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeScaleUpAnimation("
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.core.app.ActivityOptionsCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeClipRevealAnimation("
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class androidx.core.app.ActivityOptionsCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeThumbnailScaleUpAnimation("
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.core.app.ActivityOptionsCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeSceneTransitionAnimation("
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.core.app.ActivityOptionsCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    ActivityOptions.makeSceneTransitionAnimation(activity, pairs));"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.core.app.ActivityOptionsCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeTaskLaunchBehind());"
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.core.app.ActivityOptionsCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new ActivityOptionsCompatImpl(ActivityOptions.makeBasic());"
-        errorLine2="                                                                 ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.core.app.ActivityOptionsCompat.ActivityOptionsCompatImpl is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                mActivityOptions.requestUsageTimeReport(receiver);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 24; however, the containing class androidx.core.app.ActivityOptionsCompat.ActivityOptionsCompatImpl is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    mActivityOptions.setLaunchBounds(screenSpacePixelRect));"
-        errorLine2="                                     ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 24; however, the containing class androidx.core.app.ActivityOptionsCompat.ActivityOptionsCompatImpl is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return mActivityOptions.getLaunchBounds();"
-        errorLine2="                                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.core.app.AlarmManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(triggerTime, showIntent),"
-        errorLine2="                         ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.core.app.AlarmManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(triggerTime, showIntent),"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.core.app.AlarmManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            alarmManager.setAndAllowWhileIdle(type, triggerAtMillis, operation);"
-        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.core.app.AlarmManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            alarmManager.setExact(type, triggerAtMillis, operation);"
-        errorLine2="                         ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.core.app.AlarmManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            alarmManager.setExactAndAllowWhileIdle(type, triggerAtMillis, operation);"
-        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.core.app.AppOpsManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return AppOpsManager.permissionToOp(permission);"
-        errorLine2="                                 ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.core.app.AppOpsManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return appOpsManager.noteOp(op, uid, packageName);"
-        errorLine2="                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.core.app.AppOpsManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return appOpsManager.noteOpNoThrow(op, uid, packageName);"
-        errorLine2="                                 ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.core.app.AppOpsManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class);"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.core.app.AppOpsManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return appOpsManager.noteProxyOp(op, proxiedPackageName);"
-        errorLine2="                                 ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.core.app.AppOpsManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class);"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.core.app.AppOpsManagerCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return appOpsManager.noteProxyOpNoThrow(op, proxiedPackageName);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 17; however, the containing class androidx.core.graphics.BitmapCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return bitmap.hasMipMap();"
-        errorLine2="                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/graphics/BitmapCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 17; however, the containing class androidx.core.graphics.BitmapCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            bitmap.setHasMipMap(hasMipMap);"
-        errorLine2="                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/graphics/BitmapCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.core.graphics.BitmapCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return bitmap.getAllocationByteCount();"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/graphics/BitmapCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 29; however, the containing class androidx.core.graphics.BlendModeColorFilterCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    ? new BlendModeColorFilter(color, blendMode) : null;"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/graphics/BlendModeColorFilterCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 18; however, the containing class androidx.core.app.BundleCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return bundle.getBinder(key);"
-        errorLine2="                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/BundleCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 18; however, the containing class androidx.core.app.BundleCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            bundle.putBinder(key, binder);"
-        errorLine2="                   ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/BundleCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class androidx.core.os.CancellationSignal is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                ((android.os.CancellationSignal) obj).cancel();"
-        errorLine2="                                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/CancellationSignal.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class androidx.core.os.CancellationSignal is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                mCancellationSignalObj = new android.os.CancellationSignal();"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/CancellationSignal.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class androidx.core.os.CancellationSignal is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    ((android.os.CancellationSignal) mCancellationSignalObj).cancel();"
-        errorLine2="                                                                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/CancellationSignal.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 24; however, the containing class androidx.core.os.ConfigurationCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return LocaleListCompat.wrap(configuration.getLocales());"
-        errorLine2="                                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/ConfigurationCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 28; however, the containing class androidx.core.database.CursorWindowCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new CursorWindow(name, windowSizeBytes);"
-        errorLine2="                   ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/database/CursorWindowCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 15; however, the containing class androidx.core.database.CursorWindowCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new CursorWindow(name);"
-        errorLine2="                   ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/database/CursorWindowCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 28; however, the containing class androidx.core.app.DialogCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return dialog.requireViewById(id);"
-        errorLine2="                          ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/DialogCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.core.os.EnvironmentCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return Environment.getExternalStorageState(path);"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/EnvironmentCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.core.os.EnvironmentCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return Environment.getStorageState(path);"
-        errorLine2="                               ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/EnvironmentCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 24; however, the containing class androidx.core.os.LocaleListCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return wrap(new LocaleList(localeList));"
-        errorLine2="                        ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.core.os.LocaleListCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                        ? Locale.forLanguageTag(tags[i])"
-        errorLine2="                                 ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 24; however, the containing class androidx.core.os.LocaleListCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return LocaleListCompat.wrap(LocaleList.getAdjustedDefault());"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 24; however, the containing class androidx.core.os.LocaleListCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return LocaleListCompat.wrap(LocaleList.getDefault());"
-        errorLine2="                                                    ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.core.os.LocaleListCompatWrapper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            final String script = locale.getScript();"
-        errorLine2="                                         ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/LocaleListCompatWrapper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 22; however, the containing class androidx.core.os.MessageCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            message.setAsynchronous(async);"
-        errorLine2="                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/MessageCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 22; however, the containing class androidx.core.os.MessageCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                message.setAsynchronous(async);"
-        errorLine2="                        ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/MessageCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 22; however, the containing class androidx.core.os.MessageCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return message.isAsynchronous();"
-        errorLine2="                           ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/MessageCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 22; however, the containing class androidx.core.os.MessageCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                return message.isAsynchronous();"
-        errorLine2="                               ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/os/MessageCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
         message="This call references a method added in API level 33; however, the containing class androidx.core.os.LocaleListCompat is reachable from earlier API levels and will fail run-time class verification."
         errorLine1="            return LocaleList.matchesLanguageAndScript(supported, desired);"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -2604,33 +2181,6 @@
 
     <issue
         id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class androidx.core.app.NavUtils is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return sourceActivity.shouldUpRecreateTask(targetIntent);"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/NavUtils.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class androidx.core.app.NavUtils is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            sourceActivity.navigateUpTo(upIntent);"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/NavUtils.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class androidx.core.app.NavUtils is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            Intent result = sourceActivity.getParentActivityIntent();"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/NavUtils.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
         message="This call references a method added in API level 26; however, the containing class androidx.core.app.NotificationChannelCompat is reachable from earlier API levels and will fail run-time class verification."
         errorLine1="        this(channel.getId(), channel.getImportance());"
         errorLine2="                     ~~~~~">
@@ -3136,7 +2686,7 @@
     <issue
         id="ClassVerificationFailure"
         message="This call references a method added in API level 16; however, the containing class androidx.core.app.NotificationCompat.BigPictureStyle is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                                .setBigContentTitle(mBigContentTitle)"
+        errorLine1="                                .setBigContentTitle(mBigContentTitle);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/app/NotificationCompat.java"/>
@@ -3145,8 +2695,8 @@
     <issue
         id="ClassVerificationFailure"
         message="This call references a method added in API level 16; however, the containing class androidx.core.app.NotificationCompat.BigPictureStyle is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                                .bigPicture(mPicture);"
-        errorLine2="                                 ~~~~~~~~~~">
+        errorLine1="                        style = style.bigPicture(mPictureIcon.getBitmap());"
+        errorLine2="                                      ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/app/NotificationCompat.java"/>
     </issue>
@@ -3468,15 +3018,6 @@
 
     <issue
         id="ClassVerificationFailure"
-        message="This call references a method added in API level 31; however, the containing class androidx.core.app.NotificationCompat.WearableExtender is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                actionBuilder.setAuthenticationRequired(actionCompat.isAuthenticationRequired());"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/core/app/NotificationCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
         message="This call references a method added in API level 20; however, the containing class androidx.core.app.NotificationCompat.WearableExtender is reachable from earlier API levels and will fail run-time class verification."
         errorLine1="            actionBuilder.addExtras(actionExtras);"
         errorLine2="                          ~~~~~~~~~">
diff --git a/core/core/src/androidTest/AndroidManifest.xml b/core/core/src/androidTest/AndroidManifest.xml
index d87622f..08d31cd 100644
--- a/core/core/src/androidTest/AndroidManifest.xml
+++ b/core/core/src/androidTest/AndroidManifest.xml
@@ -119,6 +119,10 @@
             android:exported="true"
             android:theme="@android:style/Theme.Light.NoTitleBar" />
 
+        <activity
+            android:name="androidx.core.app.GetSystemLocalesActivity"
+            android:exported="true" />
+
         <activity-alias
             android:name="androidx.core.app.NavUtilsAliasActivity"
             android:targetActivity="androidx.core.app.NavUtilsActivity">
diff --git a/core/core/src/androidTest/java/androidx/core/app/ActivityCompatTest.java b/core/core/src/androidTest/java/androidx/core/app/ActivityCompatTest.java
index 0d145e0..ce59b98 100644
--- a/core/core/src/androidTest/java/androidx/core/app/ActivityCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/app/ActivityCompatTest.java
@@ -19,6 +19,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertSame;
 import static org.mockito.AdditionalMatchers.aryEq;
 import static org.mockito.ArgumentMatchers.eq;
@@ -32,7 +33,9 @@
 import android.support.v4.BaseInstrumentationTestCase;
 import android.view.View;
 
+import androidx.annotation.OptIn;
 import androidx.core.app.ActivityCompat.PermissionCompatDelegate;
+import androidx.core.os.BuildCompat;
 import androidx.core.test.R;
 import androidx.test.core.app.ActivityScenario;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -147,6 +150,16 @@
         ActivityCompat.requireViewById(getActivity(), View.NO_ID);
     }
 
+    @Test
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    public void testShouldShowRequestPermissionRationaleForPostNotifications() throws Throwable {
+        if (!BuildCompat.isAtLeastT()) {
+            // permission doesn't exist yet, so should return false
+            assertFalse(ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
+                    Manifest.permission.POST_NOTIFICATIONS));
+        }
+    }
+
     @SdkSuppress(minSdkVersion = 23)
     @Test
     public void testOnSharedElementsReady() {
@@ -165,6 +178,5 @@
                 new ActivityCompat.SharedElementCallback21Impl(callback);
         wrapper.onSharedElementsArrived(null, null, listener);
         assertEquals(2, counter.get());
-
     }
 }
diff --git a/core/core/src/androidTest/java/androidx/core/app/ComponentActivityTest.java b/core/core/src/androidTest/java/androidx/core/app/ComponentActivityTest.java
index 9d5b663..3119729 100644
--- a/core/core/src/androidTest/java/androidx/core/app/ComponentActivityTest.java
+++ b/core/core/src/androidTest/java/androidx/core/app/ComponentActivityTest.java
@@ -23,6 +23,7 @@
 import android.os.Build;
 import android.support.v4.BaseInstrumentationTestCase;
 
+import androidx.core.os.BuildCompat;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
 
@@ -90,6 +91,16 @@
         shouldNotDumpSpecialArgOnVersion("--translation", Build.VERSION_CODES.S);
     }
 
+    @Test
+    public void testShouldDumpInternalState_listDumpables() {
+        shouldNotDumpSpecialArgOnT("--list-dumpables");
+    }
+
+    @Test
+    public void testShouldDumpInternalState_dumpDumpable() {
+        shouldNotDumpSpecialArgOnT("--dump-dumpable");
+    }
+
     private void shouldNotDumpSpecialArgOnVersion(String specialArg, int minApiVersion) {
         String[] args = { specialArg };
         int actualApiVersion = Build.VERSION.SDK_INT;
@@ -103,6 +114,19 @@
         }
     }
 
+    private void shouldNotDumpSpecialArgOnT(String specialArg) {
+        String[] args = { specialArg };
+        int actualApiVersion = Build.VERSION.SDK_INT;
+
+        if (BuildCompat.isAtLeastT()) {
+            assertFalse(specialArg + " should be skipped on API " + actualApiVersion,
+                    mComponentActivity.shouldDumpInternalState(args));
+        } else {
+            assertTrue(specialArg + " should be ignored on API " + actualApiVersion,
+                    mComponentActivity.shouldDumpInternalState(args));
+        }
+    }
+
     private class NeverAddedExtraData extends ComponentActivity.ExtraData {
     }
 
diff --git a/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesActivity.java b/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesActivity.java
new file mode 100644
index 0000000..8f900195
--- /dev/null
+++ b/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesActivity.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2022 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.core.app;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.WindowManager;
+
+public class GetSystemLocalesActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+
+        super.onCreate(savedInstanceState);
+
+        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+        setContentView(androidx.core.test.R.layout.activity_compat_activity);
+    }
+
+}
diff --git a/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesTest.java b/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesTest.java
new file mode 100644
index 0000000..c5ecec2
--- /dev/null
+++ b/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesTest.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2017 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.core.app;
+
+import static org.junit.Assert.assertEquals;
+
+import android.support.v4.BaseInstrumentationTestCase;
+
+import androidx.core.os.LocaleListCompat;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.LargeTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@LargeTest
+/**
+ * TestCase to verify the working of {@link androidx.core.app.LocaleManagerCompat.getSystemLocales}.
+ */
+public class GetSystemLocalesTest extends BaseInstrumentationTestCase<GetSystemLocalesActivity> {
+
+    LocaleListCompat mExpectedSystemLocales = null;
+
+    public GetSystemLocalesTest() {
+        super(GetSystemLocalesActivity.class);
+    }
+
+
+    @Before
+    public void setup() {
+        // Since the application has no custom locales set, the initial locales should be same as
+        // the system locales.
+        mExpectedSystemLocales =
+                LocaleManagerCompat.getConfigurationLocales(mActivityTestRule.getActivity()
+                        .getResources().getConfiguration());
+    }
+
+    @Test
+    public void testGetSystemLocales_noAppLocalesSet_systemLocalesSameAsInitLocales() {
+        // verify that the system locales are the same as the initial locales.
+        assertEquals(
+                mExpectedSystemLocales,
+                LocaleManagerCompat.getSystemLocales(mActivityTestRule.getActivity())
+        );
+    }
+}
diff --git a/core/core/src/androidTest/java/androidx/core/app/JobIntentServiceTest.java b/core/core/src/androidTest/java/androidx/core/app/JobIntentServiceTest.java
index af95506..ed0ed4d 100644
--- a/core/core/src/androidTest/java/androidx/core/app/JobIntentServiceTest.java
+++ b/core/core/src/androidTest/java/androidx/core/app/JobIntentServiceTest.java
@@ -264,6 +264,7 @@
             Log.i(TAG, "Running!");
         }
 
+        @SuppressWarnings("deprecation")
         @Override
         protected void onHandleWork(@NonNull Intent intent) {
             Log.i(TAG, "Handling work: " + intent);
diff --git a/core/core/src/androidTest/java/androidx/core/app/ShareCompatTest.java b/core/core/src/androidTest/java/androidx/core/app/ShareCompatTest.java
index 0acf64e..90f0788 100644
--- a/core/core/src/androidTest/java/androidx/core/app/ShareCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/app/ShareCompatTest.java
@@ -38,7 +38,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-
+@SuppressWarnings("deprecation")
 @RunWith(AndroidJUnit4.class)
 @MediumTest
 public class ShareCompatTest extends BaseInstrumentationTestCase<TestActivity> {
@@ -54,6 +54,7 @@
         super(TestActivity.class);
     }
 
+    @SuppressWarnings("deprecation")
     @Test
     public void testBuilder() {
         Activity activity = mActivityTestRule.getActivity();
@@ -71,6 +72,7 @@
                 activity.getComponentName());
     }
 
+    @SuppressWarnings("deprecation")
     @Test
     public void testBuilderWithoutActivity() {
         Context context = mActivityTestRule.getActivity().getApplicationContext();
@@ -86,6 +88,7 @@
         assertNull(intent.getParcelableExtra(ShareCompat.EXTRA_CALLING_ACTIVITY_INTEROP));
     }
 
+    @SuppressWarnings("deprecation")
     @Test
     public void testBuilderWithWrappedActivity() {
         Activity activity = mActivityTestRule.getActivity();
@@ -104,6 +107,7 @@
                 activity.getComponentName());
     }
 
+    @SuppressWarnings("deprecation")
     @Test
     @SdkSuppress(minSdkVersion = 16)
     public void testBuilderSingleStreamUri() {
diff --git a/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java b/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java
index e55d822..85db291 100644
--- a/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java
@@ -70,8 +70,14 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 
+import android.Manifest;
 import android.accounts.AccountManager;
 import android.app.ActivityManager;
 import android.app.AlarmManager;
@@ -87,12 +93,16 @@
 import android.app.usage.UsageStatsManager;
 import android.appwidget.AppWidgetManager;
 import android.bluetooth.BluetoothManager;
+import android.content.BroadcastReceiver;
 import android.content.ClipboardManager;
 import android.content.Context;
 import android.content.ContextWrapper;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.RestrictionsManager;
 import android.content.pm.LauncherApps;
 import android.content.pm.PackageManager;
+import android.content.pm.PermissionInfo;
 import android.content.res.ColorStateList;
 import android.graphics.drawable.Drawable;
 import android.hardware.ConsumerIrManager;
@@ -134,9 +144,13 @@
 import android.view.inputmethod.InputMethodManager;
 import android.view.textservice.TextServicesManager;
 
+import androidx.annotation.OptIn;
+import androidx.core.app.NotificationManagerCompat;
+import androidx.core.os.BuildCompat;
 import androidx.core.test.R;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
+import androidx.test.platform.app.InstrumentationRegistry;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -146,7 +160,14 @@
 @LargeTest
 public class ContextCompatTest extends BaseInstrumentationTestCase<ThemedYellowActivity> {
     private Context mContext;
+    private IntentFilter mTestFilter = new IntentFilter();
+    private String mPermission;
+    private BroadcastReceiver mTestReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
 
+        }
+    };
     public ContextCompatTest() {
         super(ThemedYellowActivity.class);
     }
@@ -154,6 +175,7 @@
     @Before
     public void setup() {
         mContext = mActivityTestRule.getActivity();
+        mPermission = mContext.getPackageName() + ".DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION";
     }
 
     @Test
@@ -445,6 +467,93 @@
         return ((size * tdensity) + (sdensity >> 1)) / sdensity;
     }
 
+    @Test
+    public void testRegisterReceiver_noExportStateFlagThrowsException() {
+        assertThrows(IllegalArgumentException.class, () -> ContextCompat.registerReceiver(mContext,
+                mTestReceiver, mTestFilter, 0));
+    }
+
+    @Test
+    public void testRegisterReceiver_specifyBothExportStateFlagsThrowsException() {
+        assertThrows(IllegalArgumentException.class,
+                () -> ContextCompat.registerReceiver(mContext,
+                mTestReceiver, mTestFilter,
+                ContextCompat.RECEIVER_EXPORTED | ContextCompat.RECEIVER_NOT_EXPORTED));
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = 33)
+    public void testRegisterReceiverApi33() {
+        Context spyContext = spy(mContext);
+
+        ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+                ContextCompat.RECEIVER_NOT_EXPORTED);
+        verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter), eq(null),
+                any(), eq(ContextCompat.RECEIVER_NOT_EXPORTED));
+
+        ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+                ContextCompat.RECEIVER_EXPORTED);
+        verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter), eq(null), any(),
+                eq(ContextCompat.RECEIVER_EXPORTED));
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = 26, maxSdkVersion = 32)
+    public void testRegisterReceiverApi26() {
+        Context spyContext = spy(mContext);
+
+        ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+                ContextCompat.RECEIVER_NOT_EXPORTED);
+        verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter),
+                eq(mPermission), any());
+
+        ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+                ContextCompat.RECEIVER_EXPORTED);
+        verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter), eq(null), any(),
+                eq(0));
+
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = 29, maxSdkVersion = 32)
+    public void testRegisterReceiverPermissionNotGrantedApi26() {
+        InstrumentationRegistry
+                .getInstrumentation().getUiAutomation().adoptShellPermissionIdentity();
+        assertThrows(RuntimeException.class,
+                () -> ContextCompat.registerReceiver(mContext,
+                        mTestReceiver, mTestFilter, ContextCompat.RECEIVER_NOT_EXPORTED));
+    }
+
+    @Test
+    @SdkSuppress(maxSdkVersion = 25)
+    public void testRegisterReceiver() {
+        Context spyContext = spy(mContext);
+
+        ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+                ContextCompat.RECEIVER_NOT_EXPORTED);
+        verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter), eq(mPermission),
+                any());
+
+        ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+                ContextCompat.RECEIVER_EXPORTED);
+        verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter), eq(null), any());
+    }
+
+    @Test
+    public void testRegisterReceiver_mergedPermission_hasSignatureProtectionLevel()
+            throws Exception {
+        // Packages registering unexported runtime receivers on pre-T devices will have their
+        // receiver protected by a permission; to ensure other apps on the device cannot send a
+        // broadcast to these receivers, the permission must be declared with the signature
+        // protectionLevel.
+        PermissionInfo permissionInfo =
+                mContext.getPackageManager().getPermissionInfo(mPermission, 0);
+
+        assertEquals("The permission guarding unexported runtime receivers must have the "
+                + "signature protectionLevel.", PermissionInfo.PROTECTION_SIGNATURE,
+                permissionInfo.protectionLevel);
+    }
+
     @Test(expected = NullPointerException.class)
     public void testCheckSelfPermissionNull() {
         ContextCompat.checkSelfPermission(mContext, null);
@@ -474,4 +583,22 @@
                 ContextCompat.checkSelfPermission(mContext,
                         android.Manifest.permission.DELETE_PACKAGES));
     }
+
+    @Test
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    public void testCheckSelfPermissionNotificationPermission() {
+        if (BuildCompat.isAtLeastT()) {
+            assertEquals(
+                    mContext.checkCallingPermission(Manifest.permission.POST_NOTIFICATIONS),
+                    ContextCompat.checkSelfPermission(
+                            mContext,
+                            Manifest.permission.POST_NOTIFICATIONS));
+        } else {
+            assertEquals("Notification permission allowed by default on devices <= SDK 32",
+                    NotificationManagerCompat.from(mContext).areNotificationsEnabled()
+                            ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED,
+                    ContextCompat.checkSelfPermission(mContext,
+                            Manifest.permission.POST_NOTIFICATIONS));
+        }
+    }
 }
diff --git a/core/core/src/androidTest/java/androidx/core/content/PackageManagerCompatTest.java b/core/core/src/androidTest/java/androidx/core/content/PackageManagerCompatTest.java
index 98a9aea..d612ba4 100644
--- a/core/core/src/androidTest/java/androidx/core/content/PackageManagerCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/content/PackageManagerCompatTest.java
@@ -318,6 +318,7 @@
      * this case, they are permission revocation apps.
      */
     @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+    @SuppressWarnings("deprecation")
     static void setupPermissionRevocationApps(
             PackageManager packageManager, List<String> packageNames) {
         List<ResolveInfo> resolveInfos = new ArrayList<>();
diff --git a/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt b/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt
index 53f5500..bc98c5f 100644
--- a/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt
@@ -333,6 +333,7 @@
         }
     }
 
+    @Suppress("DEPRECATION")
     private fun mockPackageManager() = mockThrowOnUnmocked<PackageManager> {
         val mockCerts = params.mockCerts
         whenever(getPackageInfo(TEST_PKG_NAME, params.mockCerts.flag)) {
diff --git a/core/core/src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java b/core/core/src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java
index b4eb56a..6bab3ca 100644
--- a/core/core/src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java
@@ -89,7 +89,7 @@
 import java.util.Collections;
 import java.util.List;
 
-@SuppressWarnings("unchecked")
+@SuppressWarnings({"unchecked", "deprecation"})
 @RunWith(AndroidJUnit4.class)
 public class ShortcutManagerCompatTest extends BaseInstrumentationTestCase<TestActivity> {
 
diff --git a/core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java b/core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
index 4fe35fa..3d49310 100644
--- a/core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
@@ -64,6 +64,7 @@
 import java.util.concurrent.TimeUnit;
 
 @SmallTest
+@SuppressWarnings("deprecation")
 public class TypefaceCompatTest {
 
     public Context mContext;
diff --git a/core/core/src/androidTest/java/androidx/core/graphics/drawable/IconCompatTest.java b/core/core/src/androidTest/java/androidx/core/graphics/drawable/IconCompatTest.java
index cd79b88..0d25f5e 100644
--- a/core/core/src/androidTest/java/androidx/core/graphics/drawable/IconCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/graphics/drawable/IconCompatTest.java
@@ -57,6 +57,7 @@
 import java.io.OutputStream;
 import java.util.Arrays;
 
+@SuppressWarnings("deprecation")
 @RunWith(AndroidJUnit4.class)
 @SmallTest
 public class IconCompatTest {
diff --git a/core/core/src/androidTest/java/androidx/core/os/LocaleListCompatTest.java b/core/core/src/androidTest/java/androidx/core/os/LocaleListCompatTest.java
index 3fd5f6d..6bd9800 100644
--- a/core/core/src/androidTest/java/androidx/core/os/LocaleListCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/os/LocaleListCompatTest.java
@@ -393,6 +393,44 @@
         assertNotEquals(first.toLanguageTags(), second.toLanguageTags());
     }
 
+    @SdkSuppress(minSdkVersion = 21)
+    @Test
+    public void testLocaleListCompat_matchesLanguageAndScript() {
+        assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("fr-Latn-FR"),
+                forLanguageTag("fr-Latn")));
+        assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-Hans-CN"),
+                forLanguageTag("zh-Hans")));
+        assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-Hant-TW"),
+                forLanguageTag("zh-Hant")));
+        assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("en-US"),
+                forLanguageTag("en-US")));
+        assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("en-US"),
+                forLanguageTag("en-CA")));
+        assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("ar-NA"),
+                forLanguageTag("ar-ZA")));
+        assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-CN"),
+                forLanguageTag("zh")));
+        assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-CN"),
+                forLanguageTag("zh-Hans")));
+        assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-TW"),
+                forLanguageTag("zh-Hant")));
+
+        assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-Hant-TW"),
+                forLanguageTag("zh-Hans")));
+        assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("en-XA"),
+                forLanguageTag("en-US")));
+        assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("ar-YE"),
+                forLanguageTag("ar-XB")));
+        assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("en-US"),
+                forLanguageTag("zh-TW")));
+        assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-TW"),
+                forLanguageTag("zh")));
+        assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-CN"),
+                forLanguageTag("zh-Hant")));
+        assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-TW"),
+                forLanguageTag("zh-Hans")));
+    }
+
     private Locale forLanguageTag(String str) {
         if (Build.VERSION.SDK_INT >= 21) {
             return Locale.forLanguageTag(str);
diff --git a/core/core/src/androidTest/java/androidx/core/os/ParcelCompatTest.java b/core/core/src/androidTest/java/androidx/core/os/ParcelCompatTest.java
index e1d273b..873a9c2 100644
--- a/core/core/src/androidTest/java/androidx/core/os/ParcelCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/os/ParcelCompatTest.java
@@ -16,17 +16,31 @@
 
 package androidx.core.os;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
+import android.content.pm.Signature;
+import android.graphics.Rect;
+import android.os.Build;
 import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.SparseArray;
 
+import androidx.annotation.RequiresApi;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Objects;
+
 @RunWith(AndroidJUnit4.class)
 @SmallTest
 public class ParcelCompatTest {
@@ -40,4 +54,186 @@
         assertTrue(ParcelCompat.readBoolean(p));
         assertFalse(ParcelCompat.readBoolean(p));
     }
+
+    @Test
+    public void readParcelable2Arg() {
+        Rect r = new Rect(0, 0, 10, 10);
+        Parcel p = Parcel.obtain();
+        p.writeParcelable(r, 0);
+
+        p.setDataPosition(0);
+        Rect r2 = ParcelCompat.readParcelable(p, Rect.class.getClassLoader(), Rect.class);
+        assertEquals(r, r2);
+    }
+
+    @Test
+    public void readArrayInT() {
+        Parcel p = Parcel.obtain();
+
+        Signature[] s = {new Signature("1234"),
+                null,
+                new Signature("abcd")};
+        p.writeArray(s);
+
+        p.setDataPosition(0);
+        Object[] objects = ParcelCompat.readArray(p, Signature.class.getClassLoader(),
+                Signature.class);
+        assertTrue(Arrays.equals(s, objects));
+        p.setDataPosition(0);
+
+        p.recycle();
+    }
+
+    @RequiresApi(api = Build.VERSION_CODES.S)
+    @Test
+    public void readSparseArrayInT() {
+        Parcel p = Parcel.obtain();
+
+        SparseArray<Signature> s = new SparseArray<>();
+        s.put(0, new Signature("1234567890abcdef"));
+        s.put(2, null);
+        s.put(3, new Signature("abcdef1234567890"));
+        p.writeSparseArray(s);
+
+        p.setDataPosition(0);
+        SparseArray<Signature> s1 = ParcelCompat.readSparseArray(p,
+                Signature.class.getClassLoader(), Signature.class);
+        assertEquals(s.size(), s1.size());
+        for (int index = 0; index < s.size(); index++) {
+            int key = s.keyAt(index);
+            assertTrue(Objects.equals(s.valueAt(index), s1.get(key)));
+        }
+
+        p.recycle();
+    }
+
+    @Test
+    @SuppressWarnings("unchecked")
+    public void readListInT() {
+        Parcel p = Parcel.obtain();
+        ArrayList<Signature> s = new ArrayList();
+        ArrayList<Signature> s2 = new ArrayList();
+        s.add(new Signature("1234567890abcdef"));
+        s.add(new Signature("abcdef1234567890"));
+
+        p.writeList(s);
+        p.setDataPosition(0);
+        ParcelCompat.readList(p, s2, Signature.class.getClassLoader(), Signature.class);
+        assertEquals(2, s2.size());
+        for (int i = 0; i < s2.size(); i++) {
+            assertEquals(s.get(i), s2.get(i));
+        }
+        p.recycle();
+    }
+
+    @Test
+    public void readArrayListInT() {
+        Parcel p = Parcel.obtain();
+
+        ArrayList<Signature> s = new ArrayList<>();
+        s.add(new Signature("1234567890abcdef"));
+        s.add(null);
+        s.add(new Signature("abcdef1234567890"));
+
+        p.writeList(s);
+        p.setDataPosition(0);
+        ArrayList<Signature> s1 = ParcelCompat.readArrayList(p, Signature.class.getClassLoader(),
+                Signature.class);
+        assertEquals(s, s1);
+
+        p.recycle();
+    }
+
+    @Test
+    public void readMapInT() {
+        Parcel p = Parcel.obtain();
+        ClassLoader loader = getClass().getClassLoader();
+        HashMap<String, Signature> map = new HashMap<>();
+        HashMap<String, Signature> map2 = new HashMap<>();
+
+        map.put("key1", new Signature("abcd"));
+        map.put("key2", new Signature("ABCD"));
+        p.writeMap(map);
+        p.setDataPosition(0);
+        ParcelCompat.readMap(p, map2, Signature.class.getClassLoader(), String.class,
+                Signature.class);
+        assertEquals(map, map2);
+
+        p.recycle();
+    }
+
+    @Test
+    public void readHashMapInT() {
+        Parcel p = Parcel.obtain();
+        ClassLoader loader = getClass().getClassLoader();
+        HashMap<String, Signature> map = new HashMap<>();
+        HashMap<String, Signature> map2 = new HashMap<>();
+
+        map.put("key1", new Signature("abcd"));
+        map.put("key2", new Signature("ABCD"));
+        p.writeMap(map);
+        p.setDataPosition(0);
+        map2 = ParcelCompat.readHashMap(p, loader, String.class, Signature.class);
+        assertEquals(map, map2);
+
+        p.recycle();
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.R)
+    @Test
+    public void readParcelableCreatorInT() {
+        final String signatureString  = "1234567890abcdef";
+        Signature s = new Signature(signatureString);
+
+        Parcel p = Parcel.obtain();
+        p.writeParcelableCreator(s);
+        p.setDataPosition(0);
+        assertSame(Signature.CREATOR, ParcelCompat.readParcelableCreator(p,
+                Signature.class.getClassLoader(), Signature.class));
+
+        p.setDataPosition(0);
+        p.recycle();
+    }
+
+    @Test
+    public void readParcelableArrayInT() {
+        Parcel p = Parcel.obtain();
+        Signature[] s = {new Signature("1234"),
+                null,
+                new Signature("abcd")
+        };
+        p.writeParcelableArray(s, 0);
+        p.setDataPosition(0);
+        Parcelable[] s1 = ParcelCompat.readParcelableArray(p, Signature.class.getClassLoader(),
+                Signature.class);
+        assertTrue(Arrays.equals(s, s1));
+        p.recycle();
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    @Test
+    public void readParcelableListInT() {
+        final Parcel p = Parcel.obtain();
+        ArrayList<Signature> list = new ArrayList<>();
+        ArrayList<Signature> list1 = new ArrayList<>();
+        list.add(new Signature("1234"));
+        list.add(new Signature("4321"));
+        p.writeParcelableList(list, 0);
+        p.setDataPosition(0);
+        ParcelCompat.readParcelableList(p, list1, Signature.class.getClassLoader(),
+                Signature.class);
+        assertEquals(list, list1);
+        p.recycle();
+    }
+
+    @Test
+    public void readSerializable2Arg() {
+        String s = "Hello World";
+        Parcel p = Parcel.obtain();
+        p.writeSerializable(s);
+
+        p.setDataPosition(0);
+        String s2 = ParcelCompat.readSerializable(p, String.class.getClassLoader(), String.class);
+        assertEquals(s, s2);
+    }
 }
diff --git a/core/core/src/androidTest/java/androidx/core/provider/FontsContractCompatTest.java b/core/core/src/androidTest/java/androidx/core/provider/FontsContractCompatTest.java
index 4499af4..5112fed 100644
--- a/core/core/src/androidTest/java/androidx/core/provider/FontsContractCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/provider/FontsContractCompatTest.java
@@ -68,6 +68,7 @@
  */
 @RunWith(AndroidJUnit4.class)
 @MediumTest
+@SuppressWarnings("deprecation")
 public class FontsContractCompatTest {
     private static final String AUTHORITY = "androidx.core.provider.fonts.font";
     private static final String PACKAGE = "androidx.core.test";
@@ -322,6 +323,7 @@
     }
 
     @Test
+    @SuppressWarnings("deprecation")
     public void testGetProvider_duplicateCerts()
             throws PackageManager.NameNotFoundException {
         PackageManager packageManager = mock(PackageManager.class);
@@ -377,6 +379,7 @@
         }
     }
 
+    @SuppressWarnings("deprecation")
     private ProviderInfo setupPackageManager(PackageManager packageManager)
             throws PackageManager.NameNotFoundException {
         ProviderInfo info = new ProviderInfo();
diff --git a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
index e32d604..e564d40 100644
--- a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
@@ -125,6 +125,14 @@
         assertThat(nodeCompat.isTextEntryKey(), is(false));
     }
 
+    @Test
+    public void testGetSetUniqueId() {
+        final String uniqueId = (Build.VERSION.SDK_INT >= 19) ? "localUId" : null;
+        AccessibilityNodeInfoCompat nodeCompat = obtainedWrappedNodeCompat();
+        nodeCompat.setUniqueId(uniqueId);
+        assertThat(nodeCompat.getUniqueId(), equalTo(uniqueId));
+    }
+
     @SdkSuppress(minSdkVersion = 19)
     @Test
     public void testAccessibilityActionsNotNull() {
@@ -268,4 +276,14 @@
         accessibilityNodeInfoCompat.setAvailableExtraData(testData);
         assertThat(accessibilityNodeInfoCompat.getAvailableExtraData(), equalTo(testData));
     }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @SmallTest
+    @Test
+    public void testGetExtraRenderingInfo() {
+        AccessibilityNodeInfoCompat accessibilityNodeInfoCompat = obtainedWrappedNodeCompat();
+        assertThat(
+                accessibilityNodeInfoCompat.getExtraRenderingInfo(),
+                equalTo(accessibilityNodeInfoCompat.unwrap().getExtraRenderingInfo()));
+    }
 }
diff --git a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompatTest.java
new file mode 100644
index 0000000..a1afdfda
--- /dev/null
+++ b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompatTest.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2022 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.core.view.accessibility;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsEqual.equalTo;
+
+import android.annotation.TargetApi;
+import android.graphics.Region;
+import android.view.accessibility.AccessibilityWindowInfo;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SdkSuppress;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class AccessibilityWindowInfoCompatTest {
+
+    @TargetApi(21)
+    private AccessibilityWindowInfoCompat obtainedWrappedWindowCompat() {
+        AccessibilityWindowInfo accessibilityWindowInfo = AccessibilityWindowInfo.obtain();
+        return AccessibilityWindowInfoCompat.wrapNonNullInstance(accessibilityWindowInfo);
+    }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @SmallTest
+    @Test
+    public void testUnwrap() {
+        AccessibilityWindowInfo accessibilityWindowInfo = AccessibilityWindowInfo.obtain();
+        AccessibilityWindowInfoCompat accessibilityWindowInfoCompat =
+                AccessibilityWindowInfoCompat.wrapNonNullInstance(accessibilityWindowInfo);
+        assertThat(accessibilityWindowInfoCompat.unwrap(), equalTo(accessibilityWindowInfo));
+    }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @SmallTest
+    @Test
+    public void testIsPictureInPictureMode() {
+        AccessibilityWindowInfoCompat windowInfoCompat = obtainedWrappedWindowCompat();
+        assertThat(windowInfoCompat.isInPictureInPictureMode(), equalTo(
+                windowInfoCompat.unwrap().isInPictureInPictureMode()));
+    }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @SmallTest
+    @Test
+    public void testGetDisplayId() {
+        AccessibilityWindowInfoCompat windowInfoCompat = obtainedWrappedWindowCompat();
+        assertThat(windowInfoCompat.getDisplayId(), equalTo(
+                windowInfoCompat.unwrap().getDisplayId()));
+    }
+
+    @SdkSuppress(minSdkVersion = 33)
+    @SmallTest
+    @Test
+    public void testGetRegionInScreen() {
+        AccessibilityWindowInfoCompat windowInfoCompat = obtainedWrappedWindowCompat();
+        Region region = new Region();
+        Region compatRegion = new Region();
+        windowInfoCompat.unwrap().getRegionInScreen(region);
+        windowInfoCompat.getRegionInScreen(region);
+        assertThat(region, equalTo(compatRegion));
+    }
+}
diff --git a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewStretchFlingTest.kt b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewStretchFlingTest.kt
index 90dd90e..c7e7fe2 100644
--- a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewStretchFlingTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewStretchFlingTest.kt
@@ -24,6 +24,7 @@
 import android.widget.LinearLayout
 import androidx.core.app.ComponentActivity
 import androidx.test.ext.junit.rules.ActivityScenarioRule
+import androidx.test.filters.FlakyTest
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.testutils.PollingCheck
@@ -115,6 +116,7 @@
     }
 
     @Test
+    @FlakyTest(bugId = 240290945)
     fun flingContentAfterStretchOnBottom() {
         mRule.scenario.onActivity {
             nestedScrollView.scrollTo(0, nestedScrollView.scrollRange)
diff --git a/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java b/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java
index 2a9a40b..0765571 100644
--- a/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java
@@ -489,6 +489,7 @@
 
     @Test
     @SdkSuppress(minSdkVersion = 26, maxSdkVersion =  27)
+    @SuppressWarnings("deprecation")
     public void testSetCustomSelectionActionModeCallback_fixesBugInO() {
         // Create mock context and package manager for the text view.
         final PackageManager packageManagerMock = spy(mTextView.getContext().getPackageManager());
diff --git a/core/core/src/main/AndroidManifest.xml b/core/core/src/main/AndroidManifest.xml
index 8481017..d214fa6 100644
--- a/core/core/src/main/AndroidManifest.xml
+++ b/core/core/src/main/AndroidManifest.xml
@@ -16,4 +16,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android">
     <application
         android:appComponentFactory="androidx.core.app.CoreComponentFactory" />
+    <permission android:name="${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
+        android:protectionLevel="signature" />
+    <uses-permission android:name="${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"/>
 </manifest>
diff --git a/core/core/src/main/java/androidx/core/app/ActivityCompat.java b/core/core/src/main/java/androidx/core/app/ActivityCompat.java
index 9c36ad6..4481909 100644
--- a/core/core/src/main/java/androidx/core/app/ActivityCompat.java
+++ b/core/core/src/main/java/androidx/core/app/ActivityCompat.java
@@ -16,6 +16,7 @@
 
 package androidx.core.app;
 
+import android.Manifest;
 import android.app.Activity;
 import android.content.Context;
 import android.content.ContextWrapper;
@@ -40,15 +41,19 @@
 import androidx.annotation.IntRange;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.core.content.ContextCompat;
 import androidx.core.content.LocusIdCompat;
+import androidx.core.os.BuildCompat;
 import androidx.core.view.DragAndDropPermissionsCompat;
 
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * Helper for accessing features in {@link android.app.Activity}.
@@ -331,6 +336,7 @@
      * <p>Note that this is <em>not</em> a security feature -- you can not trust the
      * referrer information, applications can spoof it.</p>
      */
+    @SuppressWarnings("deprecation")
     @Nullable
     public static Uri getReferrer(@NonNull Activity activity) {
         if (Build.VERSION.SDK_INT >= 22) {
@@ -486,6 +492,15 @@
      * RuntimePermissions</a> sample app demonstrates how to use this method to
      * request permissions at run time.
      * </p>
+     * <p>
+     * If {@link Manifest.permission#POST_NOTIFICATIONS} is requested before the device supports
+     * the notification permission, then {@link Manifest.permission#POST_NOTIFICATIONS} will be
+     * removed from {@link OnRequestPermissionsResultCallback#onRequestPermissionsResult}.
+     * For devices that don't support {@link Manifest.permission#POST_NOTIFICATIONS}, apps can
+     * send users to its notification settings to enable notifications. See
+     * {@link android.provider.Settings.ACTION_APP_NOTIFICATION_SETTINGS} for more information
+     * on launching notification settings.
+     * </p>
      *
      * @param activity The target activity.
      * @param permissions The requested permissions. Must be non-null and not empty.
@@ -497,6 +512,7 @@
      * @see #checkSelfPermission(android.content.Context, String)
      * @see #shouldShowRequestPermissionRationale(android.app.Activity, String)
      */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
     public static void requestPermissions(final @NonNull Activity activity,
             final @NonNull String[] permissions, final @IntRange(from = 0) int requestCode) {
         if (sDelegate != null
@@ -505,11 +521,32 @@
             return;
         }
 
-        for (String permission : permissions) {
-            if (TextUtils.isEmpty(permission)) {
+        Set<Integer> indicesOfPermissionsToRemove = new HashSet<>();
+        for (int i = 0; i < permissions.length; i++) {
+            if (TextUtils.isEmpty(permissions[i])) {
                 throw new IllegalArgumentException("Permission request for permissions "
                         + Arrays.toString(permissions) + " must not contain null or empty values");
             }
+
+            if (!BuildCompat.isAtLeastT()) {
+                if (TextUtils.equals(permissions[i], Manifest.permission.POST_NOTIFICATIONS)) {
+                    indicesOfPermissionsToRemove.add(i);
+                }
+            }
+        }
+
+        int numPermissionsToRemove = indicesOfPermissionsToRemove.size();
+        final String[] permissionsArray = numPermissionsToRemove > 0
+                ? new String[permissions.length - numPermissionsToRemove] : permissions;
+        if (numPermissionsToRemove > 0) {
+            if (numPermissionsToRemove == permissions.length) {
+                return;
+            }
+            for (int i = 0, modifiedIndex = 0; i < permissions.length; i++) {
+                if (!indicesOfPermissionsToRemove.contains(i)) {
+                    permissionsArray[modifiedIndex++] = permissions[i];
+                }
+            }
         }
 
         if (Build.VERSION.SDK_INT >= 23) {
@@ -523,19 +560,19 @@
             handler.post(new Runnable() {
                 @Override
                 public void run() {
-                    final int[] grantResults = new int[permissions.length];
+                    final int[] grantResults = new int[permissionsArray.length];
 
                     PackageManager packageManager = activity.getPackageManager();
                     String packageName = activity.getPackageName();
 
-                    final int permissionCount = permissions.length;
+                    final int permissionCount = permissionsArray.length;
                     for (int i = 0; i < permissionCount; i++) {
                         grantResults[i] = packageManager.checkPermission(
-                                permissions[i], packageName);
+                                permissionsArray[i], packageName);
                     }
 
                     ((OnRequestPermissionsResultCallback) activity).onRequestPermissionsResult(
-                            requestCode, permissions, grantResults);
+                            requestCode, permissionsArray, grantResults);
                 }
             });
         }
@@ -551,8 +588,14 @@
      * @see #checkSelfPermission(Context, String)
      * @see #requestPermissions(Activity, String[], int)
      */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
     public static boolean shouldShowRequestPermissionRationale(@NonNull Activity activity,
             @NonNull String permission) {
+        if (!BuildCompat.isAtLeastT()
+                && TextUtils.equals(Manifest.permission.POST_NOTIFICATIONS, permission)) {
+            // notification permission doesn't exist before T
+            return false;
+        }
         if (Build.VERSION.SDK_INT >= 23) {
             return Api23Impl.shouldShowRequestPermissionRationale(activity, permission);
         }
diff --git a/core/core/src/main/java/androidx/core/app/ComponentActivity.java b/core/core/src/main/java/androidx/core/app/ComponentActivity.java
index 764e041..206cfd2 100644
--- a/core/core/src/main/java/androidx/core/app/ComponentActivity.java
+++ b/core/core/src/main/java/androidx/core/app/ComponentActivity.java
@@ -28,8 +28,10 @@
 import androidx.annotation.CallSuper;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
 import androidx.annotation.RestrictTo;
 import androidx.collection.SimpleArrayMap;
+import androidx.core.os.BuildCompat;
 import androidx.core.view.KeyEventDispatcher;
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleOwner;
@@ -167,6 +169,7 @@
         return !shouldSkipDump(args);
     }
 
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
     private static boolean shouldSkipDump(@Nullable String[] args) {
         if (args != null && args.length > 0) {
             // NOTE: values below are hardcoded on framework's Activity (like dumpInner())
@@ -177,6 +180,9 @@
                     return Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
                 case "--translation":
                     return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S;
+                case "--list-dumpables":
+                case "--dump-dumpable":
+                    return BuildCompat.isAtLeastT();
             }
         }
         return false;
diff --git a/core/core/src/main/java/androidx/core/app/LocaleManagerCompat.java b/core/core/src/main/java/androidx/core/app/LocaleManagerCompat.java
new file mode 100644
index 0000000..9aabc8c
--- /dev/null
+++ b/core/core/src/main/java/androidx/core/app/LocaleManagerCompat.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2022 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.core.app;
+
+import android.app.LocaleManager;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.os.Build;
+import android.os.LocaleList;
+
+import androidx.annotation.AnyThread;
+import androidx.annotation.DoNotInline;
+import androidx.annotation.NonNull;
+import androidx.annotation.OptIn;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.VisibleForTesting;
+import androidx.core.os.BuildCompat;
+import androidx.core.os.LocaleListCompat;
+
+import java.util.Locale;
+
+/**
+ * Helper for accessing features in {@link android.app.LocaleManager} in a backwards compatible
+ * fashion.
+ *
+ * <p><b>Note:</b> Backwards compatibility for
+ * {@link LocaleManager#setApplicationLocales(LocaleList)} and
+ * {@link LocaleManager#getApplicationLocales()} is available via AppCompatDelegate.
+ */
+public final class LocaleManagerCompat {
+
+    private LocaleManagerCompat() {}
+
+    /**
+     * Returns the current system locales, ignoring app-specific overrides.
+     *
+     * <p><b>Note:</b> Apps should generally access the user's locale preferences as indicated in
+     * their in-process {@link android.os.LocaleList}s. However, in case an app-specific locale
+     * is set, this method helps cater to rare use-cases which might require specifically knowing
+     * the system locale.
+     */
+    @OptIn(markerClass = androidx.core.os.BuildCompat.PrereleaseSdkCheck.class)
+    @NonNull
+    @AnyThread
+    public static LocaleListCompat getSystemLocales(@NonNull Context context) {
+        LocaleListCompat systemLocales = LocaleListCompat.getEmptyLocaleList();
+        // TODO: modify the check to Build.Version.SDK_INT >= 33.
+        if (BuildCompat.isAtLeastT()) {
+            // If the API version is 33 or above we want to redirect the call to the framework API.
+            Object localeManager = getLocaleManagerForApplication(context);
+            if (localeManager != null) {
+                systemLocales = LocaleListCompat.wrap(Api33Impl.localeManagerGetSystemLocales(
+                        localeManager));
+            }
+        } else {
+            // Changing app locales using AppCompatDelegate for API < 33 does not modify the
+            // context's configuration and hence this configuration can be used to fetch system
+            // locales.
+            systemLocales = getConfigurationLocales(context.getApplicationContext()
+                    .getResources().getConfiguration());
+        }
+        return systemLocales;
+    }
+
+    /**
+     * Returns the localeManager for the current application.
+     */
+    @RequiresApi(33)
+    private static Object getLocaleManagerForApplication(Context context) {
+        return context.getSystemService(Context.LOCALE_SERVICE);
+    }
+
+    @VisibleForTesting
+    static LocaleListCompat getConfigurationLocales(Configuration conf) {
+        if (Build.VERSION.SDK_INT >= 24) {
+            return Api24Impl.getLocales(conf);
+        } else if (Build.VERSION.SDK_INT >= 21) {
+            return LocaleListCompat.forLanguageTags(Api21Impl.toLanguageTag(conf.locale));
+        } else {
+            // Create LocaleListCompat using the configuration locale directly since
+            // Locale.toLanguageTag() was added for API level 21 and above.
+            return LocaleListCompat.create(conf.locale);
+        }
+    }
+
+    @RequiresApi(21)
+    static class Api21Impl {
+        private Api21Impl() {}
+
+        @DoNotInline
+        static String toLanguageTag(Locale locale) {
+            return locale.toLanguageTag();
+        }
+    }
+
+    @RequiresApi(24)
+    static class Api24Impl {
+        private Api24Impl() {}
+
+        @DoNotInline
+        static LocaleListCompat getLocales(Configuration configuration) {
+            return LocaleListCompat.forLanguageTags(configuration.getLocales().toLanguageTags());
+        }
+    }
+
+    @RequiresApi(33)
+    static class Api33Impl {
+        private Api33Impl() {}
+
+        @DoNotInline
+        static LocaleList localeManagerGetSystemLocales(Object localeManager) {
+            LocaleManager mLocaleManager = (LocaleManager) localeManager;
+            return mLocaleManager.getSystemLocales();
+        }
+    }
+}
diff --git a/core/core/src/main/java/androidx/core/app/NotificationManagerCompat.java b/core/core/src/main/java/androidx/core/app/NotificationManagerCompat.java
index de76c7f..c0b7eea 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationManagerCompat.java
@@ -16,6 +16,7 @@
 
 package androidx.core.app;
 
+import android.Manifest;
 import android.app.AppOpsManager;
 import android.app.Notification;
 import android.app.NotificationChannel;
@@ -44,6 +45,7 @@
 import androidx.annotation.GuardedBy;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresPermission;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
@@ -201,6 +203,7 @@
      * @param id           the ID of the notification
      * @param notification the notification to post to the system
      */
+    @RequiresPermission(Manifest.permission.POST_NOTIFICATIONS)
     public void notify(int id, @NonNull Notification notification) {
         notify(null, id, notification);
     }
@@ -213,6 +216,7 @@
      *                     your app.
      * @param notification the notification to post to the system
      */
+    @RequiresPermission(Manifest.permission.POST_NOTIFICATIONS)
     public void notify(@Nullable String tag, int id, @NonNull Notification notification) {
         if (useSideChannelForNotification(notification)) {
             pushSideChannelQueue(new NotifyTask(mContext.getPackageName(), id, tag, notification));
@@ -794,6 +798,7 @@
          * Check the current list of enabled listener packages and update the records map
          * accordingly.
          */
+        @SuppressWarnings("deprecation")
         private void updateListenerMap() {
             Set<String> enabledPackages = getEnabledListenerPackages(mContext);
             if (enabledPackages.equals(mCachedEnabledPackages)) {
diff --git a/core/core/src/main/java/androidx/core/app/ShareCompat.java b/core/core/src/main/java/androidx/core/app/ShareCompat.java
index c209d4f..5cfe607 100644
--- a/core/core/src/main/java/androidx/core/app/ShareCompat.java
+++ b/core/core/src/main/java/androidx/core/app/ShareCompat.java
@@ -196,7 +196,7 @@
      * @param intent Intent that was launched to share content
      * @return ComponentName of the calling activity
      */
-    @SuppressWarnings("WeakerAccess")
+    @SuppressWarnings({"WeakerAccess", "deprecation"})
     @Nullable
     static ComponentName getCallingActivity(@NonNull Intent intent) {
         ComponentName result = intent.getParcelableExtra(EXTRA_CALLING_ACTIVITY);
@@ -882,6 +882,7 @@
          * @return A URI referring to a data stream to be shared or null if one was not supplied
          * @see Intent#EXTRA_STREAM
          */
+        @SuppressWarnings("deprecation")
         @Nullable
         public Uri getStream() {
             return mIntent.getParcelableExtra(Intent.EXTRA_STREAM);
@@ -896,6 +897,7 @@
          * @see Intent#EXTRA_STREAM
          * @see Intent#ACTION_SEND_MULTIPLE
          */
+        @SuppressWarnings("deprecation")
         @Nullable
         public Uri getStream(int index) {
             if (mStreams == null && isMultipleShare()) {
@@ -918,6 +920,7 @@
          *
          * @return Count of text items contained within the Intent
          */
+        @SuppressWarnings("deprecation")
         public int getStreamCount() {
             if (mStreams == null && isMultipleShare()) {
                 mStreams = mIntent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
@@ -1066,6 +1069,7 @@
          *
          * @return The calling application's label or null if unknown
          */
+        @SuppressWarnings("deprecation")
         @Nullable
         public CharSequence getCallingApplicationLabel() {
             if (mCallingPackage == null) return null;
diff --git a/core/core/src/main/java/androidx/core/content/ContextCompat.java b/core/core/src/main/java/androidx/core/content/ContextCompat.java
index 942112e..0408fee 100644
--- a/core/core/src/main/java/androidx/core/content/ContextCompat.java
+++ b/core/core/src/main/java/androidx/core/content/ContextCompat.java
@@ -84,10 +84,12 @@
 import android.app.usage.UsageStatsManager;
 import android.appwidget.AppWidgetManager;
 import android.bluetooth.BluetoothManager;
+import android.content.BroadcastReceiver;
 import android.content.ClipboardManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.RestrictionsManager;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.LauncherApps;
@@ -126,6 +128,7 @@
 import android.telecom.TelecomManager;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
+import android.text.TextUtils;
 import android.util.Log;
 import android.util.TypedValue;
 import android.view.LayoutInflater;
@@ -139,16 +142,23 @@
 import androidx.annotation.ColorRes;
 import androidx.annotation.DoNotInline;
 import androidx.annotation.DrawableRes;
+import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
 import androidx.core.app.ActivityOptionsCompat;
+import androidx.core.app.NotificationManagerCompat;
 import androidx.core.content.res.ResourcesCompat;
+import androidx.core.os.BuildCompat;
 import androidx.core.os.EnvironmentCompat;
 import androidx.core.os.ExecutorCompat;
 import androidx.core.util.ObjectsCompat;
 
 import java.io.File;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.HashMap;
 import java.util.concurrent.Executor;
 
@@ -190,6 +200,35 @@
         return null;
     }
 
+
+    private static final String DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION_SUFFIX =
+            ".DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION";
+
+
+    /** @hide */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @IntDef(flag = true, value = {
+            RECEIVER_VISIBLE_TO_INSTANT_APPS, RECEIVER_EXPORTED, RECEIVER_NOT_EXPORTED,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface RegisterReceiverFlags {}
+    /**
+     * Flag for {@link #registerReceiver}: The receiver can receive broadcasts from Instant Apps.
+     */
+    public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 0x1;
+
+    /**
+     * Flag for {@link #registerReceiver}: The receiver can receive broadcasts from other Apps.
+     * Has the same behavior as marking a statically registered receiver with "exported=true"
+     */
+    public static final int RECEIVER_EXPORTED = 0x2;
+
+    /**
+     * Flag for {@link #registerReceiver}: The receiver cannot receive broadcasts from other Apps.
+     * Has the same behavior as marking a statically registered receiver with "exported=false"
+     */
+    public static final int RECEIVER_NOT_EXPORTED = 0x4;
+
     /**
      * Start a set of activities as a synthesized task stack, if able.
      *
@@ -550,8 +589,15 @@
      * permission, or {@link PackageManager#PERMISSION_DENIED} if not.
      * @see PackageManager#checkPermission(String, String)
      */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
     public static int checkSelfPermission(@NonNull Context context, @NonNull String permission) {
         ObjectsCompat.requireNonNull(permission, "permission must be non-null");
+        if (!BuildCompat.isAtLeastT()
+                && TextUtils.equals(android.Manifest.permission.POST_NOTIFICATIONS, permission)) {
+            return NotificationManagerCompat.from(context).areNotificationsEnabled()
+                    ? PackageManager.PERMISSION_GRANTED
+                    : PackageManager.PERMISSION_DENIED;
+        }
         return context.checkPermission(permission, Process.myPid(), Process.myUid());
     }
 
@@ -727,6 +773,89 @@
     }
 
     /**
+     * Register a broadcast receiver.
+     *
+     * @param context  Context to retrieve service from.
+     * @param receiver The BroadcastReceiver to handle the broadcast.
+     * @param filter   Selects the Intent broadcasts to be received.
+     * @param flags    Specify one of {@link #RECEIVER_EXPORTED}, if you wish for your receiver
+     *                 to be able to receiver broadcasts from other applications, or
+     *                 {@link #RECEIVER_NOT_EXPORTED} if you only want your receiver to be able
+     *                 to receive broadcasts from the system or your own app.
+     * @return The first sticky intent found that matches <var>filter</var>,
+     * or null if there are none.
+     * @see Context#registerReceiver(BroadcastReceiver, IntentFilter, int)
+     */
+    @Nullable
+    public static Intent registerReceiver(@NonNull Context context,
+            @Nullable BroadcastReceiver receiver, @NonNull IntentFilter filter,
+            @RegisterReceiverFlags int flags) {
+        return registerReceiver(context, receiver, filter, null, null, flags);
+    }
+
+    /**
+     * Register a broadcast receiver.
+     *
+     * @param context             Context to retrieve service from.
+     * @param receiver            The BroadcastReceiver to handle the broadcast.
+     * @param filter              Selects the Intent broadcasts to be received.
+     * @param broadcastPermission String naming a permission that a broadcaster must hold in
+     *                            order to send and Intent to you. If null, no permission is
+     *                            required.
+     * @param scheduler           Handler identifying the thread will receive the Intent. If
+     *                            null, the main thread of the process will be used.
+     * @param flags               Specify one of {@link #RECEIVER_EXPORTED}, if you wish for your
+     *                            receiver to be able to receiver broadcasts from other
+     *                            applications, or {@link #RECEIVER_NOT_EXPORTED} if you only want
+     *                            your receiver to be able to receive broadcasts from the system
+     *                            or your own app.
+     * @return The first sticky intent found that matches <var>filter</var>,
+     * or null if there are none.
+     * @see Context#registerReceiver(BroadcastReceiver, IntentFilter, String, Handler, int)
+     */
+    @Nullable
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    public static Intent registerReceiver(@NonNull Context context,
+            @Nullable BroadcastReceiver receiver, @NonNull IntentFilter filter,
+            @Nullable String broadcastPermission,
+            @Nullable Handler scheduler, @RegisterReceiverFlags int flags) {
+        if (((flags & RECEIVER_VISIBLE_TO_INSTANT_APPS) != 0) && ((flags & RECEIVER_NOT_EXPORTED)
+                != 0)) {
+            throw new IllegalArgumentException("Cannot specify both "
+                    + "RECEIVER_VISIBLE_TO_INSTANT_APPS and RECEIVER_NOT_EXPORTED");
+        }
+
+        if ((flags & RECEIVER_VISIBLE_TO_INSTANT_APPS) != 0) {
+            flags |= RECEIVER_EXPORTED;
+        }
+
+        if (((flags & RECEIVER_EXPORTED) == 0) && ((flags & RECEIVER_NOT_EXPORTED) == 0)) {
+            throw new IllegalArgumentException("One of either RECEIVER_EXPORTED or "
+                    + "RECEIVER_NOT_EXPORTED is required");
+        }
+
+        if (((flags & RECEIVER_EXPORTED) != 0) && ((flags & RECEIVER_NOT_EXPORTED) != 0)) {
+            throw new IllegalArgumentException("Cannot specify both RECEIVER_EXPORTED and "
+                    + "RECEIVER_NOT_EXPORTED");
+        }
+
+        if (BuildCompat.isAtLeastT()) {
+            return Api33Impl.registerReceiver(context, receiver, filter, broadcastPermission,
+                    scheduler, flags);
+        }
+        if (Build.VERSION.SDK_INT >= 26) {
+            return Api26Impl.registerReceiver(context, receiver, filter, broadcastPermission,
+                    scheduler, flags);
+        }
+        if (((flags & RECEIVER_NOT_EXPORTED) != 0) && (broadcastPermission == null)) {
+            String permission = obtainAndCheckReceiverPermission(context);
+            return context.registerReceiver(receiver, filter, permission, scheduler /* handler */);
+        }
+        return context.registerReceiver(receiver, filter, broadcastPermission,
+                scheduler);
+    }
+
+    /**
      * Gets the name of the system-level service that is represented by the specified class.
      *
      * @param context      Context to retrieve service name from.
@@ -743,6 +872,25 @@
         return LegacyServiceMapHolder.SERVICES.get(serviceClass);
     }
 
+    /**
+     * Gets the name of the permission required to unexport receivers on pre Tiramisu versions of
+     * Android, and then asserts that the app registering the receiver also has that permission
+     * so it can receiver its own broadcasts.
+     *
+     * @param obj   Context to check the permission in.
+     * @return The name of the permission
+     */
+    static String obtainAndCheckReceiverPermission(Context obj) {
+        String permission =
+                obj.getPackageName() + DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION_SUFFIX;
+        if (PermissionChecker.checkSelfPermission(obj, permission)
+                != PermissionChecker.PERMISSION_GRANTED) {
+            throw new RuntimeException("Permission " + permission + " is required by your "
+                    + "application to receive broadcasts, please add it to your manifest");
+        }
+        return permission;
+    }
+
     /** Nested class provides lazy initialization only when needed. */
     private static final class LegacyServiceMapHolder {
         static final HashMap<Class<?>, String> SERVICES = new HashMap<>();
@@ -925,6 +1073,18 @@
             // This class is not instantiable.
         }
 
+        @DoNotInline
+        static Intent registerReceiver(Context obj, @Nullable BroadcastReceiver receiver,
+                IntentFilter filter, String broadcastPermission, Handler scheduler, int flags) {
+            if ((flags & RECEIVER_NOT_EXPORTED) != 0 && broadcastPermission == null) {
+                String permission = obtainAndCheckReceiverPermission(obj);
+                // receivers that are not exported should also not be visible to instant apps
+                return obj.registerReceiver(receiver, filter, permission, scheduler);
+            }
+            flags &= Context.RECEIVER_VISIBLE_TO_INSTANT_APPS;
+            return obj.registerReceiver(receiver, filter, broadcastPermission, scheduler, flags);
+        }
+
         @SuppressWarnings("UnusedReturnValue")
         @DoNotInline
         static ComponentName startForegroundService(Context obj, Intent service) {
@@ -955,4 +1115,17 @@
             return obj.getAttributionTag();
         }
     }
+
+    @RequiresApi(33)
+    static class Api33Impl {
+        private Api33Impl() {
+            // This class is not instantiable
+        }
+
+        @DoNotInline
+        static Intent registerReceiver(Context obj, @Nullable BroadcastReceiver receiver,
+                IntentFilter filter, String broadcastPermission, Handler scheduler, int flags) {
+            return obj.registerReceiver(receiver, filter, broadcastPermission, scheduler, flags);
+        }
+    }
 }
diff --git a/core/core/src/main/java/androidx/core/content/PackageManagerCompat.java b/core/core/src/main/java/androidx/core/content/PackageManagerCompat.java
index 8831564..f932e1d 100644
--- a/core/core/src/main/java/androidx/core/content/PackageManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/content/PackageManagerCompat.java
@@ -217,6 +217,7 @@
      */
     @Nullable
     @RestrictTo(LIBRARY)
+    @SuppressWarnings("deprecation")
     public static String getPermissionRevocationVerifierApp(
             @NonNull PackageManager packageManager) {
         Intent permissionRevocationSettingsIntent =
diff --git a/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java b/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
index 9a037c7..31372ce 100644
--- a/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
@@ -81,6 +81,7 @@
      *                                              provided {@param packageManager}
      */
     @NonNull
+    @SuppressWarnings("deprecation")
     public static List<Signature> getSignatures(@NonNull PackageManager packageManager,
             @NonNull String packageName) throws PackageManager.NameNotFoundException {
         Signature[] array;
diff --git a/core/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java b/core/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java
index eeb9b34..02976d8 100644
--- a/core/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java
@@ -860,6 +860,7 @@
         return sShortcutInfoCompatSaver;
     }
 
+    @SuppressWarnings("deprecation")
     private static List<ShortcutInfoChangeListener> getShortcutInfoListeners(Context context) {
         if (sShortcutInfoChangeListeners == null) {
             List<ShortcutInfoChangeListener> result = new ArrayList<>();
diff --git a/core/core/src/main/java/androidx/core/content/pm/ShortcutXmlParser.java b/core/core/src/main/java/androidx/core/content/pm/ShortcutXmlParser.java
index 95a9003..5b1e2ef 100644
--- a/core/core/src/main/java/androidx/core/content/pm/ShortcutXmlParser.java
+++ b/core/core/src/main/java/androidx/core/content/pm/ShortcutXmlParser.java
@@ -86,6 +86,7 @@
      * Returns a set of string which contains the ids of static shortcuts.
      */
     @NonNull
+    @SuppressWarnings("deprecation")
     private static Set<String> parseShortcutIds(@NonNull final Context context) {
         final Set<String> result = new HashSet<>();
         final Intent mainIntent = new Intent(Intent.ACTION_MAIN);
diff --git a/core/core/src/main/java/androidx/core/graphics/drawable/IconCompat.java b/core/core/src/main/java/androidx/core/graphics/drawable/IconCompat.java
index dd4b95a..8a8385c 100644
--- a/core/core/src/main/java/androidx/core/graphics/drawable/IconCompat.java
+++ b/core/core/src/main/java/androidx/core/graphics/drawable/IconCompat.java
@@ -682,6 +682,7 @@
         return null;
     }
 
+    @SuppressWarnings("deprecation")
     static Resources getResources(Context context, String resPackage) {
         if ("android".equals(resPackage)) {
             return Resources.getSystem();
diff --git a/core/core/src/main/java/androidx/core/net/ConnectivityManagerCompat.java b/core/core/src/main/java/androidx/core/net/ConnectivityManagerCompat.java
index 3c2c8f1..47c9dca 100644
--- a/core/core/src/main/java/androidx/core/net/ConnectivityManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/net/ConnectivityManagerCompat.java
@@ -137,6 +137,7 @@
      * potentially-stale value from
      * {@link ConnectivityManager#EXTRA_NETWORK_INFO}. May be {@code null}.
      */
+    @SuppressWarnings("deprecation")
     @SuppressLint("ReferencesDeprecated")
     @Nullable
     @RequiresPermission(Manifest.permission.ACCESS_NETWORK_STATE)
diff --git a/core/core/src/main/java/androidx/core/os/LocaleListCompat.java b/core/core/src/main/java/androidx/core/os/LocaleListCompat.java
index a09c8bf..7409305 100644
--- a/core/core/src/main/java/androidx/core/os/LocaleListCompat.java
+++ b/core/core/src/main/java/androidx/core/os/LocaleListCompat.java
@@ -23,8 +23,10 @@
 import androidx.annotation.IntRange;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.Size;
+import androidx.core.text.ICUCompat;
 
 import java.util.Locale;
 
@@ -231,6 +233,87 @@
         }
     }
 
+    /**
+     * Determine whether two locales are considered a match, even if they are not exactly equal.
+     * They are considered as a match when both of their languages and scripts
+     * (explicit or inferred) are identical. This means that a user would be able to understand
+     * the content written in the supported locale even if they say they prefer the desired locale.
+     *
+     * E.g. [zh-HK] matches [zh-Hant]; [en-US] matches [en-CA].
+     *
+     * @param supported The supported {@link Locale} to be compared.
+     * @param desired   The desired {@link Locale} to be compared.
+     * @return True if they match, false otherwise.
+     */
+    @RequiresApi(21)
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    public static boolean matchesLanguageAndScript(@NonNull Locale supported,
+            @NonNull Locale desired) {
+        if (BuildCompat.isAtLeastT()) {
+            return LocaleList.matchesLanguageAndScript(supported, desired);
+        } else if (Build.VERSION.SDK_INT >= 21) {
+            return Api21Impl.matchesLanguageAndScript(supported, desired);
+        } else {
+            throw new UnsupportedOperationException(
+                    "This method is only supported on API level 21+");
+        }
+    }
+
+    @RequiresApi(21)
+    static class Api21Impl {
+        private Api21Impl() {
+            // This class is not instantiable.
+        }
+
+        @DoNotInline
+        static boolean matchesLanguageAndScript(@NonNull Locale supported,
+                @NonNull Locale desired) {
+            if (supported.equals(desired)) {
+                return true;  // return early so we don't do unnecessary computation
+            }
+            if (!supported.getLanguage().equals(desired.getLanguage())) {
+                return false;
+            }
+            if (isPseudoLocale(supported) || isPseudoLocale(desired)) {
+                // The locales are not the same, but the languages are the same, and one of the
+                // locales
+                // is a pseudo-locale. So this is not a match.
+                return false;
+            }
+            final String supportedScr = ICUCompat.maximizeAndGetScript(supported);
+            if (supportedScr.isEmpty()) {
+                // If we can't guess a script, we don't know enough about the locales' language
+                // to find
+                // if the locales match. So we fall back to old behavior of matching, which
+                // considered
+                // locales with different regions different.
+                final String supportedRegion = supported.getCountry();
+                return supportedRegion.isEmpty() || supportedRegion.equals(desired.getCountry());
+            }
+            final String desiredScr = ICUCompat.maximizeAndGetScript(desired);
+            // There is no match if the two locales use different scripts. This will most imporantly
+            // take care of traditional vs simplified Chinese.
+            return supportedScr.equals(desiredScr);
+        }
+
+        private static final Locale[] PSEUDO_LOCALE = {
+                new Locale("en", "XA"), new Locale("ar", "XB")};
+
+        private static boolean isPseudoLocale(Locale locale) {
+            for (Locale pseudoLocale : PSEUDO_LOCALE) {
+                if (pseudoLocale.equals(locale)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        @DoNotInline
+        static Locale forLanguageTag(String languageTag) {
+            return Locale.forLanguageTag(languageTag);
+        }
+    }
+
     @Override
     public boolean equals(Object other) {
         return other instanceof LocaleListCompat && mImpl.equals(((LocaleListCompat) other).mImpl);
@@ -268,16 +351,4 @@
             return LocaleList.getDefault();
         }
     }
-
-    @RequiresApi(21)
-    static class Api21Impl {
-        private Api21Impl() {
-            // This class is not instantiable.
-        }
-
-        @DoNotInline
-        static Locale forLanguageTag(String languageTag) {
-            return Locale.forLanguageTag(languageTag);
-        }
-    }
 }
diff --git a/core/core/src/main/java/androidx/core/os/ParcelCompat.java b/core/core/src/main/java/androidx/core/os/ParcelCompat.java
index a181077..8fa56eb 100644
--- a/core/core/src/main/java/androidx/core/os/ParcelCompat.java
+++ b/core/core/src/main/java/androidx/core/os/ParcelCompat.java
@@ -16,9 +16,23 @@
 
 package androidx.core.os;
 
+import android.annotation.SuppressLint;
+import android.os.Build;
 import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.SparseArray;
 
+import androidx.annotation.DoNotInline;
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
+import androidx.annotation.RequiresApi;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Helper for accessing features in {@link Parcel}.
@@ -43,5 +57,329 @@
         out.writeInt(value ? 1 : 0);
     }
 
+    /**
+     * Same as {@link Parcel#readList(List, ClassLoader)} but accepts {@code clazz} parameter as
+     * the type required for each item.
+     *
+     * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+     * deserialized is not an instance of that class or any of its children classes or there was
+     * an error trying to instantiate an element.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    @SuppressWarnings("deprecation")
+    public static <T> void readList(@NonNull Parcel in, @NonNull List<? super T> outVal,
+            @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+        if (BuildCompat.isAtLeastT()) {
+            TiramisuImpl.readList(in, outVal, loader, clazz);
+        } else {
+            in.readList(outVal, loader);
+        }
+    }
+
+    /**
+     * Same as {@link Parcel#readArrayList(ClassLoader)} but accepts {@code clazz} parameter as
+     * the type required for each item.
+     *
+     * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+     * deserialized is not an instance of that class or any of its children classes or there was
+     * an error trying to instantiate an element.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    @SuppressLint({"ConcreteCollection", "NullableCollection"})
+    @SuppressWarnings({"deprecation", "unchecked"})
+    @Nullable
+    public static <T> ArrayList<T> readArrayList(@NonNull Parcel in, @Nullable ClassLoader loader,
+            @NonNull Class<? extends T> clazz) {
+        if (BuildCompat.isAtLeastT()) {
+            return TiramisuImpl.readArrayList(in, loader, clazz);
+        } else {
+            return in.readArrayList(loader);
+        }
+    }
+
+    /**
+     * Same as {@link Parcel#readArray(ClassLoader)} but accepts {@code clazz} parameter as
+     * the type required for each item.
+     *
+     * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+     * deserialized is not an instance of that class or any of its children classes or there was
+     * an error trying to instantiate an element.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    @SuppressWarnings({"deprecation", "unchecked"})
+    @SuppressLint({"ArrayReturn", "NullableCollection"})
+    @Nullable
+    public static <T> T[] readArray(@NonNull Parcel in, @Nullable ClassLoader loader,
+            @NonNull Class<T> clazz) {
+        if (BuildCompat.isAtLeastT()) {
+            return TiramisuImpl.readArray(in, loader, clazz);
+        } else {
+            return (T[]) in.readArray(loader);
+        }
+    }
+
+    /**
+     * Same as {@link Parcel#readSparseArray(ClassLoader)} but accepts {@code clazz} parameter as
+     * the type required for each item.
+     *
+     * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+     * deserialized is not an instance of that class or any of its children classes or there was
+     * an error trying to instantiate an element.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    @SuppressWarnings("deprecation")
+    @Nullable
+    public static <T> SparseArray<T> readSparseArray(@NonNull Parcel in,
+            @Nullable ClassLoader loader,
+            @NonNull Class<? extends T> clazz) {
+        if (BuildCompat.isAtLeastT()) {
+            return TiramisuImpl.readSparseArray(in, loader, clazz);
+        } else {
+            return in.readSparseArray(loader);
+        }
+    }
+
+
+    /**
+     * Same as {@link Parcel#readMap(Map, ClassLoader)} but accepts {@code clazzKey} and
+     * {@code clazzValue} parameter as the types required for each key and value pair.
+     *
+     * @throws android.os.BadParcelableException If the item to be deserialized is not an
+     * instance of that class or any of its children class.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    @SuppressWarnings("deprecation")
+    public static <K, V> void readMap(@NonNull Parcel in, @NonNull Map<? super K, ? super V> outVal,
+            @Nullable ClassLoader loader, @NonNull Class<K> clazzKey,
+            @NonNull Class<V> clazzValue) {
+        if (BuildCompat.isAtLeastT()) {
+            TiramisuImpl.readMap(in, outVal, loader, clazzKey, clazzValue);
+        } else {
+            in.readMap(outVal, loader);
+        }
+    }
+
+    /**
+     * Same as {@link Parcel#readHashMap(ClassLoader)} but accepts {@code clazzKey} and
+     * {@code clazzValue} parameter as the types required for each key and value pair.
+     *
+     * @throws android.os.BadParcelableException if the item to be deserialized is not an
+     * instance of that class or any of its children class.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    @SuppressLint({"ConcreteCollection", "NullableCollection"})
+    @SuppressWarnings({"deprecation", "unchecked"})
+    @Nullable
+    public static <K, V> HashMap<K, V> readHashMap(@NonNull Parcel in, @Nullable ClassLoader loader,
+            @NonNull Class<? extends K> clazzKey, @NonNull Class<? extends V> clazzValue) {
+        if (BuildCompat.isAtLeastT()) {
+            return TiramisuImpl.readHashMap(in, loader, clazzKey, clazzValue);
+        } else {
+            return in.readHashMap(loader);
+        }
+    }
+
+    /**
+     * Same as {@link Parcel#readParcelable(ClassLoader)} but accepts {@code clazz} parameter as
+     * the type required for each item.
+     *
+     * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+     * deserialized is not an instance of that class or any of its children classes or there was
+     * an error trying to instantiate an element.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    @SuppressWarnings("deprecation")
+    @Nullable
+    public static <T extends Parcelable> T readParcelable(@NonNull Parcel in,
+            @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+        if (BuildCompat.isAtLeastT()) {
+            return TiramisuImpl.readParcelable(in, loader, clazz);
+        } else {
+            return in.readParcelable(loader);
+        }
+    }
+
+    /**
+     * Same as {@link Parcel#readParcelableCreator(ClassLoader)} but accepts {@code clazz} parameter
+     * as the required type.
+     *
+     * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+     * deserialized is not an instance of that class or any of its children classes or there
+     * there was an error trying to read the {@link Parcelable.Creator}.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    @SuppressWarnings({"deprecation", "unchecked"})
+    @Nullable
+    @RequiresApi(30)
+    public static <T> Parcelable.Creator<T> readParcelableCreator(@NonNull Parcel in,
+            @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+        if (BuildCompat.isAtLeastT()) {
+            return TiramisuImpl.readParcelableCreator(in, loader, clazz);
+        } else {
+            return (Parcelable.Creator<T>) Api30Impl.readParcelableCreator(in, loader);
+        }
+    }
+
+    /**
+     * Same as {@link Parcel#readParcelableArray(ClassLoader)}  but accepts {@code clazz} parameter
+     * as the type required for each item.
+     *
+     * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+     * deserialized is not an instance of that class or any of its children classes or there was
+     * an error trying to instantiate an element.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    @SuppressWarnings({"deprecation", "unchecked"})
+    @SuppressLint({"ArrayReturn", "NullableCollection"})
+    @Nullable
+    public static <T> T[] readParcelableArray(@NonNull Parcel in, @Nullable ClassLoader loader,
+            @NonNull Class<T> clazz) {
+        if (BuildCompat.isAtLeastT()) {
+            return TiramisuImpl.readParcelableArray(in, loader, clazz);
+        } else {
+            return (T[]) in.readParcelableArray(loader);
+        }
+    }
+
+    /**
+     * Same as {@link Parcel#readParcelableList(List, ClassLoader)} but accepts {@code clazz}
+     * parameter as the type required for each item.
+     *
+     * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+     * deserialized is not an instance of that class or any of its children classes or there was
+     * an error trying to instantiate an element.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    @NonNull
+    @SuppressWarnings({"deprecation", "unchecked"})
+    @RequiresApi(api = Build.VERSION_CODES.Q)
+    public static <T> List<T> readParcelableList(@NonNull Parcel in, @NonNull List<T> list,
+            @Nullable ClassLoader cl, @NonNull Class<T> clazz) {
+        if (BuildCompat.isAtLeastT()) {
+            return TiramisuImpl.readParcelableList(in, list, cl, clazz);
+        } else {
+            return Api29Impl.readParcelableList(in, (List) list, cl);
+        }
+    }
+
+    /**
+     * Same as {@link Parcel#readSerializable()} but accepts {@code loader} parameter
+     * as the primary classLoader for resolving the Serializable class; and {@code clazz} parameter
+     * as the required type.
+     *
+     * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+     * deserialized is not an instance of that class or any of its children class or there there
+     * was an error deserializing the object.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    @SuppressWarnings({"deprecation", "unchecked"})
+    @Nullable
+    public static <T extends Serializable> T readSerializable(@NonNull Parcel in,
+            @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+        if (BuildCompat.isAtLeastT()) {
+            return TiramisuImpl.readSerializable(in, loader, clazz);
+        } else {
+            return (T) in.readSerializable();
+        }
+    }
+
     private ParcelCompat() {}
+
+    @RequiresApi(29)
+    static class Api29Impl {
+        private Api29Impl() {
+            // This class is non-instantiable.
+        }
+
+        @DoNotInline
+        static final <T extends Parcelable> List<T> readParcelableList(@NonNull Parcel in,
+                @NonNull List<T> list, @Nullable ClassLoader cl) {
+            return in.readParcelableList(list, cl);
+        }
+    }
+
+    @RequiresApi(30)
+    static class Api30Impl {
+        private Api30Impl() {
+            // This class is non-instantiable.
+        }
+
+        @DoNotInline
+        static final Parcelable.Creator<?> readParcelableCreator(@NonNull Parcel in,
+                @Nullable ClassLoader loader) {
+            return in.readParcelableCreator(loader);
+        }
+    }
+
+    @RequiresApi(33)
+    static class TiramisuImpl {
+        private TiramisuImpl() {
+            // This class is non-instantiable.
+        }
+
+        @DoNotInline
+        static <T extends Serializable> T readSerializable(@NonNull Parcel in,
+                @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+            return in.readSerializable(loader, clazz);
+        }
+
+        @DoNotInline
+        static <T extends Parcelable> T readParcelable(@NonNull Parcel in,
+                @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+            return in.readParcelable(loader, clazz);
+        }
+
+        @DoNotInline
+        public static <T> Parcelable.Creator<T> readParcelableCreator(Parcel in, ClassLoader loader,
+                Class<T> clazz) {
+            return in.readParcelableCreator(loader, clazz);
+        }
+
+        @DoNotInline
+        static <T> T[] readParcelableArray(@NonNull Parcel in, @Nullable ClassLoader loader,
+                @NonNull Class<T> clazz) {
+            return in.readParcelableArray(loader, clazz);
+        }
+
+        @DoNotInline
+        static <T> List<T> readParcelableList(@NonNull Parcel in, @NonNull List<T> list,
+                @Nullable ClassLoader cl, @NonNull Class<T> clazz) {
+            return in.readParcelableList(list, cl, clazz);
+        }
+
+        @DoNotInline
+        public static <T> void readList(@NonNull Parcel in, @NonNull List<? super T> outVal,
+                @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+            in.readList(outVal, loader, clazz);
+        }
+
+        @DoNotInline
+        public static <T> ArrayList<T> readArrayList(Parcel in, ClassLoader loader,
+                Class<? extends T> clazz) {
+            return in.readArrayList(loader, clazz);
+        }
+
+        @DoNotInline
+        public static <T> T[] readArray(Parcel in, ClassLoader loader, Class<T> clazz) {
+            return in.readArray(loader, clazz);
+        }
+
+        @DoNotInline
+        public static <T> SparseArray<T> readSparseArray(Parcel in, ClassLoader loader,
+                Class<? extends T> clazz) {
+            return in.readSparseArray(loader, clazz);
+        }
+
+        @DoNotInline
+        public static <K, V> void readMap(Parcel in, Map<? super K, ? super V> outVal,
+                ClassLoader loader, Class<K> clazzKey, Class<V> clazzValue) {
+            in.readMap(outVal, loader, clazzKey, clazzValue);
+        }
+
+        @DoNotInline
+        public static <V, K> HashMap<K, V> readHashMap(Parcel in, ClassLoader loader,
+                Class<? extends K> clazzKey, Class<? extends V> clazzValue) {
+            return in.readHashMap(loader, clazzKey, clazzValue);
+        }
+    }
 }
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
index ed6beeb..74a0ae7 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
@@ -202,6 +202,36 @@
     public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 0x00000040;
 
     /**
+     * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
+     * A drag has started while accessibility is enabled. This is either via an
+     * AccessibilityAction, or via touch events. This is sent from the source that initiated the
+     * drag.
+     *
+     * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_START
+     */
+    public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 0x00000080;
+
+    /**
+     * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
+     * A drag in with accessibility enabled has ended. This means the content has been
+     * successfully dropped. This is sent from the target that accepted the dragged content.
+     *
+     * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_DROP
+     */
+    public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 0x00000100;
+
+    /**
+     * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
+     * A drag in with accessibility enabled has ended. This means the content has been
+     * unsuccessfully dropped, the user has canceled the action via an AccessibilityAction, or
+     * no drop has been detected within a timeout and the drag was automatically cancelled. This is
+     * sent from the source that initiated the drag.
+     *
+     * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_CANCEL
+     */
+    public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 0x0000200;
+
+    /**
      * Mask for {@link AccessibilityEvent} all types.
      *
      * @see AccessibilityEvent#TYPE_VIEW_CLICKED
@@ -238,7 +268,10 @@
                     CONTENT_CHANGE_TYPE_STATE_DESCRIPTION,
                     CONTENT_CHANGE_TYPE_SUBTREE,
                     CONTENT_CHANGE_TYPE_TEXT,
-                    CONTENT_CHANGE_TYPE_UNDEFINED
+                    CONTENT_CHANGE_TYPE_UNDEFINED,
+                    CONTENT_CHANGE_TYPE_DRAG_STARTED,
+                    CONTENT_CHANGE_TYPE_DRAG_DROPPED,
+                    CONTENT_CHANGE_TYPE_DRAG_CANCELLED
             })
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Retention(RetentionPolicy.SOURCE)
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
index bfa3191..b14385f 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
@@ -23,6 +23,7 @@
 import static java.util.Collections.emptyList;
 
 import android.annotation.SuppressLint;
+import android.content.ClipData;
 import android.graphics.Rect;
 import android.graphics.Region;
 import android.os.Build;
@@ -39,9 +40,12 @@
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo;
 
+import androidx.annotation.DoNotInline;
 import androidx.annotation.IntRange;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
+import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.core.R;
 import androidx.core.accessibilityservice.AccessibilityServiceInfoCompat;
@@ -591,6 +595,54 @@
                         ? AccessibilityNodeInfo.AccessibilityAction.ACTION_IME_ENTER : null,
                         android.R.id.accessibilityActionImeEnter, null, null, null);
 
+        /**
+         * Action to start a drag.
+         * <p>
+         * This action initiates a drag & drop within the system. The source's dragged content is
+         * prepared before the drag begins. In View, this action should prepare the arguments to
+         * {@link View#startDragAndDrop(ClipData, View.DragShadowBuilder, Object, int)}} and then
+         * call the method. The equivalent should be performed for other UI toolkits.
+         * </p>
+         *
+         * @see AccessibilityEventCompat#CONTENT_CHANGE_TYPE_DRAG_STARTED
+         */
+        @NonNull
+        public static final AccessibilityActionCompat ACTION_DRAG_START =
+                new AccessibilityActionCompat(Build.VERSION.SDK_INT >= 32
+                        ?  AccessibilityNodeInfo.AccessibilityAction.ACTION_DRAG_START : null,
+                        android.R.id.accessibilityActionDragStart, null, null, null);
+
+        /**
+         * Action to trigger a drop of the content being dragged.
+         * <p>
+         * This action is added to potential drop targets if the source started a drag with
+         * {@link #ACTION_DRAG_START}. In View, these targets are Views that accepted
+         * {@link android.view.DragEvent#ACTION_DRAG_STARTED} and have an
+         * {@link View.OnDragListener}.
+         * </p>
+         *
+         * @see AccessibilityEventCompat#CONTENT_CHANGE_TYPE_DRAG_DROPPED
+         */
+        @NonNull
+        public static final AccessibilityActionCompat ACTION_DRAG_DROP =
+                new AccessibilityActionCompat(Build.VERSION.SDK_INT >= 32
+                        ?  AccessibilityNodeInfo.AccessibilityAction.ACTION_DRAG_DROP : null,
+                        android.R.id.accessibilityActionDragDrop, null, null, null);
+
+        /**
+         * Action to cancel a drag.
+         * <p>
+         * This action is added to the source that started a drag with {@link #ACTION_DRAG_START}.
+         * </p>
+         *
+         * @see AccessibilityEventCompat#CONTENT_CHANGE_TYPE_DRAG_CANCELLED
+         */
+        @NonNull
+        public static final AccessibilityActionCompat ACTION_DRAG_CANCEL =
+                new AccessibilityActionCompat(Build.VERSION.SDK_INT >= 32
+                        ?  AccessibilityNodeInfo.AccessibilityAction.ACTION_DRAG_CANCEL : null,
+                        android.R.id.accessibilityActionDragCancel, null, null, null);
+
         final Object mAction;
         private final int mId;
         private final Class<? extends CommandArguments> mViewCommandArgumentClass;
@@ -1235,6 +1287,9 @@
     private static final String STATE_DESCRIPTION_KEY =
             "androidx.view.accessibility.AccessibilityNodeInfoCompat.STATE_DESCRIPTION_KEY";
 
+    private static final String UNIQUE_ID_KEY =
+            "androidx.view.accessibility.AccessibilityNodeInfoCompat.UNIQUE_ID_KEY";
+
     // These don't line up with the internal framework constants, since they are independent
     // and we might as well get all 32 bits of utility here.
     private static final int BOOLEAN_PROPERTY_SCREEN_READER_FOCUSABLE = 0x00000001;
@@ -2023,7 +2078,10 @@
      * @see android.view.accessibility.AccessibilityNodeInfo#ACTION_CLEAR_FOCUS
      * @see android.view.accessibility.AccessibilityNodeInfo#ACTION_SELECT
      * @see android.view.accessibility.AccessibilityNodeInfo#ACTION_CLEAR_SELECTION
+     *
+     * @deprecated Use {@link #getActionList()} instead.
      */
+    @Deprecated
     public int getActions() {
         return mInfo.getActions();
     }
@@ -2898,6 +2956,42 @@
     }
 
     /**
+     * Gets the unique id of this node.
+     *
+     * @return the unique id or null if android version smaller
+     * than 19.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    public @Nullable String getUniqueId() {
+        if (BuildCompat.isAtLeastT()) {
+            return mInfo.getUniqueId();
+        } else if (Build.VERSION.SDK_INT >= 19) {
+            return mInfo.getExtras().getString(UNIQUE_ID_KEY);
+        }
+        return null;
+    }
+
+    /**
+     * Sets the unique id of this node.
+     * <p>
+     *   <strong>Note:</strong> Cannot be called from an
+     *   {@link android.accessibilityservice.AccessibilityService}.
+     *   This class is made immutable before being delivered to an AccessibilityService.
+     * </p>
+     *
+     * @param uniqueId the unique id of this node.
+     * @throws IllegalStateException If called from an AccessibilityService.
+     */
+    @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+    public void setUniqueId(@Nullable String uniqueId) {
+        if (BuildCompat.isAtLeastT()) {
+            mInfo.setUniqueId(uniqueId);
+        } else if (Build.VERSION.SDK_INT >= 19) {
+            mInfo.getExtras().putString(UNIQUE_ID_KEY, uniqueId);
+        }
+    }
+
+    /**
      * Return an instance back to be reused.
      * <p>
      * <strong>Note:</strong> You must not touch the object after calling this function.
@@ -3106,6 +3200,23 @@
     }
 
     /**
+     * Gets the {@link android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo
+     * extra rendering info} if the node is meant to be refreshed with extra data
+     * to examine rendering related accessibility issues.
+     *
+     * @return The {@link android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo
+     * extra rendering info}.
+     */
+    @Nullable
+    public AccessibilityNodeInfo.ExtraRenderingInfo getExtraRenderingInfo() {
+        if (Build.VERSION.SDK_INT >= 33) {
+            return Api33Impl.getExtraRenderingInfo(mInfo);
+        } else {
+            return null;
+        }
+    }
+
+    /**
      * Gets the actions that can be performed on the node.
      *
      * @return A list of AccessibilityActions.
@@ -4213,6 +4324,7 @@
         builder.append("; text: ").append(getText());
         builder.append("; contentDescription: ").append(getContentDescription());
         builder.append("; viewId: ").append(getViewIdResourceName());
+        builder.append("; uniqueId: ").append(getUniqueId());
 
         builder.append("; checkable: ").append(isCheckable());
         builder.append("; checked: ").append(isChecked());
@@ -4348,8 +4460,27 @@
                 return "ACTION_PRESS_AND_HOLD";
             case android.R.id.accessibilityActionImeEnter:
                 return "ACTION_IME_ENTER";
+            case android.R.id.accessibilityActionDragStart:
+                return "ACTION_DRAG_START";
+            case android.R.id.accessibilityActionDragDrop:
+                return "ACTION_DRAG_DROP";
+            case android.R.id.accessibilityActionDragCancel:
+                return "ACTION_DRAG_CANCEL";
             default:
-                return"ACTION_UNKNOWN";
+                return "ACTION_UNKNOWN";
+        }
+    }
+
+    @RequiresApi(33)
+    private static class Api33Impl {
+        private Api33Impl() {
+            // This class is non instantiable.
+        }
+
+        @DoNotInline
+        public static AccessibilityNodeInfo.ExtraRenderingInfo getExtraRenderingInfo(
+                AccessibilityNodeInfo info) {
+            return info.getExtraRenderingInfo();
         }
     }
 }
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompat.java
index bc4a1d5..1b7003c 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompat.java
@@ -17,8 +17,10 @@
 package androidx.core.view.accessibility;
 
 import static android.os.Build.VERSION.SDK_INT;
+import static android.view.Display.DEFAULT_DISPLAY;
 
 import android.graphics.Rect;
+import android.graphics.Region;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.AccessibilityWindowInfo;
 
@@ -136,6 +138,19 @@
     }
 
     /**
+     * Check if the window is in picture-in-picture mode.
+     *
+     * @return {@code true} if the window is in picture-in-picture mode, {@code false} otherwise.
+     */
+    public boolean isInPictureInPictureMode() {
+        if (SDK_INT >= 33) {
+            return Api33Impl.isInPictureInPictureMode((AccessibilityWindowInfo) mInfo);
+        } else {
+            return false;
+        }
+    }
+
+    /**
      * Gets the parent window if such.
      *
      * @return The parent window.
@@ -163,7 +178,33 @@
     }
 
     /**
+     * Gets the touchable region of this window in the screen.
+     * <p>
+     * Compatibility:
+     * <ul>
+     *     <li>API &lt; 33: Gets the bounds of this window in the screen. </li>
+     *     <li>API &lt; 21: Does not operate. </li>
+     * </ul>
+     *
+     * @param outRegion The out window region.
+     */
+    public void getRegionInScreen(@NonNull Region outRegion) {
+        if (SDK_INT >= 33) {
+            Api33Impl.getRegionInScreen((AccessibilityWindowInfo) mInfo, outRegion);
+        } else if (SDK_INT >= 21) {
+            Rect outBounds = new Rect();
+            Api21Impl.getBoundsInScreen((AccessibilityWindowInfo) mInfo, outBounds);
+            outRegion.set(outBounds);
+        }
+    }
+
+    /**
      * Gets the bounds of this window in the screen.
+     * <p>
+     * Compatibility:
+     * <ul>
+     *   <li>API &lt; 21: Does not operate. </li>
+     * </ul>
      *
      * @param outBounds The out window bounds.
      */
@@ -243,6 +284,25 @@
     }
 
     /**
+     * Returns the ID of the display this window is on, for use with
+     * {@link android.hardware.display.DisplayManager#getDisplay(int)}.
+     * <p>
+     * Compatibility:
+     * <ul>
+     *   <li>Api &lt; 33: Will return {@link android.view.Display.DEFAULT_DISPLAY}.</li>
+     * </ul>
+     *
+     * @return the logical display id.
+     */
+    public int getDisplayId() {
+        if (SDK_INT >= 33) {
+            return Api33Impl.getDisplayId((AccessibilityWindowInfo) mInfo);
+        } else {
+            return DEFAULT_DISPLAY;
+        }
+    }
+
+    /**
      * Gets the title of the window.
      *
      * @return The title of the window, or the application label for the window if no title was
@@ -322,6 +382,18 @@
         }
     }
 
+    /**
+     * @return The unwrapped {@link android.view.accessibility.AccessibilityWindowInfo}.
+     */
+    @Nullable
+    public AccessibilityWindowInfo unwrap() {
+        if (SDK_INT >= 21) {
+            return (AccessibilityWindowInfo) mInfo;
+        } else {
+            return null;
+        }
+    }
+
     @Override
     public int hashCode() {
         return (mInfo == null) ? 0 : mInfo.hashCode();
@@ -476,4 +548,26 @@
             return info.getTitle();
         }
     }
+
+    @RequiresApi(33)
+    private static class Api33Impl {
+        private Api33Impl() {
+            // This class is non instantiable.
+        }
+
+        @DoNotInline
+        static int getDisplayId(AccessibilityWindowInfo info) {
+            return info.getDisplayId();
+        }
+
+        @DoNotInline
+        static void getRegionInScreen(AccessibilityWindowInfo info, Region outRegion) {
+            info.getRegionInScreen(outRegion);
+        }
+
+        @DoNotInline
+        static boolean isInPictureInPictureMode(AccessibilityWindowInfo info) {
+            return info.isInPictureInPictureMode();
+        }
+    }
 }
\ No newline at end of file
diff --git a/core/core/src/main/java/androidx/core/widget/TextViewCompat.java b/core/core/src/main/java/androidx/core/widget/TextViewCompat.java
index 7a6a655..dfb25e3 100644
--- a/core/core/src/main/java/androidx/core/widget/TextViewCompat.java
+++ b/core/core/src/main/java/androidx/core/widget/TextViewCompat.java
@@ -650,6 +650,7 @@
             }
         }
 
+        @SuppressWarnings("deprecation")
         private List<ResolveInfo> getSupportedActivities(final Context context,
                 final PackageManager packageManager) {
             final List<ResolveInfo> supportedActivities = new ArrayList<>();
diff --git a/cursoradapter/cursoradapter/lint-baseline.xml b/cursoradapter/cursoradapter/lint-baseline.xml
deleted file mode 100644
index bd47b27..0000000
--- a/cursoradapter/cursoradapter/lint-baseline.xml
+++ /dev/null
@@ -1,571 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CursorAdapter(Context context, Cursor c, boolean autoRequery) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CursorAdapter(Context context, Cursor c, boolean autoRequery) {"
-        errorLine2="                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CursorAdapter(Context context, Cursor c, int flags) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CursorAdapter(Context context, Cursor c, int flags) {"
-        errorLine2="                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Cursor getCursor() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract View newView(Context context, Cursor cursor, ViewGroup parent);"
-        errorLine2="                    ~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract View newView(Context context, Cursor cursor, ViewGroup parent);"
-        errorLine2="                                 ~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract View newView(Context context, Cursor cursor, ViewGroup parent);"
-        errorLine2="                                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract View newView(Context context, Cursor cursor, ViewGroup parent);"
-        errorLine2="                                                                 ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="                                ~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="                                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="                                                                ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract void bindView(View view, Context context, Cursor cursor);"
-        errorLine2="                                  ~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract void bindView(View view, Context context, Cursor cursor);"
-        errorLine2="                                             ~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public abstract void bindView(View view, Context context, Cursor cursor);"
-        errorLine2="                                                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void changeCursor(Cursor cursor) {"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Cursor swapCursor(Cursor newCursor) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Cursor swapCursor(Cursor newCursor) {"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CharSequence convertToString(Cursor cursor) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CharSequence convertToString(Cursor cursor) {"
-        errorLine2="                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Cursor runQueryOnBackgroundThread(CharSequence constraint) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Cursor runQueryOnBackgroundThread(CharSequence constraint) {"
-        errorLine2="                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public FilterQueryProvider getFilterQueryProvider() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setFilterQueryProvider(FilterQueryProvider filterQueryProvider) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ResourceCursorAdapter(Context context, int layout, Cursor c, int flags) {"
-        errorLine2="                                 ~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ResourceCursorAdapter(Context context, int layout, Cursor c, int flags) {"
-        errorLine2="                                                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="                        ~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="                                                        ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="                                ~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="                                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
-        errorLine2="                                                                ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    protected int[] mFrom;"
-        errorLine2="              ~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    protected int[] mTo;"
-        errorLine2="              ~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,"
-        errorLine2="                               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,"
-        errorLine2="                                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,"
-        errorLine2="                                                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            int[] to, int flags) {"
-        errorLine2="            ~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void bindView(View view, Context context, Cursor cursor) {"
-        errorLine2="                         ~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void bindView(View view, Context context, Cursor cursor) {"
-        errorLine2="                                    ~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void bindView(View view, Context context, Cursor cursor) {"
-        errorLine2="                                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public ViewBinder getViewBinder() {"
-        errorLine2="           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setViewBinder(ViewBinder viewBinder) {"
-        errorLine2="                              ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setViewImage(ImageView v, String value) {"
-        errorLine2="                             ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setViewImage(ImageView v, String value) {"
-        errorLine2="                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setViewText(TextView v, String text) {"
-        errorLine2="                            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setViewText(TextView v, String text) {"
-        errorLine2="                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CursorToStringConverter getCursorToStringConverter() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setCursorToStringConverter(CursorToStringConverter cursorToStringConverter) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CharSequence convertToString(Cursor cursor) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CharSequence convertToString(Cursor cursor) {"
-        errorLine2="                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Cursor swapCursor(Cursor newCursor) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Cursor swapCursor(Cursor newCursor) {"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void changeCursorAndColumns(Cursor c, String[] from, int[] to) {"
-        errorLine2="                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void changeCursorAndColumns(Cursor c, String[] from, int[] to) {"
-        errorLine2="                                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void changeCursorAndColumns(Cursor c, String[] from, int[] to) {"
-        errorLine2="                                                                ~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        boolean setViewValue(View view, Cursor cursor, int columnIndex);"
-        errorLine2="                             ~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        boolean setViewValue(View view, Cursor cursor, int columnIndex);"
-        errorLine2="                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        CharSequence convertToString(Cursor cursor);"
-        errorLine2="        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        CharSequence convertToString(Cursor cursor);"
-        errorLine2="                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
-    </issue>
-
-</issues>
diff --git a/customview/customview/lint-baseline.xml b/customview/customview/lint-baseline.xml
index 76fd846..2b64083 100644
--- a/customview/customview/lint-baseline.xml
+++ b/customview/customview/lint-baseline.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (7.1.0-beta02)" variant="all" version="7.1.0-beta02">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                              ~~~~~~">
         <location
@@ -12,7 +12,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public AccessibilityNodeProviderCompat getAccessibilityNodeProvider(View host) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -21,7 +21,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public AccessibilityNodeProviderCompat getAccessibilityNodeProvider(View host) {"
         errorLine2="                                                                        ~~~~">
         <location
@@ -30,7 +30,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {"
         errorLine2="                                               ~~~~">
         <location
@@ -39,7 +39,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~">
         <location
@@ -48,7 +48,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {"
         errorLine2="                                                  ~~~~">
         <location
@@ -57,7 +57,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {"
         errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -66,38 +66,11 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected abstract void getVisibleVirtualViews(List&lt;Integer> virtualViewIds);"
         errorLine2="                                                   ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/customview/widget/ExploreByTouchHelper.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void obtainBounds(T data, Rect outBounds);"
-        errorLine2="                                  ~~~~">
-        <location
-            file="src/main/java/androidx/customview/widget/FocusStrategy.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static ViewDragHelper create(@NonNull ViewGroup forParent, @NonNull Callback cb) {"
-        errorLine2="                  ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/customview/widget/ViewDragHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static ViewDragHelper create(@NonNull ViewGroup forParent, float sensitivity,"
-        errorLine2="                  ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/customview/widget/ViewDragHelper.java"/>
-    </issue>
-
 </issues>
diff --git a/datastore/datastore-multiprocess/lint-baseline.xml b/datastore/datastore-multiprocess/lint-baseline.xml
index b00c1cb..7b459a2 100644
--- a/datastore/datastore-multiprocess/lint-baseline.xml
+++ b/datastore/datastore-multiprocess/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index f8b0381..1799d05 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -8,97 +8,97 @@
 }
 
 dependencies {
-    docs("androidx.activity:activity:1.5.1")
-    docs("androidx.activity:activity-compose:1.5.1")
-    samples("androidx.activity:activity-compose-samples:1.5.1")
-    docs("androidx.activity:activity-ktx:1.5.1")
+    docs("androidx.activity:activity:1.6.0-alpha05")
+    docs("androidx.activity:activity-compose:1.6.0-alpha05")
+    samples("androidx.activity:activity-compose-samples:1.6.0-alpha03")
+    docs("androidx.activity:activity-ktx:1.6.0-alpha05")
     docs("androidx.ads:ads-identifier:1.0.0-alpha04")
     docs("androidx.ads:ads-identifier-provider:1.0.0-alpha04")
-    docs("androidx.annotation:annotation:1.4.0")
-    docs("androidx.annotation:annotation-experimental:1.2.0")
-    docs("androidx.appcompat:appcompat:1.5.0-beta01")
-    docs("androidx.appcompat:appcompat-resources:1.5.0-beta01")
-    docs("androidx.appsearch:appsearch:1.0.0-alpha04")
-    docs("androidx.appsearch:appsearch-ktx:1.0.0-alpha04")
-    docs("androidx.appsearch:appsearch-local-storage:1.0.0-alpha04")
-    docs("androidx.appsearch:appsearch-platform-storage:1.0.0-alpha04")
+    docs("androidx.annotation:annotation:1.5.0-alpha01")
+    docs("androidx.annotation:annotation-experimental:1.3.0-alpha01")
+    docs("androidx.appcompat:appcompat:1.6.0-alpha05")
+    docs("androidx.appcompat:appcompat-resources:1.6.0-alpha05")
+    docs("androidx.appsearch:appsearch:1.1.0-alpha01")
+    docs("androidx.appsearch:appsearch-ktx:1.1.0-alpha01")
+    docs("androidx.appsearch:appsearch-local-storage:1.1.0-alpha01")
+    docs("androidx.appsearch:appsearch-platform-storage:1.1.0-alpha01")
     docs("androidx.arch.core:core-common:2.1.0")
     docs("androidx.arch.core:core-runtime:2.1.0")
     docs("androidx.arch.core:core-testing:2.1.0")
     docs("androidx.asynclayoutinflater:asynclayoutinflater:1.0.0")
     docs("androidx.autofill:autofill:1.2.0-beta01")
-    docs("androidx.benchmark:benchmark-common:1.1.0")
-    docs("androidx.benchmark:benchmark-junit4:1.1.0")
-    docs("androidx.benchmark:benchmark-macro:1.1.0")
-    docs("androidx.benchmark:benchmark-macro-junit4:1.1.0")
+    docs("androidx.benchmark:benchmark-common:1.2.0-alpha01")
+    docs("androidx.benchmark:benchmark-junit4:1.2.0-alpha01")
+    docs("androidx.benchmark:benchmark-macro:1.2.0-alpha01")
+    docs("androidx.benchmark:benchmark-macro-junit4:1.2.0-alpha01")
     docs("androidx.biometric:biometric:1.2.0-alpha04")
     docs("androidx.biometric:biometric-ktx:1.2.0-alpha04")
     samples("androidx.biometric:biometric-ktx-samples:1.2.0-alpha04")
     docs("androidx.browser:browser:1.4.0")
-    docs("androidx.camera:camera-camera2:1.2.0-alpha02")
-    docs("androidx.camera:camera-core:1.2.0-alpha02")
-    docs("androidx.camera:camera-extensions:1.2.0-alpha02")
+    docs("androidx.camera:camera-camera2:1.2.0-alpha04")
+    docs("androidx.camera:camera-core:1.2.0-alpha04")
+    docs("androidx.camera:camera-extensions:1.2.0-alpha04")
     stubs(fileTree(dir: "../camera/camera-extensions-stub", include: ["camera-extensions-stub.jar"]))
-    docs("androidx.camera:camera-lifecycle:1.2.0-alpha02")
-    docs("androidx.camera:camera-mlkit-vision:1.2.0-alpha03")
+    docs("androidx.camera:camera-lifecycle:1.2.0-alpha04")
+    docs("androidx.camera:camera-mlkit-vision:1.2.0-alpha04")
     docs("androidx.camera:camera-previewview:1.1.0-beta02")
-    docs("androidx.camera:camera-video:1.2.0-alpha01")
-    docs("androidx.camera:camera-view:1.2.0-alpha01")
-    docs("androidx.car.app:app:1.2.0-rc01")
-    docs("androidx.car.app:app-automotive:1.2.0-rc01")
-    docs("androidx.car.app:app-projected:1.2.0-rc01")
-    docs("androidx.car.app:app-testing:1.2.0-rc01")
+    docs("androidx.camera:camera-video:1.2.0-alpha04")
+    docs("androidx.camera:camera-view:1.2.0-alpha04")
+    docs("androidx.car.app:app:1.3.0-alpha01")
+    docs("androidx.car.app:app-automotive:1.3.0-alpha01")
+    docs("androidx.car.app:app-projected:1.3.0-alpha01")
+    docs("androidx.car.app:app-testing:1.3.0-alpha01")
     docs("androidx.cardview:cardview:1.0.0")
-    docs("androidx.collection:collection:1.3.0-alpha01")
-    docs("androidx.collection:collection-ktx:1.3.0-alpha01")
-    docs("androidx.compose.animation:animation:1.3.0-alpha01")
-    docs("androidx.compose.animation:animation-core:1.3.0-alpha01")
-    docs("androidx.compose.animation:animation-graphics:1.3.0-alpha01")
-    samples("androidx.compose.animation:animation-samples:1.3.0-alpha01")
-    samples("androidx.compose.animation:animation-core-samples:1.3.0-alpha01")
-    samples("androidx.compose.animation:animation-graphics-samples:1.3.0-alpha01")
-    docs("androidx.compose.foundation:foundation:1.3.0-alpha01")
-    docs("androidx.compose.foundation:foundation-layout:1.3.0-alpha01")
-    samples("androidx.compose.foundation:foundation-layout-samples:1.3.0-alpha01")
-    samples("androidx.compose.foundation:foundation-samples:1.3.0-alpha01")
-    docs("androidx.compose.material3:material3:1.0.0-alpha13")
-    samples("androidx.compose.material3:material3-samples:1.0.0-alpha13")
-    docs("androidx.compose.material3:material3-window-size-class:1.0.0-alpha13")
-    samples("androidx.compose.material3:material3-window-size-class-samples:1.0.0-alpha13")
-    docs("androidx.compose.material:material:1.3.0-alpha01")
-    docs("androidx.compose.material:material-icons-core:1.3.0-alpha01")
-    samples("androidx.compose.material:material-icons-core-samples:1.3.0-alpha01")
-    docs("androidx.compose.material:material-ripple:1.3.0-alpha01")
-    samples("androidx.compose.material:material-samples:1.3.0-alpha01")
-    docs("androidx.compose.runtime:runtime:1.3.0-alpha01")
-    docs("androidx.compose.runtime:runtime-livedata:1.3.0-alpha01")
-    samples("androidx.compose.runtime:runtime-livedata-samples:1.3.0-alpha01")
-    docs("androidx.compose.runtime:runtime-rxjava2:1.3.0-alpha01")
-    samples("androidx.compose.runtime:runtime-rxjava2-samples:1.3.0-alpha01")
-    docs("androidx.compose.runtime:runtime-rxjava3:1.3.0-alpha01")
-    samples("androidx.compose.runtime:runtime-rxjava3-samples:1.3.0-alpha01")
-    docs("androidx.compose.runtime:runtime-saveable:1.3.0-alpha01")
-    samples("androidx.compose.runtime:runtime-saveable-samples:1.3.0-alpha01")
-    samples("androidx.compose.runtime:runtime-samples:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-geometry:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-graphics:1.3.0-alpha01")
-    samples("androidx.compose.ui:ui-graphics-samples:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-test:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-test-junit4:1.3.0-alpha01")
-    samples("androidx.compose.ui:ui-test-samples:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-text:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-text-google-fonts:1.3.0-alpha01")
-    samples("androidx.compose.ui:ui-text-samples:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-tooling:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-tooling-data:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-tooling-preview:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-unit:1.3.0-alpha01")
-    samples("androidx.compose.ui:ui-unit-samples:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-util:1.3.0-alpha01")
-    docs("androidx.compose.ui:ui-viewbinding:1.3.0-alpha01")
-    samples("androidx.compose.ui:ui-viewbinding-samples:1.3.0-alpha01")
-    samples("androidx.compose.ui:ui-samples:1.3.0-alpha01")
+    docs("androidx.collection:collection:1.3.0-alpha02")
+    docs("androidx.collection:collection-ktx:1.3.0-alpha02")
+    docs("androidx.compose.animation:animation:1.3.0-alpha02")
+    docs("androidx.compose.animation:animation-core:1.3.0-alpha02")
+    docs("androidx.compose.animation:animation-graphics:1.3.0-alpha02")
+    samples("androidx.compose.animation:animation-samples:1.3.0-alpha02")
+    samples("androidx.compose.animation:animation-core-samples:1.3.0-alpha02")
+    samples("androidx.compose.animation:animation-graphics-samples:1.3.0-alpha02")
+    docs("androidx.compose.foundation:foundation:1.3.0-alpha02")
+    docs("androidx.compose.foundation:foundation-layout:1.3.0-alpha02")
+    samples("androidx.compose.foundation:foundation-layout-samples:1.3.0-alpha02")
+    samples("androidx.compose.foundation:foundation-samples:1.3.0-alpha02")
+    docs("androidx.compose.material3:material3:1.0.0-alpha15")
+    samples("androidx.compose.material3:material3-samples:1.0.0-alpha15")
+    docs("androidx.compose.material3:material3-window-size-class:1.0.0-alpha15")
+    samples("androidx.compose.material3:material3-window-size-class-samples:1.0.0-alpha15")
+    docs("androidx.compose.material:material:1.3.0-alpha02")
+    docs("androidx.compose.material:material-icons-core:1.3.0-alpha02")
+    samples("androidx.compose.material:material-icons-core-samples:1.3.0-alpha02")
+    docs("androidx.compose.material:material-ripple:1.3.0-alpha02")
+    samples("androidx.compose.material:material-samples:1.3.0-alpha02")
+    docs("androidx.compose.runtime:runtime:1.3.0-alpha02")
+    docs("androidx.compose.runtime:runtime-livedata:1.3.0-alpha02")
+    samples("androidx.compose.runtime:runtime-livedata-samples:1.3.0-alpha02")
+    docs("androidx.compose.runtime:runtime-rxjava2:1.3.0-alpha02")
+    samples("androidx.compose.runtime:runtime-rxjava2-samples:1.3.0-alpha02")
+    docs("androidx.compose.runtime:runtime-rxjava3:1.3.0-alpha02")
+    samples("androidx.compose.runtime:runtime-rxjava3-samples:1.3.0-alpha02")
+    docs("androidx.compose.runtime:runtime-saveable:1.3.0-alpha02")
+    samples("androidx.compose.runtime:runtime-saveable-samples:1.3.0-alpha02")
+    samples("androidx.compose.runtime:runtime-samples:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-geometry:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-graphics:1.3.0-alpha02")
+    samples("androidx.compose.ui:ui-graphics-samples:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-test:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-test-junit4:1.3.0-alpha02")
+    samples("androidx.compose.ui:ui-test-samples:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-text:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-text-google-fonts:1.3.0-alpha02")
+    samples("androidx.compose.ui:ui-text-samples:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-tooling:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-tooling-data:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-tooling-preview:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-unit:1.3.0-alpha02")
+    samples("androidx.compose.ui:ui-unit-samples:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-util:1.3.0-alpha02")
+    docs("androidx.compose.ui:ui-viewbinding:1.3.0-alpha02")
+    samples("androidx.compose.ui:ui-viewbinding-samples:1.3.0-alpha02")
+    samples("androidx.compose.ui:ui-samples:1.3.0-alpha02")
     docs("androidx.concurrent:concurrent-futures:1.1.0")
     docs("androidx.concurrent:concurrent-futures-ktx:1.1.0")
     docs("androidx.contentpager:contentpager:1.0.0")
@@ -111,9 +111,9 @@
     docs("androidx.core:core-role:1.1.0-rc01")
     docs("androidx.core:core-animation:1.0.0-beta01")
     docs("androidx.core:core-animation-testing:1.0.0-alpha02")
-    docs("androidx.core:core:1.8.0")
-    docs("androidx.core:core-ktx:1.8.0")
-    docs("androidx.core:core-splashscreen:1.0.0-rc01")
+    docs("androidx.core:core:1.9.0-alpha05")
+    docs("androidx.core:core-ktx:1.9.0-alpha05")
+    docs("androidx.core:core-splashscreen:1.0.0")
     docs("androidx.cursoradapter:cursoradapter:1.0.0")
     docs("androidx.customview:customview:1.2.0-alpha01")
     docs("androidx.customview:customview-poolingcontainer:1.0.0-rc01")
@@ -130,25 +130,26 @@
     docs("androidx.drawerlayout:drawerlayout:1.1.1")
     docs("androidx.dynamicanimation:dynamicanimation:1.1.0-alpha02")
     docs("androidx.dynamicanimation:dynamicanimation-ktx:1.0.0-alpha03")
-    docs("androidx.emoji2:emoji2:1.2.0-beta01")
-    docs("androidx.emoji2:emoji2-bundled:1.2.0-beta01")
-    docs("androidx.emoji2:emoji2-views:1.2.0-beta01")
-    docs("androidx.emoji2:emoji2-views-helper:1.2.0-beta01")
+    docs("androidx.emoji2:emoji2:1.2.0-rc01")
+    docs("androidx.emoji2:emoji2-bundled:1.2.0-rc01")
+    docs("androidx.emoji2:emoji2-views:1.2.0-rc01")
+    docs("androidx.emoji2:emoji2-views-helper:1.2.0-rc01")
     docs("androidx.emoji:emoji:1.2.0-alpha03")
     docs("androidx.emoji:emoji-appcompat:1.2.0-alpha03")
     docs("androidx.emoji:emoji-bundled:1.2.0-alpha03")
     docs("androidx.enterprise:enterprise-feedback:1.1.0")
     docs("androidx.enterprise:enterprise-feedback-testing:1.1.0")
     docs("androidx.exifinterface:exifinterface:1.3.3")
-    docs("androidx.fragment:fragment:1.5.1")
-    docs("androidx.fragment:fragment-ktx:1.5.1")
-    docs("androidx.fragment:fragment-testing:1.5.1")
+    docs("androidx.fragment:fragment:1.6.0-alpha01")
+    docs("androidx.fragment:fragment-ktx:1.6.0-alpha01")
+    docs("androidx.fragment:fragment-testing:1.6.0-alpha01")
     docs("androidx.glance:glance:1.0.0-alpha03")
     docs("androidx.glance:glance-appwidget:1.0.0-alpha03")
     docs("androidx.glance:glance-appwidget-proto:1.0.0-alpha03")
     docs("androidx.glance:glance-wear-tiles:1.0.0-alpha03")
     docs("androidx.gridlayout:gridlayout:1.0.0")
-    docs("androidx.health:health-connect-client:1.0.0-alpha02")
+    docs("androidx.health:health-connect-client:1.0.0-alpha03")
+    samples("androidx.health:health-connect-client-samples:1.0.0-alpha03")
     docs("androidx.health:health-services-client:1.0.0-alpha03")
     docs("androidx.heifwriter:heifwriter:1.1.0-alpha01")
     docs("androidx.hilt:hilt-common:1.0.0-beta01")
@@ -191,22 +192,22 @@
     docs("androidx.media2:media2-session:1.2.1")
     docs("androidx.media2:media2-widget:1.2.1")
     docs("androidx.media:media:1.6.0")
-    docs("androidx.mediarouter:mediarouter:1.3.0")
-    docs("androidx.mediarouter:mediarouter-testing:1.3.0")
-    docs("androidx.metrics:metrics-performance:1.0.0-alpha02")
-    docs("androidx.navigation:navigation-common:2.5.0")
-    docs("androidx.navigation:navigation-common-ktx:2.5.0")
-    docs("androidx.navigation:navigation-compose:2.5.0")
-    samples("androidx.navigation:navigation-compose-samples:2.5.0")
-    docs("androidx.navigation:navigation-dynamic-features-fragment:2.5.0")
-    docs("androidx.navigation:navigation-dynamic-features-runtime:2.5.0")
-    docs("androidx.navigation:navigation-fragment:2.5.0")
-    docs("androidx.navigation:navigation-fragment-ktx:2.5.0")
-    docs("androidx.navigation:navigation-runtime:2.5.0")
-    docs("androidx.navigation:navigation-runtime-ktx:2.5.0")
-    docs("androidx.navigation:navigation-testing:2.5.0")
-    docs("androidx.navigation:navigation-ui:2.5.0")
-    docs("androidx.navigation:navigation-ui-ktx:2.5.0")
+    docs("androidx.mediarouter:mediarouter:1.3.1")
+    docs("androidx.mediarouter:mediarouter-testing:1.3.1")
+    docs("androidx.metrics:metrics-performance:1.0.0-alpha03")
+    docs("androidx.navigation:navigation-common:2.5.1")
+    docs("androidx.navigation:navigation-common-ktx:2.5.1")
+    docs("androidx.navigation:navigation-compose:2.5.1")
+    samples("androidx.navigation:navigation-compose-samples:2.5.1")
+    docs("androidx.navigation:navigation-dynamic-features-fragment:2.5.1")
+    docs("androidx.navigation:navigation-dynamic-features-runtime:2.5.1")
+    docs("androidx.navigation:navigation-fragment:2.5.1")
+    docs("androidx.navigation:navigation-fragment-ktx:2.5.1")
+    docs("androidx.navigation:navigation-runtime:2.5.1")
+    docs("androidx.navigation:navigation-runtime-ktx:2.5.1")
+    docs("androidx.navigation:navigation-testing:2.5.1")
+    docs("androidx.navigation:navigation-ui:2.5.1")
+    docs("androidx.navigation:navigation-ui-ktx:2.5.1")
     docs("androidx.paging:paging-common:3.2.0-alpha01")
     docs("androidx.paging:paging-common-ktx:3.2.0-alpha01")
     docs("androidx.paging:paging-compose:1.0.0-alpha15")
@@ -250,7 +251,7 @@
     docs("androidx.security:security-crypto:1.1.0-alpha03")
     docs("androidx.security:security-crypto-ktx:1.1.0-alpha02")
     docs("androidx.security:security-identity-credential:1.0.0-alpha03")
-    docs("androidx.sharetarget:sharetarget:1.2.0-rc01")
+    docs("androidx.sharetarget:sharetarget:1.2.0-rc02")
     docs("androidx.slice:slice-builders:1.1.0-alpha02")
     docs("androidx.slice:slice-builders-ktx:1.0.0-alpha08")
     docs("androidx.slice:slice-core:1.1.0-alpha02")
@@ -264,6 +265,8 @@
     docs("androidx.textclassifier:textclassifier:1.0.0-alpha04")
     docs("androidx.tracing:tracing:1.1.0-rc01")
     docs("androidx.tracing:tracing-ktx:1.1.0-rc01")
+    docs("androidx.tracing:tracing-perfetto:1.0.0-alpha01")
+    docs("androidx.tracing:tracing-perfetto-common:1.0.0-alpha01")
     docs("androidx.transition:transition:1.4.1")
     docs("androidx.transition:transition-ktx:1.4.1")
     docs("androidx.tvprovider:tvprovider:1.1.0-alpha01")
@@ -273,17 +276,17 @@
     docs("androidx.versionedparcelable:versionedparcelable:1.1.1")
     docs("androidx.viewpager2:viewpager2:1.1.0-beta01")
     docs("androidx.viewpager:viewpager:1.1.0-alpha01")
-    docs("androidx.wear.compose:compose-foundation:1.1.0-alpha01")
-    samples("androidx.wear.compose:compose-foundation-samples:1.1.0-alpha01")
-    docs("androidx.wear.compose:compose-material:1.1.0-alpha01")
-    samples("androidx.wear.compose:compose-material-samples:1.1.0-alpha01")
-    docs("androidx.wear.compose:compose-navigation:1.1.0-alpha01")
-    samples("androidx.wear.compose:compose-navigation-samples:1.1.0-alpha01")
-    docs("androidx.wear.tiles:tiles:1.1.0-alpha09")
-    docs("androidx.wear.tiles:tiles-material:1.1.0-alpha09")
-    docs("androidx.wear.tiles:tiles-proto:1.1.0-alpha09")
-    docs("androidx.wear.tiles:tiles-renderer:1.1.0-alpha09")
-    docs("androidx.wear.tiles:tiles-testing:1.1.0-alpha09")
+    docs("androidx.wear.compose:compose-foundation:1.1.0-alpha02")
+    samples("androidx.wear.compose:compose-foundation-samples:1.1.0-alpha02")
+    docs("androidx.wear.compose:compose-material:1.1.0-alpha02")
+    samples("androidx.wear.compose:compose-material-samples:1.1.0-alpha02")
+    docs("androidx.wear.compose:compose-navigation:1.1.0-alpha02")
+    samples("androidx.wear.compose:compose-navigation-samples:1.1.0-alpha02")
+    docs("androidx.wear.tiles:tiles:1.1.0-beta01")
+    docs("androidx.wear.tiles:tiles-material:1.1.0-beta01")
+    docs("androidx.wear.tiles:tiles-proto:1.1.0-beta01")
+    docs("androidx.wear.tiles:tiles-renderer:1.1.0-beta01")
+    docs("androidx.wear.tiles:tiles-testing:1.1.0-beta01")
     docs("androidx.wear.watchface:watchface:1.1.0")
     docs("androidx.wear.watchface:watchface-client:1.1.0")
     docs("androidx.wear.watchface:watchface-client-guava:1.1.0")
@@ -309,13 +312,13 @@
     samples("androidx.wear:wear-input-samples:1.2.0-alpha01")
     docs("androidx.wear:wear-input-testing:1.2.0-alpha02")
     docs("androidx.webkit:webkit:1.5.0-beta01")
-    docs("androidx.window:window:1.1.0-alpha02")
+    docs("androidx.window:window:1.1.0-alpha03")
     stubs(fileTree(dir: "../window/stubs/", include: ["window-sidecar-release-0.1.0-alpha01.aar"]))
     stubs("androidx.window:window-extensions:1.0.0-alpha01")
-    docs("androidx.window:window-java:1.1.0-alpha02")
-    docs("androidx.window:window-rxjava2:1.1.0-alpha02")
-    docs("androidx.window:window-rxjava3:1.1.0-alpha02")
-    docs("androidx.window:window-testing:1.1.0-alpha02")
+    docs("androidx.window:window-java:1.1.0-alpha03")
+    docs("androidx.window:window-rxjava2:1.1.0-alpha03")
+    docs("androidx.window:window-rxjava3:1.1.0-alpha03")
+    docs("androidx.window:window-testing:1.1.0-alpha03")
     docs("androidx.work:work-gcm:2.8.0-alpha02")
     docs("androidx.work:work-multiprocess:2.8.0-alpha02")
     docs("androidx.work:work-runtime:2.8.0-alpha02")
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index ba9f1b5..ffc1efc 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -156,6 +156,7 @@
     docs(project(":glance:glance"))
     docs(project(":glance:glance-appwidget"))
     docs(project(":glance:glance-wear-tiles"))
+    docs(project(":graphics:graphics-core"))
     docs(project(":gridlayout:gridlayout"))
     docs(project(":health:health-connect-client"))
     samples(project(":health:health-connect-client-samples"))
diff --git a/docs/api_guidelines.md b/docs/api_guidelines.md
index bae8cf7..8fb85d5 100644
--- a/docs/api_guidelines.md
+++ b/docs/api_guidelines.md
@@ -40,7 +40,7 @@
 name `:core:core-role` and directory `/core/core-role`.
 
 New modules in androidx can be created using the
-[project creator script](#module-creator).
+[project creator script](#module-creation).
 
 NOTE Modules for OEM-implemented shared libraries (also known as extensions or
 sidecars) that ship on-device and are referenced via the `<uses-library>` tag
@@ -97,6 +97,13 @@
 ./create_project.py androidx.foo foo-bar
 ```
 
+If you are creating an unpublished module such as an integration test app with \
+the project creator script, it may not make sense to follow the same naming \
+conventions as published libraries. In this situation it is safe to comment out
+\
+the `artifact_id` validation from the script or rename the module after it has \
+been created.
+
 If you see an error message `No module named 'toml'` try the following steps.
 
 *   Install necessary tools if they are not already installed
@@ -108,7 +115,7 @@
     `androidx_project_creator/bin/pip3 install toml`
 *   Run the project creator script from your virtual env with
     `androidx_project_creator/bin/python3
-    ./development/project-creator/create_project.py androidx.foo foo-bar`
+    ../../development/project-creator/create_project.py androidx.foo foo-bar`
 *   Delete your virtual env with `rm -rf ./androidx-project_creator`
     *   virtualenv will automatically .gitignore itself, but you may want to to
         remove it anyway.
@@ -567,6 +574,55 @@
     *   See the [sample](#wrapper-sample) for an example of interacting with a
         method that was added in SDK level 23.
 
+### Safe super. invocation {#safe-super-calls}
+
+When to use?
+
+*   When invoking `method.superMethodIntroducedSinceMinSdk()`
+
+Implementation requirements
+
+*   Class must be a *non-static* **inner class** (captures `this` pointer)
+*   Class may not be exposed in public API
+
+This should only be used when calling `super` methods that will not verify (such
+as when overriding a new method to provide back compat).
+
+Super calls is not available in a `static` context in Java. It can however be
+called from an inner class.
+
+#### Sample {#safe-super-calls-sample}
+
+```java
+class AppCompatTextView : TextView {
+
+  @Nullable
+  SuperCaller mSuperCaller = null;
+
+  @Override
+  int getPropertyFromApi99() {
+  if (Build.VERSION.SDK_INT > 99) {
+    getSuperCaller().getPropertyFromApi99)();
+  }
+
+  @NonNull
+  @RequiresApi(99)
+  SuperCaller getSuperCaller() {
+    if (mSuperCaller == null) {
+      mSuperCaller = new SuperCaller();
+    }
+    return mSuperCaller;
+  }
+
+  @RequiresApi(99)
+  class SuperCaller {
+    int getPropertyFromApi99() {
+      return AppCompatTextView.super.getPropertyFromApi99();
+    }
+  }
+}
+```
+
 ### Standalone (ex. [ArraySet](https://developer.android.com/reference/android/support/v4/util/ArraySet.html), [Fragment](https://developer.android.com/reference/android/support/v4/app/Fragment.html)) {#standalone}
 
 When to use?
@@ -2055,6 +2111,37 @@
 
 ### [Do not Mock, AndroidX](do_not_mock.md)
 
+### Validating class verification fixes
+
+To verify class verification, the best way is to look for `adb` output during
+install time.
+
+You can generate class verification logs from test APKs. Simply call the
+class/method that should generate a class verification failure in a test.
+
+The test APK will generate class verification logs on install.
+
+```bash
+# Enable ART logging (requires root). Note the 2 pairs of quotes!
+adb root
+adb shell setprop dalvik.vm.dex2oat-flags '"--runtime-arg -verbose:verifier"'
+
+# Restart Android services to pick up the settings
+adb shell stop && adb shell start
+
+# Optional: clear logs which aren't relevant
+adb logcat -c
+
+# Install the app and check for ART logs
+# This line is what triggers log lines, and can be repeated
+adb install -d -r someApk.apk
+
+# it's useful to run this _during_ install in another shell
+adb logcat | grep 'dex2oat'
+...
+... I dex2oat : Soft verification failures in
+```
+
 ## Android Lint Guidelines
 
 ### Suppression vs Baselines
diff --git a/docs/onboarding.md b/docs/onboarding.md
index 34b7baf..681b6c1 100644
--- a/docs/onboarding.md
+++ b/docs/onboarding.md
@@ -110,7 +110,7 @@
 
 ```shell
 mkdir androidx-main && cd androidx-main
-repo init -u https://android.googlesource.com/platform/manifest \
+repo init -u sso://android/platform/manifest \
     -b androidx-main --partial-clone --clone-filter=blob:limit=10M
 repo sync -c -j8
 ```
@@ -860,11 +860,10 @@
 
 or on our slightly-more-convenient [androidx.dev](https://androidx.dev) site:
 
-`https://androidx.dev/snapshots/builds/<build-id>/artifacts/repository` for a
-specific build ID
+`https://androidx.dev/snapshots/builds/<build-id>/artifacts` for a specific
+build ID
 
-`https://androidx.dev/snapshots/builds/latest/artifacts/repository` for
-tip-of-tree snapshots
+`https://androidx.dev/snapshots/latest/artifacts` for tip-of-tree snapshots
 
 ### Obtaining a build ID
 
diff --git a/docs/versioning.md b/docs/versioning.md
index b54025f..a55952f 100644
--- a/docs/versioning.md
+++ b/docs/versioning.md
@@ -8,11 +8,20 @@
 
 ## Semantic versioning
 
-Artifacts follow strict [semantic versioning](http://semver.org) with an added
-inter-version sequence of pre-release revisions. The version for a finalized
-release will follow the format `<major>.<minor>.<bugfix>` with an optional
-`-<alpha|beta|rc><nn>` suffix. Internal or nightly releases (via
-[androidx.dev](http://androidx.dev)) should use the `-SNAPSHOT` suffix.
+Artifacts follow strict [semantic versioning](http://semver.org) for binary
+compatibility with an added inter-version sequence of pre-release revisions. The
+version for a finalized release artifact will follow the format
+`<major>.<minor>.<bugfix>` with an optional `-<alpha|beta|rc><nn>` suffix.
+Internal or nightly releases (via [androidx.dev](http://androidx.dev)) use the
+`-SNAPSHOT` suffix.
+
+### Source compatibility
+
+Libraries are encouraged -- but not required -- to preserve source compatibility
+across minor versions. Strictly requiring source compatibility would require
+major version bumps when implementing quality-of-life improvements such as
+nullability annotations or generics, which would be
+[disruptive to the library ecosystem](#major-implications).
 
 ### Notation
 
@@ -58,7 +67,7 @@
 #### When to increment {#major-when}
 
 An artifact *must* increment its major version number in response to breaking
-changes in binary or behavioral compatibility within the library itself _or_ in
+changes in binary or behavioral compatibility within the library itself *or* in
 response to breaking changes within a dependency.
 
 For example, if an artifact updates a SemVer-type dependency from `1.0.0` to
@@ -67,12 +76,12 @@
 An artifact *may in rare cases* increment its major version number to indicate
 an important but non-breaking change in the library. Note, however, that the
 SemVer implications of incrementing the major version are the same as a breaking
-change -- dependent projects _must_ assume the major version change is breaking
+change -- dependent projects *must* assume the major version change is breaking
 and update their dependency specifications.
 
 #### Ecosystem implications {#major-implications}
 
-When an artifact increases its major version, _all_ artifacts that depended on
+When an artifact increases its major version, *all* artifacts that depended on
 the previous major version are no longer considered compatible and must
 explicitly migrate to depend on the new major version.
 
@@ -140,13 +149,16 @@
 
 Snapshot releases are whatever exists at tip-of-tree. They are only subject to
 the constraints placed on the average commit. Depending on when it's cut, a
-snapshot may even be binary-identical to an alpha, beta, or stable release.
+snapshot may even be binary-identical to an `alpha`, `beta`, or `stable`
+release.
+
+### Tooling guarantees
 
 Versioning policies are enforced by the following Gradle tasks:
 
 `checkApi`: ensures that changes to public API are intentional and tracked,
-asking the developer to explicitly run updateApi (see below) if any changes are
-detected
+asking the developer to explicitly run `updateApi` (see below) if any changes
+are detected
 
 `checkApiRelease`: verifies that API changes between previously released and
 currently under-development versions conform to semantic versioning guarantees
@@ -162,11 +174,11 @@
 
 ## Picking the right version {#picking-the-right-version}
 
-AndroidX follows [Strict Semantic Versioning](https://semver.org), which means
-that the version code is strongly tied to the API surface. A full version
-consists of revision numbers for major, minor, and bugfix as well as a
-pre-release stage and revision. Correct versioning is, for the most part,
-automatically enforced; however, please check for the following:
+Libraries follow [semantic versioning](https://semver.org), which means that the
+version code is strongly tied to the API surface. A full version consists of
+revision numbers for major, minor, and bugfix as well as a pre-release stage and
+revision. Correct versioning is, for the most part, automatically enforced;
+however, please check for the following:
 
 ### Initial version {#initial-version}
 
@@ -192,8 +204,8 @@
 CL to update the stage or revision when they are ready to perform a public
 release.
 
-Libraries are expected to allow >= 2 weeks per pre-release stage. This 'soaking
-period' gives developers time to try/use each version, find bugs, and ensure a
+Libraries are expected to allow >= 2 weeks per pre-release stage. This "soaking
+period" gives developers time to try each version, find bugs, and ensure a
 quality stable release. Therefore, at minimum:
 
 -   An `alpha` version must be publically available for 2 weeks before releasing
@@ -219,6 +231,8 @@
         `publish=true` or create an `api` directory) and remain enabled
     *   May add/remove APIs within `alpha` cycle, but deprecate/remove cycle is
         strongly recommended.
+    *   May use [experimental APIs](api_guidelines.md#experimental-api) across
+        same-version group boundaries
 *   Testing
     *   All changes **should** be accompanied by a `Test:` stanza
     *   All pre-submit and post-submit tests are passing
@@ -248,14 +262,17 @@
 *   API surface
     *   Entire API surface has been reviewed by API Council
     *   All APIs from alpha undergoing deprecate/remove cycle must be removed
-        *   The final removal of a `@Deprecated` API must occur in alpha, not in
-            Beta.
+        *   The final removal of a `@Deprecated` API should occur in alpha, not
+            in beta
+    *   Must not use [experimental APIs](api_guidelines.md#experimental-api)
+        across same-version group boundaries
 *   Testing
     *   All public APIs are tested
     *   All pre-submit and post-submit tests are enabled (e.g. all suppressions
         are removed) and passing
     *   Your library passes `./gradlew library:checkReleaseReady`
-*   No experimental features (e.g. `@UseExperimental`) may be used
+*   Use of experimental Kotlin features (e.g. `@OptIn`) must be audited for
+    stability
 *   All dependencies are `beta`, `rc`, or stable
 *   Be able to answer the question "How will developers test their apps against
     your library?"
@@ -271,9 +288,9 @@
         *   Must go through the full `@Deprecate` and hard-removal cycle in
             separate `beta` releases for any exception-approved API removals or
             changes
-    *   May not remove `@Experimental` from experimental APIs, as this would
-        amount to an API addition
-    *   **May** add new `@Experimental` APIs and change existing `@Experimental`
+    *   May not remove `@RequiresOptIn` annotations from experimental APIs, as
+        this would amount to an API addition
+    *   **May** add new `@RequiresOptIn` APIs and change existing experimental
         APIs
 
 ### RC {#rc}
@@ -288,7 +305,7 @@
 *   Release branch, e.g. `androidx-<group_id>-release`, is created
 *   API surface
     *   Any API changes from `beta` cycle are reviewed by API Council
-*   No **known** P0 or P1 (ship-blocking) issues
+*   No **known** `P0` or `P1` (ship-blocking) issues
 *   All dependencies are `rc` or stable
 
 #### Within the `rcXX` cycle
@@ -337,7 +354,6 @@
     need to update your version in `androidx-main` to `alpha01` of the next
     minor (or major) version.
 
-
 ### How to update your version
 
 1.  Update the version listed in `frameworks/support/libraryversions.toml`
diff --git a/draganddrop/draganddrop/lint-baseline.xml b/draganddrop/draganddrop/lint-baseline.xml
deleted file mode 100644
index 8dae4d20..0000000
--- a/draganddrop/draganddrop/lint-baseline.xml
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_startDrag_hasInactiveHighlight() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_endDrag_hasNoHighlight() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_acceptDragsWithLocalState_default_hasNoHighlight() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_acceptDragsWithLocalState_false_hasNoHighlight() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_acceptDragsWithLocalState_true_hasHighlight() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_wrongMimeTypeImage_hasNoHighlight() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_wrongMimeTypeText_hasNoHighlight() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_enterAndExit_togglesHighlight() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_dragToInnerNestedView_retainsActiveHighlight()"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_usesColorFromSystemAsDefault() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_usesDefaultCornerRadius() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_usesCornerRadius() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_drop_callsListener() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    public void testDropHelper_nonEditText_drop_callsListener() throws Exception {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
-    </issue>
-
-</issues>
diff --git a/drawerlayout/drawerlayout/build.gradle b/drawerlayout/drawerlayout/build.gradle
index 4e5ebdd..8bf6fa0 100644
--- a/drawerlayout/drawerlayout/build.gradle
+++ b/drawerlayout/drawerlayout/build.gradle
@@ -3,18 +3,22 @@
 plugins {
     id("AndroidXPlugin")
     id("com.android.library")
+    id("kotlin-android")
 }
 
 dependencies {
-    api("androidx.annotation:annotation:1.1.0")
+    api("androidx.annotation:annotation:1.2.0")
     api("androidx.core:core:1.2.0")
     api(project(":customview:customview"))
 
+    androidTestImplementation(libs.kotlinStdlib)
     androidTestImplementation(libs.testExtJunit)
     androidTestImplementation(libs.testCore)
     androidTestImplementation(libs.testRunner)
     androidTestImplementation(libs.testRules)
     androidTestImplementation(libs.truth)
+    androidTestImplementation(libs.espressoCore, excludes.espresso)
+    androidTestImplementation(project(":internal-testutils-runtime"))
 }
 
 androidx {
diff --git a/drawerlayout/drawerlayout/src/androidTest/AndroidManifest.xml b/drawerlayout/drawerlayout/src/androidTest/AndroidManifest.xml
index 62cff76..ee402d3 100644
--- a/drawerlayout/drawerlayout/src/androidTest/AndroidManifest.xml
+++ b/drawerlayout/drawerlayout/src/androidTest/AndroidManifest.xml
@@ -23,6 +23,8 @@
                 android:theme="@style/CustomDrawerLayoutTheme"/>
         <activity
             android:name="androidx.drawerlayout.widget.DrawerNoThemeActivity"/>
+        <activity
+            android:name="androidx.drawerlayout.widget.DrawerSingleStartActivity"/>
     </application>
 
 </manifest>
diff --git a/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerBackHandlingTest.kt b/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerBackHandlingTest.kt
new file mode 100644
index 0000000..f9f638f
--- /dev/null
+++ b/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerBackHandlingTest.kt
@@ -0,0 +1,101 @@
+/*
+ * 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.drawerlayout.widget
+
+import android.os.Build
+import android.view.KeyEvent
+import android.view.View
+import androidx.drawerlayout.test.R
+import androidx.test.espresso.Espresso
+import androidx.test.espresso.action.ViewActions
+import androidx.test.espresso.matcher.ViewMatchers
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import androidx.testutils.PollingCheck
+import androidx.testutils.withActivity
+import org.junit.Assert
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+public class DrawerBackHandlingTest {
+    @get:Rule
+    public val activityScenarioRule = ActivityScenarioRule(
+        DrawerSingleStartActivity::class.java
+    )
+
+    @Test
+    @SmallTest
+    public fun testBackPress() {
+        val listener = ObservableDrawerListener()
+        val drawerLayout = activityScenarioRule.withActivity {
+            val drawerLayout = findViewById<DrawerLayout>(R.id.drawer)
+            drawerLayout.addDrawerListener(listener)
+            drawerLayout.open()
+            drawerLayout
+        }
+
+        // Wait until the animation ends. We disable animations on test
+        // devices, but this is useful when running on a local device.
+        PollingCheck.waitFor {
+            listener.drawerOpenedCalled
+        }
+        listener.reset()
+
+        // Ensure that back pressed dispatcher callback is registered on T+.
+        if (Build.VERSION.SDK_INT >= 33) {
+            Assert.assertTrue(drawerLayout.isBackInvokedCallbackRegistered)
+        }
+
+        Espresso.onView(ViewMatchers.isRoot()).perform(ViewActions.pressKey(KeyEvent.KEYCODE_BACK))
+
+        PollingCheck.waitFor {
+            listener.drawerClosedCalled
+        }
+        listener.reset()
+
+        Assert.assertNull(drawerLayout.findOpenDrawer())
+
+        // Ensure that back pressed dispatcher callback is unregistered on T+.
+        if (Build.VERSION.SDK_INT >= 33) {
+            Assert.assertFalse(drawerLayout.isBackInvokedCallbackRegistered)
+        }
+    }
+
+    internal inner class ObservableDrawerListener : DrawerLayout.DrawerListener {
+        var drawerOpenedCalled = false
+        var drawerClosedCalled = false
+
+        override fun onDrawerSlide(drawerView: View, slideOffset: Float) {}
+
+        override fun onDrawerOpened(drawerView: View) {
+            drawerOpenedCalled = true
+        }
+
+        override fun onDrawerClosed(drawerView: View) {
+            drawerClosedCalled = true
+        }
+
+        override fun onDrawerStateChanged(newState: Int) {}
+
+        fun reset() {
+            drawerOpenedCalled = false
+            drawerClosedCalled = false
+        }
+    }
+}
diff --git a/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerSingleStartActivity.java b/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerSingleStartActivity.java
new file mode 100644
index 0000000..56596e78
--- /dev/null
+++ b/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerSingleStartActivity.java
@@ -0,0 +1,30 @@
+/*
+ * 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.drawerlayout.widget;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import androidx.drawerlayout.test.R;
+
+public class DrawerSingleStartActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.drawer_single_start_layout);
+    }
+}
diff --git a/drawerlayout/drawerlayout/src/androidTest/res/layout/drawer_single_start_layout.xml b/drawerlayout/drawerlayout/src/androidTest/res/layout/drawer_single_start_layout.xml
new file mode 100644
index 0000000..8993394
--- /dev/null
+++ b/drawerlayout/drawerlayout/src/androidTest/res/layout/drawer_single_start_layout.xml
@@ -0,0 +1,38 @@
+<?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.
+  -->
+
+<androidx.drawerlayout.widget.DrawerLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/drawer"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical" />
+
+    <LinearLayout
+        android:id="@+id/panel"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_gravity="start"
+        android:orientation="vertical"
+        android:background="@android:color/holo_blue_bright" />
+
+</androidx.drawerlayout.widget.DrawerLayout>
+
diff --git a/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java b/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java
index c6f82fa..336580a 100644
--- a/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java
+++ b/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java
@@ -43,13 +43,18 @@
 import android.view.ViewGroup;
 import android.view.ViewParent;
 import android.view.accessibility.AccessibilityEvent;
+import android.window.OnBackInvokedCallback;
+import android.window.OnBackInvokedDispatcher;
 
 import androidx.annotation.ColorInt;
+import androidx.annotation.DoNotInline;
 import androidx.annotation.DrawableRes;
 import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.core.content.ContextCompat;
 import androidx.core.graphics.Insets;
 import androidx.core.graphics.drawable.DrawableCompat;
@@ -218,6 +223,14 @@
     private boolean mInLayout;
     private boolean mFirstLayout = true;
 
+    // The callback handling back events. If this is non-null, the
+    // callback has been registered at least once.
+    private OnBackInvokedCallback mBackInvokedCallback;
+
+    // The dispatcher on which the callback was registered. If this
+    // value is null, the callback is not registered anywhere.
+    private OnBackInvokedDispatcher mBackInvokedDispatcher;
+
     private @LockMode int mLockModeLeft = LOCK_MODE_UNDEFINED;
     private @LockMode int mLockModeRight = LOCK_MODE_UNDEFINED;
     private @LockMode int mLockModeStart = LOCK_MODE_UNDEFINED;
@@ -884,6 +897,7 @@
 
             updateChildrenImportantForAccessibility(drawerView, false);
             updateChildAccessibilityAction(drawerView);
+            updateBackInvokedCallbackState();
 
             // Only send WINDOW_STATE_CHANGE if the host has window focus. This
             // may change if support for multiple foreground windows (e.g. IME)
@@ -912,6 +926,7 @@
 
             updateChildrenImportantForAccessibility(drawerView, true);
             updateChildAccessibilityAction(drawerView);
+            updateBackInvokedCallbackState();
 
             // Only send WINDOW_STATE_CHANGE if the host has window focus.
             if (hasWindowFocus()) {
@@ -1046,12 +1061,16 @@
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
         mFirstLayout = true;
+
+        updateBackInvokedCallbackState();
     }
 
     @Override
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
         mFirstLayout = true;
+
+        updateBackInvokedCallbackState();
     }
 
     @SuppressLint("WrongConstant")
@@ -1732,6 +1751,7 @@
 
             updateChildrenImportantForAccessibility(drawerView, true);
             updateChildAccessibilityAction(drawerView);
+            updateBackInvokedCallbackState();
         } else if (animate) {
             lp.openState |= LayoutParams.FLAG_IS_OPENING;
 
@@ -2029,6 +2049,40 @@
         }
     }
 
+    /**
+     * Call this method whenever a property changes that affects whether the view will handle a
+     * back press, which is the combination of properties inspected in {@link #closeDrawers()} and
+     * properties that affect whether this view would normally receive key press events.
+     */
+    void updateBackInvokedCallbackState() {
+        if (Build.VERSION.SDK_INT >= 33) {
+            View visibleDrawer = findVisibleDrawer();
+            OnBackInvokedDispatcher currentDispatcher = Api33Impl.findOnBackInvokedDispatcher(this);
+            boolean shouldBeRegistered = visibleDrawer != null
+                    && currentDispatcher != null
+                    && getDrawerLockMode(visibleDrawer) == LOCK_MODE_UNLOCKED
+                    && ViewCompat.isAttachedToWindow(this);
+
+            if (shouldBeRegistered && mBackInvokedDispatcher == null) {
+                if (mBackInvokedCallback == null) {
+                    mBackInvokedCallback = Api33Impl.newOnBackInvokedCallback(this::closeDrawers);
+                }
+                Api33Impl.tryRegisterOnBackInvokedCallback(
+                        currentDispatcher, mBackInvokedCallback);
+                mBackInvokedDispatcher = currentDispatcher;
+            } else if (!shouldBeRegistered && mBackInvokedDispatcher != null) {
+                Api33Impl.tryUnregisterOnBackInvokedCallback(
+                        mBackInvokedDispatcher, mBackInvokedCallback);
+                mBackInvokedDispatcher = null;
+            }
+        }
+    }
+
+    @VisibleForTesting
+    boolean isBackInvokedCallbackRegistered() {
+        return mBackInvokedDispatcher != null;
+    }
+
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_BACK && hasVisibleDrawer()) {
@@ -2529,4 +2583,38 @@
             }
         }
     }
+
+    @RequiresApi(33)
+    static class Api33Impl {
+        private Api33Impl() {
+            // This class is not instantiable.
+        }
+
+        @DoNotInline
+        static void tryRegisterOnBackInvokedCallback(@NonNull Object dispatcherObj,
+                @NonNull Object callback) {
+            OnBackInvokedDispatcher dispatcher = (OnBackInvokedDispatcher) dispatcherObj;
+            dispatcher.registerOnBackInvokedCallback(OnBackInvokedDispatcher.PRIORITY_OVERLAY,
+                    (OnBackInvokedCallback) callback);
+        }
+
+        @DoNotInline
+        static void tryUnregisterOnBackInvokedCallback(@NonNull Object dispatcherObj,
+                @NonNull Object callbackObj) {
+            OnBackInvokedDispatcher dispatcher = (OnBackInvokedDispatcher) dispatcherObj;
+            dispatcher.unregisterOnBackInvokedCallback((OnBackInvokedCallback) callbackObj);
+        }
+
+        @Nullable
+        @DoNotInline
+        static OnBackInvokedDispatcher findOnBackInvokedDispatcher(@NonNull DrawerLayout view) {
+            return view.findOnBackInvokedDispatcher();
+        }
+
+        @NonNull
+        @DoNotInline
+        static OnBackInvokedCallback newOnBackInvokedCallback(@NonNull Runnable action) {
+            return action::run;
+        }
+    }
 }
diff --git a/dynamicanimation/dynamicanimation/lint-baseline.xml b/dynamicanimation/dynamicanimation/lint-baseline.xml
index 244db36..1e6231c 100644
--- a/dynamicanimation/dynamicanimation/lint-baseline.xml
+++ b/dynamicanimation/dynamicanimation/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/FlingTests.java b/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/FlingTests.java
index 8870dfc..00d39a9 100644
--- a/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/FlingTests.java
+++ b/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/FlingTests.java
@@ -145,6 +145,9 @@
             @Override
             public void run() {
                 animHighFriction.setStartVelocity(5000).setStartValue(0).start();
+                // Set the duration scale to 1 to avoid prematurely ending the animation.
+                // ValueAnimator#getDurationScale is called in start().
+                animHighFriction.getAnimationHandler().mDurationScale = 1.0f;
                 animLowFriction.setStartVelocity(5000).setStartValue(0).start();
             }
         });
@@ -197,6 +200,8 @@
             @Override
             public void run() {
                 animHighThreshold.setStartVelocity(2000).setStartValue(0).start();
+                // Set the duration scale to 1 to avoid prematurely ending the animation.
+                animHighThreshold.getAnimationHandler().mDurationScale = 1.0f;
                 animLowThreshold.setStartVelocity(2000).setStartValue(0).start();
             }
         });
diff --git a/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/SpringTests.java b/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/SpringTests.java
index ff3f953..8548a1f 100644
--- a/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/SpringTests.java
+++ b/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/SpringTests.java
@@ -18,6 +18,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -39,7 +40,9 @@
 import android.view.View;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 import androidx.core.view.ViewCompat;
+import androidx.dynamicanimation.animation.AnimationHandler;
 import androidx.dynamicanimation.animation.DynamicAnimation;
 import androidx.dynamicanimation.animation.FloatPropertyCompat;
 import androidx.dynamicanimation.animation.FloatValueHolder;
@@ -51,6 +54,7 @@
 import androidx.test.filters.FlakyTest;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.MediumTest;
+import androidx.test.filters.SdkSuppress;
 import androidx.test.platform.app.InstrumentationRegistry;
 
 import org.junit.Before;
@@ -148,6 +152,9 @@
             @Override
             public void run() {
                 anim.setStartValue(0).start();
+                // Set the duration scale to 1 to avoid prematurely ending the animation.
+                // ValueAnimator#getDurationScale is called in start().
+                anim.getAnimationHandler().mDurationScale = 1.0f;
             }
         });
 
@@ -244,10 +251,14 @@
             public void run() {
                 anim2.setStartValue(800).addUpdateListener(updateListener).addEndListener(l2)
                         .start();
+                // Set the duration scale to 1 to avoid prematurely ending the animation.
+                anim2.getAnimationHandler().mDurationScale = 1.0f;
                 anim3.setStartValue(800).addUpdateListener(updateListener).addEndListener(l3)
                         .addEndListener(mockListener).start();
+                anim3.getAnimationHandler().mDurationScale = 1.0f;
                 anim1.setStartValue(800).addUpdateListener(updateListener).addEndListener(l1)
                         .start();
+                anim1.getAnimationHandler().mDurationScale = 1.0f;
 
             }
         });
@@ -308,9 +319,13 @@
             public void run() {
                 anim1.setStartValue(360).addUpdateListener(updateListener).addEndListener(l1)
                         .start();
+                // Set the duration scale to 1 to avoid prematurely ending the animation.
+                anim1.getAnimationHandler().mDurationScale = 1.0f;
                 anim2.setStartValue(360).addUpdateListener(updateListener).addEndListener(l2)
                         .addEndListener(mockListener).start();
+                anim2.getAnimationHandler().mDurationScale = 1.0f;
                 anim3.setStartValue(360).addEndListener(l3).start();
+                anim3.getAnimationHandler().mDurationScale = 1.0f;
             }
         });
         // The spring animation with critically-damped spring should return to rest position faster.
@@ -371,6 +386,8 @@
                 public void run() {
                     for (int j = 0; j < stiffness.length; j++) {
                         springAnims[j].start();
+                        // Set the duration scale to 1 to avoid prematurely ending the animation.
+                        springAnims[j].getAnimationHandler().mDurationScale = 1.0f;
                     }
                 }
             });
@@ -525,6 +542,8 @@
             @Override
             public void run() {
                 anim.animateToFinalPosition(0.0f);
+                // Set the duration scale to 1 to avoid prematurely ending the animation.
+                anim.getAnimationHandler().mDurationScale = 1.0f;
             }
         });
         assertTrue(anim.isRunning());
@@ -534,6 +553,8 @@
             @Override
             public void run() {
                 anim.animateToFinalPosition(1.0f);
+                // Set the duration scale to 1 to avoid prematurely ending the animation.
+                anim.getAnimationHandler().mDurationScale = 1.0f;
             }
         });
 
@@ -853,6 +874,41 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 33)
+    public void testDurationScaleChangeListener() throws InterruptedException {
+        final SpringAnimation anim = new SpringAnimation(mView1, DynamicAnimation.Y, 0f);
+        final CountDownLatch registerUnregisterLatch = new CountDownLatch(2);
+
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                // getAnimationHandler and AnimationHandler.getInstance() requires a looper, so run
+                // on the main thread.
+                AnimationHandler animHandler = anim.getAnimationHandler();
+                assertEquals(1, animHandler.getDurationScale(), 0);
+                assertNull(animHandler.mDurationScaleChangeListener);
+                animHandler.mDurationScaleChangeListener =
+                        new MyDurationScaleChangeListener(animHandler, registerUnregisterLatch);
+
+                anim.start();
+                assertEquals(0, animHandler.getDurationScale(), 0);
+            }
+        });
+
+        // Wait for the animation to end on the main thread.
+        assertTrue(registerUnregisterLatch.await(1000, TimeUnit.MILLISECONDS));
+
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                AnimationHandler animHandler = anim.getAnimationHandler();
+                // Remove our custom listener at the end.
+                animHandler.mDurationScaleChangeListener = null;
+            }
+        });
+    }
+
+    @Test
     public void testCustomHandler() {
         final SpringAnimation anim = new SpringAnimation(mView1, DynamicAnimation.Y, 0f);
         MyAnimationFrameCallbackScheduler scheduler =
@@ -895,4 +951,29 @@
             endTime = SystemClock.uptimeMillis();
         }
     }
+
+    @RequiresApi(api = 33)
+    class MyDurationScaleChangeListener extends AnimationHandler.DurationScaleChangeListener33 {
+
+        final CountDownLatch mRegisterUnregisterLatch;
+
+        MyDurationScaleChangeListener(AnimationHandler handler, CountDownLatch countDownLatch) {
+            // Call super to construct an inner class
+            handler.super();
+            mRegisterUnregisterLatch = countDownLatch;
+        }
+
+        @Override
+        public boolean register() {
+            mRegisterUnregisterLatch.countDown();
+            assertEquals(1, mRegisterUnregisterLatch.getCount());
+            return super.register();
+        }
+
+        @Override
+        public boolean unregister() {
+            mRegisterUnregisterLatch.countDown();
+            return super.unregister();
+        }
+    }
 }
diff --git a/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java b/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java
index f5ce59b..121e503 100644
--- a/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java
+++ b/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java
@@ -16,6 +16,7 @@
 
 package androidx.dynamicanimation.animation;
 
+import android.animation.ValueAnimator;
 import android.os.Build;
 import android.os.Handler;
 import android.os.Looper;
@@ -23,6 +24,7 @@
 import android.view.Choreographer;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.VisibleForTesting;
 import androidx.collection.SimpleArrayMap;
@@ -39,7 +41,8 @@
  * AnimationFrameCallbackProvider can be set on the handler to provide timing pulse that
  * may be independent of UI frame update. This could be useful in testing.
  */
-class AnimationHandler {
+@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+public class AnimationHandler {
     /**
      * Callbacks that receives notifications for animation timing
      */
@@ -93,6 +96,11 @@
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     long mCurrentFrameTime = 0;
     private boolean mListDirty = false;
+    @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+    public float mDurationScale = 1.0f;
+    @Nullable
+    @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+    public DurationScaleChangeListener mDurationScaleChangeListener;
 
     static AnimationHandler getInstance() {
         if (sAnimatorHandler.get() == null) {
@@ -121,6 +129,13 @@
     void addAnimationFrameCallback(final AnimationFrameCallback callback, long delay) {
         if (mAnimationCallbacks.size() == 0) {
             mScheduler.postFrameCallback(mRunnable);
+            if (Build.VERSION.SDK_INT >= 33) {
+                mDurationScale = ValueAnimator.getDurationScale();
+                if (mDurationScaleChangeListener == null) {
+                    mDurationScaleChangeListener = new DurationScaleChangeListener33();
+                }
+                mDurationScaleChangeListener.register();
+            }
         }
         if (!mAnimationCallbacks.contains(callback)) {
             mAnimationCallbacks.add(callback);
@@ -193,6 +208,12 @@
                     mAnimationCallbacks.remove(i);
                 }
             }
+            // Unregister duration scale listener if there are no current animations.
+            if (mAnimationCallbacks.size() == 0) {
+                if (Build.VERSION.SDK_INT >= 33) {
+                    mDurationScaleChangeListener.unregister();
+                }
+            }
             mListDirty = false;
         }
     }
@@ -253,4 +274,55 @@
             return Thread.currentThread() == mHandler.getLooper().getThread();
         }
     }
+
+    /**
+     * Returns the system-wide scaling factor for animations.
+     */
+    @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+    public float getDurationScale() {
+        return mDurationScale;
+    }
+
+    /**
+     * T+ listener for changes to the system-wide scaling factor for Animator-based animations.
+     */
+    @RequiresApi(api = 33)
+    @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+    public class DurationScaleChangeListener33 implements DurationScaleChangeListener {
+        ValueAnimator.DurationScaleChangeListener mListener;
+
+        @Override
+        public boolean register() {
+            if (mListener == null) {
+                mListener = scale -> AnimationHandler.this.mDurationScale = scale;
+                return ValueAnimator.registerDurationScaleChangeListener(mListener);
+            }
+            return true;
+        }
+
+        @Override
+        public boolean unregister() {
+            boolean unregistered = ValueAnimator.unregisterDurationScaleChangeListener(mListener);
+            mListener = null;
+            return unregistered;
+        }
+    }
+
+    /**
+     * listener for changes to the system-wide scaling factor for Animator-based animations.
+     */
+    @VisibleForTesting
+    public interface DurationScaleChangeListener {
+        /**
+         * Registers a duration scale change listener.
+         * @return true if a listener is registered or one is already registered.
+         */
+        boolean register();
+
+        /**
+         * Unregisters a duration scale change listener.
+         * @return true if a listener is unregistered.
+         */
+        boolean unregister();
+    }
 }
diff --git a/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.java b/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.java
index c361dd8..58f0842 100644
--- a/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.java
+++ b/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.java
@@ -25,6 +25,7 @@
 import androidx.annotation.MainThread;
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.core.view.ViewCompat;
 
 import java.util.ArrayList;
@@ -676,6 +677,8 @@
         }
         long deltaT = frameTime - mLastFrameTime;
         mLastFrameTime = frameTime;
+        float durationScale = getAnimationHandler().getDurationScale();
+        deltaT = durationScale == 0.0f ? Integer.MAX_VALUE : (long) (deltaT / durationScale);
         boolean finished = updateValueAndVelocity(deltaT);
         // Clamp value & velocity.
         mValue = Math.min(mValue, mMaxValue);
@@ -750,7 +753,8 @@
      * @return the {@link AnimationHandler} for this animator.
      */
     @NonNull
-    AnimationHandler getAnimationHandler() {
+    @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+    public AnimationHandler getAnimationHandler() {
         return mAnimationHandler != null ? mAnimationHandler : AnimationHandler.getInstance();
     }
 
diff --git a/emoji/emoji-appcompat/lint-baseline.xml b/emoji/emoji-appcompat/lint-baseline.xml
index bca811a..26983f1 100644
--- a/emoji/emoji-appcompat/lint-baseline.xml
+++ b/emoji/emoji-appcompat/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
diff --git a/emoji/emoji/lint-baseline.xml b/emoji/emoji/lint-baseline.xml
index 7d4802c..c9ce755 100644
--- a/emoji/emoji/lint-baseline.xml
+++ b/emoji/emoji/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
@@ -889,15 +889,6 @@
     <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Typeface getTypeface() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/emoji/text/EmojiMetadata.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            final int end, final Paint.FontMetricsInt fm) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/emoji2/emoji2-bundled/build.gradle b/emoji2/emoji2-bundled/build.gradle
index 0ea043e..9e9cca6 100644
--- a/emoji2/emoji2-bundled/build.gradle
+++ b/emoji2/emoji2-bundled/build.gradle
@@ -27,6 +27,10 @@
     }
     namespace "androidx.emoji2.bundled"
 
+    // Workaround for b/230466571 where targetSdkVersion gets merged incorrectly.
+    defaultConfig {
+        targetSdk null
+    }
 }
 
 dependencies {
diff --git a/emoji2/emoji2-bundled/lint-baseline.xml b/emoji2/emoji2-bundled/lint-baseline.xml
index ba06e13..594dde4 100644
--- a/emoji2/emoji2-bundled/lint-baseline.xml
+++ b/emoji2/emoji2-bundled/lint-baseline.xml
@@ -1,59 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="NewApi"
-        message="Class requires API level 19 (current min is 14): `EmojiSpan`"
-        errorLine1="            mSpans = ((Spanned) charSequence).getSpans(0, charSequence.length(), EmojiSpan.class);"
-        errorLine2="                                                                                 ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/emoji2/bundled/util/EmojiMatcher.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Class requires API level 19 (current min is 14): `EmojiSpan`"
-        errorLine1="            mSpans = ((Spanned) charSequence).getSpans(0, charSequence.length(), EmojiSpan.class);"
-        errorLine2="                                                                                 ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/emoji2/bundled/util/EmojiMatcher.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Class requires API level 19 (current min is 14): `EmojiSpan`"
-        errorLine1="            final EmojiSpan[] spans = spanned.getSpans(0, charSequence.length(), EmojiSpan.class);"
-        errorLine2="                                                                                 ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/emoji2/bundled/util/EmojiMatcher.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 19 (current min is 14): `getId`"
-        errorLine1="                    if (mResId == spans[index].getId()) {"
-        errorLine2="                                               ~~~~~">
-        <location
-            file="src/androidTest/java/androidx/emoji2/bundled/util/EmojiMatcher.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 19 (current min is 14): `getId`"
-        errorLine1="                    if (mResId == -1 || mResId == spans[index].getId()) {"
-        errorLine2="                                                               ~~~~~">
-        <location
-            file="src/androidTest/java/androidx/emoji2/bundled/util/EmojiMatcher.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 19 (current min is 14): `create`"
-        errorLine1="                            loaderCallback.onLoaded(MetadataRepo.create(mock(Typeface.class)));"
-        errorLine2="                                                                 ~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
@@ -64,13 +10,4 @@
             file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"/>
     </issue>
 
-    <issue
-        id="NewApi"
-        message="Call requires API level 19 (current min is 14): `create`"
-        errorLine1="                    mMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
-        errorLine2="                                                 ~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"/>
-    </issue>
-
 </issues>
diff --git a/emoji2/emoji2-views-helper/build.gradle b/emoji2/emoji2-views-helper/build.gradle
index c177372..791cdec 100644
--- a/emoji2/emoji2-views-helper/build.gradle
+++ b/emoji2/emoji2-views-helper/build.gradle
@@ -24,6 +24,11 @@
 
 android {
     namespace "androidx.emoji2.viewsintegration"
+
+    // Workaround for b/230466571 where targetSdkVersion gets merged incorrectly.
+    defaultConfig {
+        targetSdk null
+    }
 }
 
 androidx {
diff --git a/emoji2/emoji2-views/build.gradle b/emoji2/emoji2-views/build.gradle
index a53c92e..5333ac1 100644
--- a/emoji2/emoji2-views/build.gradle
+++ b/emoji2/emoji2-views/build.gradle
@@ -30,6 +30,11 @@
         }
     }
     namespace "androidx.emoji2.widget"
+
+    // Workaround for b/230466571 where targetSdkVersion gets merged incorrectly.
+    defaultConfig {
+        targetSdk null
+    }
 }
 
 androidx {
diff --git a/emoji2/emoji2/build.gradle b/emoji2/emoji2/build.gradle
index 888aa92..4abee4a 100644
--- a/emoji2/emoji2/build.gradle
+++ b/emoji2/emoji2/build.gradle
@@ -46,4 +46,9 @@
 
 android {
     namespace "androidx.emoji2"
+
+    // Workaround for b/230466571 where targetSdkVersion gets merged incorrectly.
+    defaultConfig {
+        targetSdk null
+    }
 }
diff --git a/emoji2/emoji2/lint-baseline.xml b/emoji2/emoji2/lint-baseline.xml
deleted file mode 100644
index b7e9705..0000000
--- a/emoji2/emoji2/lint-baseline.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="cli" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 19 (current min is 14): `DefaultGlyphChecker`"
-        errorLine1="        GlyphChecker mGlyphChecker = new EmojiProcessor.DefaultGlyphChecker();"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/emoji2/text/EmojiCompat.java"/>
-    </issue>
-
-</issues>
diff --git a/enterprise/enterprise-feedback/lint-baseline.xml b/enterprise/enterprise-feedback/lint-baseline.xml
index 56cd3f8..8d04162 100644
--- a/enterprise/enterprise-feedback/lint-baseline.xml
+++ b/enterprise/enterprise-feedback/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
diff --git a/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java b/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
index 4e2f564..b91b710 100644
--- a/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
+++ b/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
@@ -5958,7 +5958,11 @@
                 throw new UnsupportedOperationException("Failed to read EXIF from HEIF file. "
                         + "Given stream is either malformed or unsupported.");
             } finally {
-                retriever.release();
+                try {
+                    retriever.release();
+                } catch (IOException e) {
+                    // Nothing we can  do about it.
+                }
             }
         } else {
             throw new UnsupportedOperationException("Reading EXIF from HEIF files "
diff --git a/fragment/fragment-ktx/api/1.5.0-beta01.txt b/fragment/fragment-ktx/api/1.5.0-beta01.txt
deleted file mode 100644
index 6d0a8d3..0000000
--- a/fragment/fragment-ktx/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
-  public final class FragmentKt {
-    method public static void clearFragmentResult(androidx.fragment.app.Fragment, String requestKey);
-    method public static void clearFragmentResultListener(androidx.fragment.app.Fragment, String requestKey);
-    method public static void setFragmentResult(androidx.fragment.app.Fragment, String requestKey, android.os.Bundle result);
-    method public static void setFragmentResultListener(androidx.fragment.app.Fragment, String requestKey, kotlin.jvm.functions.Function2<? super java.lang.String,? super android.os.Bundle,kotlin.Unit> listener);
-  }
-
-  public final class FragmentManagerKt {
-    method public static inline void commit(androidx.fragment.app.FragmentManager, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
-    method public static inline void commitNow(androidx.fragment.app.FragmentManager, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
-    method @Deprecated public static inline void transaction(androidx.fragment.app.FragmentManager, optional boolean now, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
-  }
-
-  public final class FragmentTransactionKt {
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction! add(androidx.fragment.app.FragmentTransaction, @IdRes int containerViewId, optional String tag, optional android.os.Bundle? args);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction! add(androidx.fragment.app.FragmentTransaction, String tag, optional android.os.Bundle? args);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction! replace(androidx.fragment.app.FragmentTransaction, @IdRes int containerViewId, optional String tag, optional android.os.Bundle? args);
-  }
-
-  public final class FragmentViewModelLazyKt {
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-  }
-
-  public final class ViewKt {
-    method public static <F extends androidx.fragment.app.Fragment> F findFragment(android.view.View);
-  }
-
-}
-
diff --git a/fragment/fragment-ktx/api/public_plus_experimental_1.5.0-beta01.txt b/fragment/fragment-ktx/api/public_plus_experimental_1.5.0-beta01.txt
deleted file mode 100644
index 6d0a8d3..0000000
--- a/fragment/fragment-ktx/api/public_plus_experimental_1.5.0-beta01.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
-  public final class FragmentKt {
-    method public static void clearFragmentResult(androidx.fragment.app.Fragment, String requestKey);
-    method public static void clearFragmentResultListener(androidx.fragment.app.Fragment, String requestKey);
-    method public static void setFragmentResult(androidx.fragment.app.Fragment, String requestKey, android.os.Bundle result);
-    method public static void setFragmentResultListener(androidx.fragment.app.Fragment, String requestKey, kotlin.jvm.functions.Function2<? super java.lang.String,? super android.os.Bundle,kotlin.Unit> listener);
-  }
-
-  public final class FragmentManagerKt {
-    method public static inline void commit(androidx.fragment.app.FragmentManager, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
-    method public static inline void commitNow(androidx.fragment.app.FragmentManager, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
-    method @Deprecated public static inline void transaction(androidx.fragment.app.FragmentManager, optional boolean now, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
-  }
-
-  public final class FragmentTransactionKt {
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction! add(androidx.fragment.app.FragmentTransaction, @IdRes int containerViewId, optional String tag, optional android.os.Bundle? args);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction! add(androidx.fragment.app.FragmentTransaction, String tag, optional android.os.Bundle? args);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction! replace(androidx.fragment.app.FragmentTransaction, @IdRes int containerViewId, optional String tag, optional android.os.Bundle? args);
-  }
-
-  public final class FragmentViewModelLazyKt {
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-  }
-
-  public final class ViewKt {
-    method public static <F extends androidx.fragment.app.Fragment> F findFragment(android.view.View);
-  }
-
-}
-
diff --git a/fragment/fragment-ktx/api/res-1.5.0-beta01.txt b/fragment/fragment-ktx/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/fragment/fragment-ktx/api/res-1.5.0-beta01.txt
+++ /dev/null
diff --git a/fragment/fragment-ktx/api/restricted_1.5.0-beta01.txt b/fragment/fragment-ktx/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index 6d0a8d3..0000000
--- a/fragment/fragment-ktx/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
-  public final class FragmentKt {
-    method public static void clearFragmentResult(androidx.fragment.app.Fragment, String requestKey);
-    method public static void clearFragmentResultListener(androidx.fragment.app.Fragment, String requestKey);
-    method public static void setFragmentResult(androidx.fragment.app.Fragment, String requestKey, android.os.Bundle result);
-    method public static void setFragmentResultListener(androidx.fragment.app.Fragment, String requestKey, kotlin.jvm.functions.Function2<? super java.lang.String,? super android.os.Bundle,kotlin.Unit> listener);
-  }
-
-  public final class FragmentManagerKt {
-    method public static inline void commit(androidx.fragment.app.FragmentManager, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
-    method public static inline void commitNow(androidx.fragment.app.FragmentManager, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
-    method @Deprecated public static inline void transaction(androidx.fragment.app.FragmentManager, optional boolean now, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
-  }
-
-  public final class FragmentTransactionKt {
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction! add(androidx.fragment.app.FragmentTransaction, @IdRes int containerViewId, optional String tag, optional android.os.Bundle? args);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction! add(androidx.fragment.app.FragmentTransaction, String tag, optional android.os.Bundle? args);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.FragmentTransaction! replace(androidx.fragment.app.FragmentTransaction, @IdRes int containerViewId, optional String tag, optional android.os.Bundle? args);
-  }
-
-  public final class FragmentViewModelLazyKt {
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! activityViewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras> extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStore> storeProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.fragment.app.Fragment, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-  }
-
-  public final class ViewKt {
-    method public static <F extends androidx.fragment.app.Fragment> F findFragment(android.view.View);
-  }
-
-}
-
diff --git a/fragment/fragment-testing/api/1.5.0-beta01.txt b/fragment/fragment-testing/api/1.5.0-beta01.txt
deleted file mode 100644
index e784213..0000000
--- a/fragment/fragment-testing/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app.testing {
-
-  public final class FragmentScenario<F extends androidx.fragment.app.Fragment> implements java.io.Closeable {
-    method public void close();
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
-    method public androidx.fragment.app.testing.FragmentScenario<F> moveToState(androidx.lifecycle.Lifecycle.State newState);
-    method public androidx.fragment.app.testing.FragmentScenario<F> onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F> action);
-    method public androidx.fragment.app.testing.FragmentScenario<F> recreate();
-    field public static final androidx.fragment.app.testing.FragmentScenario.Companion Companion;
-  }
-
-  public static final class FragmentScenario.Companion {
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
-  }
-
-  public static fun interface FragmentScenario.FragmentAction<F extends androidx.fragment.app.Fragment> {
-    method public void perform(F fragment);
-  }
-
-  public final class FragmentScenarioKt {
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method public static inline <reified F extends androidx.fragment.app.Fragment, T> T! withFragment(androidx.fragment.app.testing.FragmentScenario<F>, kotlin.jvm.functions.Function1<? super F,? extends T> block);
-  }
-
-}
-
diff --git a/fragment/fragment-testing/api/public_plus_experimental_1.5.0-beta01.txt b/fragment/fragment-testing/api/public_plus_experimental_1.5.0-beta01.txt
deleted file mode 100644
index e784213..0000000
--- a/fragment/fragment-testing/api/public_plus_experimental_1.5.0-beta01.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app.testing {
-
-  public final class FragmentScenario<F extends androidx.fragment.app.Fragment> implements java.io.Closeable {
-    method public void close();
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
-    method public androidx.fragment.app.testing.FragmentScenario<F> moveToState(androidx.lifecycle.Lifecycle.State newState);
-    method public androidx.fragment.app.testing.FragmentScenario<F> onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F> action);
-    method public androidx.fragment.app.testing.FragmentScenario<F> recreate();
-    field public static final androidx.fragment.app.testing.FragmentScenario.Companion Companion;
-  }
-
-  public static final class FragmentScenario.Companion {
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
-  }
-
-  public static fun interface FragmentScenario.FragmentAction<F extends androidx.fragment.app.Fragment> {
-    method public void perform(F fragment);
-  }
-
-  public final class FragmentScenarioKt {
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method public static inline <reified F extends androidx.fragment.app.Fragment, T> T! withFragment(androidx.fragment.app.testing.FragmentScenario<F>, kotlin.jvm.functions.Function1<? super F,? extends T> block);
-  }
-
-}
-
diff --git a/fragment/fragment-testing/api/restricted_1.5.0-beta01.txt b/fragment/fragment-testing/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index e784213..0000000
--- a/fragment/fragment-testing/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app.testing {
-
-  public final class FragmentScenario<F extends androidx.fragment.app.Fragment> implements java.io.Closeable {
-    method public void close();
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
-    method public androidx.fragment.app.testing.FragmentScenario<F> moveToState(androidx.lifecycle.Lifecycle.State newState);
-    method public androidx.fragment.app.testing.FragmentScenario<F> onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F> action);
-    method public androidx.fragment.app.testing.FragmentScenario<F> recreate();
-    field public static final androidx.fragment.app.testing.FragmentScenario.Companion Companion;
-  }
-
-  public static final class FragmentScenario.Companion {
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
-    method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
-  }
-
-  public static fun interface FragmentScenario.FragmentAction<F extends androidx.fragment.app.Fragment> {
-    method public void perform(F fragment);
-  }
-
-  public final class FragmentScenarioKt {
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
-    method public static inline <reified F extends androidx.fragment.app.Fragment, T> T! withFragment(androidx.fragment.app.testing.FragmentScenario<F>, kotlin.jvm.functions.Function1<? super F,? extends T> block);
-  }
-
-}
-
diff --git a/fragment/fragment/api/1.5.0-beta01.txt b/fragment/fragment/api/1.5.0-beta01.txt
deleted file mode 100644
index 32377c9..0000000
--- a/fragment/fragment/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1,543 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
-  public class DialogFragment extends androidx.fragment.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
-    ctor public DialogFragment();
-    ctor public DialogFragment(@LayoutRes int);
-    method public void dismiss();
-    method public void dismissAllowingStateLoss();
-    method @MainThread public void dismissNow();
-    method public android.app.Dialog? getDialog();
-    method public boolean getShowsDialog();
-    method @StyleRes public int getTheme();
-    method public boolean isCancelable();
-    method public void onCancel(android.content.DialogInterface);
-    method @MainThread public android.app.Dialog onCreateDialog(android.os.Bundle?);
-    method public void onDismiss(android.content.DialogInterface);
-    method public final android.app.Dialog requireDialog();
-    method public void setCancelable(boolean);
-    method public void setShowsDialog(boolean);
-    method public void setStyle(int, @StyleRes int);
-    method public void show(androidx.fragment.app.FragmentManager, String?);
-    method public int show(androidx.fragment.app.FragmentTransaction, String?);
-    method public void showNow(androidx.fragment.app.FragmentManager, String?);
-    field public static final int STYLE_NORMAL = 0; // 0x0
-    field public static final int STYLE_NO_FRAME = 2; // 0x2
-    field public static final int STYLE_NO_INPUT = 3; // 0x3
-    field public static final int STYLE_NO_TITLE = 1; // 0x1
-  }
-
-  public class Fragment implements androidx.activity.result.ActivityResultCaller android.content.ComponentCallbacks androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner android.view.View.OnCreateContextMenuListener androidx.lifecycle.ViewModelStoreOwner {
-    ctor public Fragment();
-    ctor @ContentView public Fragment(@LayoutRes int);
-    method public void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method public final boolean equals(Object?);
-    method public final androidx.fragment.app.FragmentActivity? getActivity();
-    method public boolean getAllowEnterTransitionOverlap();
-    method public boolean getAllowReturnTransitionOverlap();
-    method public final android.os.Bundle? getArguments();
-    method public final androidx.fragment.app.FragmentManager getChildFragmentManager();
-    method public android.content.Context? getContext();
-    method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
-    method public Object? getEnterTransition();
-    method public Object? getExitTransition();
-    method @Deprecated public final androidx.fragment.app.FragmentManager? getFragmentManager();
-    method public final Object? getHost();
-    method public final int getId();
-    method public final android.view.LayoutInflater getLayoutInflater();
-    method public androidx.lifecycle.Lifecycle getLifecycle();
-    method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
-    method public final androidx.fragment.app.Fragment? getParentFragment();
-    method public final androidx.fragment.app.FragmentManager getParentFragmentManager();
-    method public Object? getReenterTransition();
-    method public final android.content.res.Resources getResources();
-    method @Deprecated public final boolean getRetainInstance();
-    method public Object? getReturnTransition();
-    method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
-    method public Object? getSharedElementEnterTransition();
-    method public Object? getSharedElementReturnTransition();
-    method public final String getString(@StringRes int);
-    method public final String getString(@StringRes int, java.lang.Object!...);
-    method public final String? getTag();
-    method @Deprecated public final androidx.fragment.app.Fragment? getTargetFragment();
-    method @Deprecated public final int getTargetRequestCode();
-    method public final CharSequence getText(@StringRes int);
-    method @Deprecated public boolean getUserVisibleHint();
-    method public android.view.View? getView();
-    method @MainThread public androidx.lifecycle.LifecycleOwner getViewLifecycleOwner();
-    method public androidx.lifecycle.LiveData<androidx.lifecycle.LifecycleOwner!> getViewLifecycleOwnerLiveData();
-    method public androidx.lifecycle.ViewModelStore getViewModelStore();
-    method public final int hashCode();
-    method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, String);
-    method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, String, android.os.Bundle?);
-    method public final boolean isAdded();
-    method public final boolean isDetached();
-    method public final boolean isHidden();
-    method public final boolean isInLayout();
-    method public final boolean isRemoving();
-    method public final boolean isResumed();
-    method public final boolean isStateSaved();
-    method public final boolean isVisible();
-    method @Deprecated @CallSuper @MainThread public void onActivityCreated(android.os.Bundle?);
-    method @Deprecated public void onActivityResult(int, int, android.content.Intent?);
-    method @CallSuper @MainThread public void onAttach(android.content.Context);
-    method @Deprecated @CallSuper @MainThread public void onAttach(android.app.Activity);
-    method @Deprecated @MainThread public void onAttachFragment(androidx.fragment.app.Fragment);
-    method @CallSuper public void onConfigurationChanged(android.content.res.Configuration);
-    method @MainThread public boolean onContextItemSelected(android.view.MenuItem);
-    method @CallSuper @MainThread public void onCreate(android.os.Bundle?);
-    method @MainThread public android.view.animation.Animation? onCreateAnimation(int, boolean, int);
-    method @MainThread public android.animation.Animator? onCreateAnimator(int, boolean, int);
-    method @MainThread public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo?);
-    method @Deprecated @MainThread public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
-    method @MainThread public android.view.View? onCreateView(android.view.LayoutInflater, android.view.ViewGroup?, android.os.Bundle?);
-    method @CallSuper @MainThread public void onDestroy();
-    method @Deprecated @MainThread public void onDestroyOptionsMenu();
-    method @CallSuper @MainThread public void onDestroyView();
-    method @CallSuper @MainThread public void onDetach();
-    method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle?);
-    method @MainThread public void onHiddenChanged(boolean);
-    method @CallSuper @UiThread public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle?);
-    method @Deprecated @CallSuper @UiThread public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle?);
-    method @CallSuper @MainThread public void onLowMemory();
-    method public void onMultiWindowModeChanged(boolean);
-    method @Deprecated @MainThread public boolean onOptionsItemSelected(android.view.MenuItem);
-    method @Deprecated @MainThread public void onOptionsMenuClosed(android.view.Menu);
-    method @CallSuper @MainThread public void onPause();
-    method public void onPictureInPictureModeChanged(boolean);
-    method @Deprecated @MainThread public void onPrepareOptionsMenu(android.view.Menu);
-    method @MainThread public void onPrimaryNavigationFragmentChanged(boolean);
-    method @Deprecated public void onRequestPermissionsResult(int, String![], int[]);
-    method @CallSuper @MainThread public void onResume();
-    method @MainThread public void onSaveInstanceState(android.os.Bundle);
-    method @CallSuper @MainThread public void onStart();
-    method @CallSuper @MainThread public void onStop();
-    method @MainThread public void onViewCreated(android.view.View, android.os.Bundle?);
-    method @CallSuper @MainThread public void onViewStateRestored(android.os.Bundle?);
-    method public void postponeEnterTransition();
-    method public final void postponeEnterTransition(long, java.util.concurrent.TimeUnit);
-    method @MainThread public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method @MainThread public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
-    method public void registerForContextMenu(android.view.View);
-    method @Deprecated public final void requestPermissions(String![], int);
-    method public final androidx.fragment.app.FragmentActivity requireActivity();
-    method public final android.os.Bundle requireArguments();
-    method public final android.content.Context requireContext();
-    method @Deprecated public final androidx.fragment.app.FragmentManager requireFragmentManager();
-    method public final Object requireHost();
-    method public final androidx.fragment.app.Fragment requireParentFragment();
-    method public final android.view.View requireView();
-    method public void setAllowEnterTransitionOverlap(boolean);
-    method public void setAllowReturnTransitionOverlap(boolean);
-    method public void setArguments(android.os.Bundle?);
-    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void setEnterTransition(Object?);
-    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void setExitTransition(Object?);
-    method @Deprecated public void setHasOptionsMenu(boolean);
-    method public void setInitialSavedState(androidx.fragment.app.Fragment.SavedState?);
-    method public void setMenuVisibility(boolean);
-    method public void setReenterTransition(Object?);
-    method @Deprecated public void setRetainInstance(boolean);
-    method public void setReturnTransition(Object?);
-    method public void setSharedElementEnterTransition(Object?);
-    method public void setSharedElementReturnTransition(Object?);
-    method @Deprecated public void setTargetFragment(androidx.fragment.app.Fragment?, int);
-    method @Deprecated public void setUserVisibleHint(boolean);
-    method public boolean shouldShowRequestPermissionRationale(String);
-    method public void startActivity(android.content.Intent!);
-    method public void startActivity(android.content.Intent!, android.os.Bundle?);
-    method @Deprecated public void startActivityForResult(android.content.Intent!, int);
-    method @Deprecated public void startActivityForResult(android.content.Intent!, int, android.os.Bundle?);
-    method @Deprecated public void startIntentSenderForResult(android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
-    method public void startPostponedEnterTransition();
-    method public void unregisterForContextMenu(android.view.View);
-  }
-
-  public static class Fragment.InstantiationException extends java.lang.RuntimeException {
-    ctor public Fragment.InstantiationException(String, Exception?);
-  }
-
-  public static class Fragment.SavedState implements android.os.Parcelable {
-    method public int describeContents();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<androidx.fragment.app.Fragment.SavedState!> CREATOR;
-  }
-
-  public class FragmentActivity extends androidx.activity.ComponentActivity implements androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback androidx.lifecycle.LifecycleOwner {
-    ctor public FragmentActivity();
-    ctor @ContentView public FragmentActivity(@LayoutRes int);
-    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
-    method @Deprecated public androidx.loader.app.LoaderManager getSupportLoaderManager();
-    method @Deprecated @MainThread public void onAttachFragment(androidx.fragment.app.Fragment);
-    method protected void onResumeFragments();
-    method public void onStateNotSaved();
-    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int);
-    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int, android.os.Bundle?);
-    method @Deprecated public void startIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
-    method public void supportFinishAfterTransition();
-    method @Deprecated public void supportInvalidateOptionsMenu();
-    method public void supportPostponeEnterTransition();
-    method public void supportStartPostponedEnterTransition();
-    method @Deprecated public final void validateRequestPermissionsRequestCode(int);
-  }
-
-  public abstract class FragmentContainer {
-    ctor public FragmentContainer();
-    method @Deprecated public androidx.fragment.app.Fragment instantiate(android.content.Context, String, android.os.Bundle?);
-    method public abstract android.view.View? onFindViewById(@IdRes int);
-    method public abstract boolean onHasView();
-  }
-
-  public final class FragmentContainerView extends android.widget.FrameLayout {
-    ctor public FragmentContainerView(android.content.Context context);
-    ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs, optional int defStyleAttr);
-    ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs);
-    method public <F extends androidx.fragment.app.Fragment> F! getFragment();
-  }
-
-  public class FragmentController {
-    method public void attachHost(androidx.fragment.app.Fragment?);
-    method public static androidx.fragment.app.FragmentController createController(androidx.fragment.app.FragmentHostCallback<?>);
-    method public void dispatchActivityCreated();
-    method @Deprecated public void dispatchConfigurationChanged(android.content.res.Configuration);
-    method public boolean dispatchContextItemSelected(android.view.MenuItem);
-    method public void dispatchCreate();
-    method @Deprecated public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
-    method public void dispatchDestroy();
-    method public void dispatchDestroyView();
-    method @Deprecated public void dispatchLowMemory();
-    method @Deprecated public void dispatchMultiWindowModeChanged(boolean);
-    method @Deprecated public boolean dispatchOptionsItemSelected(android.view.MenuItem);
-    method @Deprecated public void dispatchOptionsMenuClosed(android.view.Menu);
-    method public void dispatchPause();
-    method @Deprecated public void dispatchPictureInPictureModeChanged(boolean);
-    method @Deprecated public boolean dispatchPrepareOptionsMenu(android.view.Menu);
-    method @Deprecated public void dispatchReallyStop();
-    method public void dispatchResume();
-    method public void dispatchStart();
-    method public void dispatchStop();
-    method @Deprecated public void doLoaderDestroy();
-    method @Deprecated public void doLoaderRetain();
-    method @Deprecated public void doLoaderStart();
-    method @Deprecated public void doLoaderStop(boolean);
-    method @Deprecated public void dumpLoaders(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method public boolean execPendingActions();
-    method public androidx.fragment.app.Fragment? findFragmentByWho(String);
-    method public java.util.List<androidx.fragment.app.Fragment!> getActiveFragments(java.util.List<androidx.fragment.app.Fragment!>!);
-    method public int getActiveFragmentsCount();
-    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
-    method @Deprecated public androidx.loader.app.LoaderManager! getSupportLoaderManager();
-    method public void noteStateNotSaved();
-    method public android.view.View? onCreateView(android.view.View?, String, android.content.Context, android.util.AttributeSet);
-    method @Deprecated public void reportLoaderStart();
-    method @Deprecated public void restoreAllState(android.os.Parcelable?, java.util.List<androidx.fragment.app.Fragment!>?);
-    method @Deprecated public void restoreAllState(android.os.Parcelable?, androidx.fragment.app.FragmentManagerNonConfig?);
-    method @Deprecated public void restoreLoaderNonConfig(androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>!);
-    method @Deprecated public void restoreSaveState(android.os.Parcelable?);
-    method @Deprecated public androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>? retainLoaderNonConfig();
-    method @Deprecated public androidx.fragment.app.FragmentManagerNonConfig? retainNestedNonConfig();
-    method @Deprecated public java.util.List<androidx.fragment.app.Fragment!>? retainNonConfig();
-    method @Deprecated public android.os.Parcelable? saveAllState();
-  }
-
-  public class FragmentFactory {
-    ctor public FragmentFactory();
-    method public androidx.fragment.app.Fragment instantiate(ClassLoader, String);
-    method public static Class<? extends androidx.fragment.app.Fragment> loadFragmentClass(ClassLoader, String);
-  }
-
-  public abstract class FragmentHostCallback<E> extends androidx.fragment.app.FragmentContainer {
-    ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
-    method public void onDump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method public android.view.View? onFindViewById(int);
-    method public abstract E? onGetHost();
-    method public android.view.LayoutInflater onGetLayoutInflater();
-    method public int onGetWindowAnimations();
-    method public boolean onHasView();
-    method public boolean onHasWindowAnimations();
-    method @Deprecated public void onRequestPermissionsFromFragment(androidx.fragment.app.Fragment, String![], int);
-    method public boolean onShouldSaveFragmentState(androidx.fragment.app.Fragment);
-    method public boolean onShouldShowRequestPermissionRationale(String);
-    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int);
-    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int, android.os.Bundle?);
-    method @Deprecated public void onStartIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
-    method public void onSupportInvalidateOptionsMenu();
-  }
-
-  public abstract class FragmentManager implements androidx.fragment.app.FragmentResultOwner {
-    ctor public FragmentManager();
-    method public void addFragmentOnAttachListener(androidx.fragment.app.FragmentOnAttachListener);
-    method public void addOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
-    method public androidx.fragment.app.FragmentTransaction beginTransaction();
-    method public void clearBackStack(String);
-    method public final void clearFragmentResult(String);
-    method public final void clearFragmentResultListener(String);
-    method public void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method @Deprecated public static void enableDebugLogging(boolean);
-    method public boolean executePendingTransactions();
-    method public static <F extends androidx.fragment.app.Fragment> F findFragment(android.view.View);
-    method public androidx.fragment.app.Fragment? findFragmentById(@IdRes int);
-    method public androidx.fragment.app.Fragment? findFragmentByTag(String?);
-    method public androidx.fragment.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
-    method public int getBackStackEntryCount();
-    method public androidx.fragment.app.Fragment? getFragment(android.os.Bundle, String);
-    method public androidx.fragment.app.FragmentFactory getFragmentFactory();
-    method public java.util.List<androidx.fragment.app.Fragment!> getFragments();
-    method public androidx.fragment.app.Fragment? getPrimaryNavigationFragment();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy? getStrictModePolicy();
-    method public boolean isDestroyed();
-    method public boolean isStateSaved();
-    method public void popBackStack();
-    method public void popBackStack(String?, int);
-    method public void popBackStack(int, int);
-    method public boolean popBackStackImmediate();
-    method public boolean popBackStackImmediate(String?, int);
-    method public boolean popBackStackImmediate(int, int);
-    method public void putFragment(android.os.Bundle, String, androidx.fragment.app.Fragment);
-    method public void registerFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
-    method public void removeFragmentOnAttachListener(androidx.fragment.app.FragmentOnAttachListener);
-    method public void removeOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
-    method public void restoreBackStack(String);
-    method public void saveBackStack(String);
-    method public androidx.fragment.app.Fragment.SavedState? saveFragmentInstanceState(androidx.fragment.app.Fragment);
-    method public void setFragmentFactory(androidx.fragment.app.FragmentFactory);
-    method public final void setFragmentResult(String, android.os.Bundle);
-    method public final void setFragmentResultListener(String, androidx.lifecycle.LifecycleOwner, androidx.fragment.app.FragmentResultListener);
-    method public void setStrictModePolicy(androidx.fragment.app.strictmode.FragmentStrictMode.Policy?);
-    method public void unregisterFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks);
-    field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
-  }
-
-  public static interface FragmentManager.BackStackEntry {
-    method @Deprecated public CharSequence? getBreadCrumbShortTitle();
-    method @Deprecated @StringRes public int getBreadCrumbShortTitleRes();
-    method @Deprecated public CharSequence? getBreadCrumbTitle();
-    method @Deprecated @StringRes public int getBreadCrumbTitleRes();
-    method public int getId();
-    method public String? getName();
-  }
-
-  public abstract static class FragmentManager.FragmentLifecycleCallbacks {
-    ctor public FragmentManager.FragmentLifecycleCallbacks();
-    method @Deprecated public void onFragmentActivityCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
-    method public void onFragmentAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
-    method public void onFragmentCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
-    method public void onFragmentDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentDetached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentPaused(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentPreAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
-    method public void onFragmentPreCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
-    method public void onFragmentResumed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentSaveInstanceState(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle);
-    method public void onFragmentStarted(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentStopped(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentViewCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.view.View, android.os.Bundle?);
-    method public void onFragmentViewDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-  }
-
-  public static interface FragmentManager.OnBackStackChangedListener {
-    method @MainThread public void onBackStackChanged();
-  }
-
-  @Deprecated public class FragmentManagerNonConfig {
-  }
-
-  public interface FragmentOnAttachListener {
-    method @MainThread public void onAttachFragment(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-  }
-
-  @Deprecated public abstract class FragmentPagerAdapter extends androidx.viewpager.widget.PagerAdapter {
-    ctor @Deprecated public FragmentPagerAdapter(androidx.fragment.app.FragmentManager);
-    ctor @Deprecated public FragmentPagerAdapter(androidx.fragment.app.FragmentManager, int);
-    method @Deprecated public abstract androidx.fragment.app.Fragment getItem(int);
-    method @Deprecated public long getItemId(int);
-    method @Deprecated public boolean isViewFromObject(android.view.View, Object);
-    field @Deprecated public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1; // 0x1
-    field @Deprecated public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0; // 0x0
-  }
-
-  public interface FragmentResultListener {
-    method public void onFragmentResult(String, android.os.Bundle);
-  }
-
-  public interface FragmentResultOwner {
-    method public void clearFragmentResult(String);
-    method public void clearFragmentResultListener(String);
-    method public void setFragmentResult(String, android.os.Bundle);
-    method public void setFragmentResultListener(String, androidx.lifecycle.LifecycleOwner, androidx.fragment.app.FragmentResultListener);
-  }
-
-  @Deprecated public abstract class FragmentStatePagerAdapter extends androidx.viewpager.widget.PagerAdapter {
-    ctor @Deprecated public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager);
-    ctor @Deprecated public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager, int);
-    method @Deprecated public abstract androidx.fragment.app.Fragment getItem(int);
-    method @Deprecated public boolean isViewFromObject(android.view.View, Object);
-    field @Deprecated public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1; // 0x1
-    field @Deprecated public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0; // 0x0
-  }
-
-  @Deprecated public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
-    ctor @Deprecated public FragmentTabHost(android.content.Context);
-    ctor @Deprecated public FragmentTabHost(android.content.Context, android.util.AttributeSet?);
-    method @Deprecated public void addTab(android.widget.TabHost.TabSpec, Class<?>, android.os.Bundle?);
-    method @Deprecated public void onTabChanged(String?);
-    method @Deprecated public void setup(android.content.Context, androidx.fragment.app.FragmentManager);
-    method @Deprecated public void setup(android.content.Context, androidx.fragment.app.FragmentManager, int);
-  }
-
-  public abstract class FragmentTransaction {
-    ctor @Deprecated public FragmentTransaction();
-    method public final androidx.fragment.app.FragmentTransaction add(Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
-    method public androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.Fragment, String?);
-    method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
-    method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment);
-    method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
-    method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment, String?);
-    method public androidx.fragment.app.FragmentTransaction addSharedElement(android.view.View, String);
-    method public androidx.fragment.app.FragmentTransaction addToBackStack(String?);
-    method public androidx.fragment.app.FragmentTransaction attach(androidx.fragment.app.Fragment);
-    method public abstract int commit();
-    method public abstract int commitAllowingStateLoss();
-    method public abstract void commitNow();
-    method public abstract void commitNowAllowingStateLoss();
-    method public androidx.fragment.app.FragmentTransaction detach(androidx.fragment.app.Fragment);
-    method public androidx.fragment.app.FragmentTransaction disallowAddToBackStack();
-    method public androidx.fragment.app.FragmentTransaction hide(androidx.fragment.app.Fragment);
-    method public boolean isAddToBackStackAllowed();
-    method public boolean isEmpty();
-    method public androidx.fragment.app.FragmentTransaction remove(androidx.fragment.app.Fragment);
-    method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
-    method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment);
-    method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
-    method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment, String?);
-    method public androidx.fragment.app.FragmentTransaction runOnCommit(Runnable);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setAllowOptimization(boolean);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(@StringRes int);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(CharSequence?);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(@StringRes int);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(CharSequence?);
-    method public androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int);
-    method public androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int);
-    method public androidx.fragment.app.FragmentTransaction setMaxLifecycle(androidx.fragment.app.Fragment, androidx.lifecycle.Lifecycle.State);
-    method public androidx.fragment.app.FragmentTransaction setPrimaryNavigationFragment(androidx.fragment.app.Fragment?);
-    method public androidx.fragment.app.FragmentTransaction setReorderingAllowed(boolean);
-    method public androidx.fragment.app.FragmentTransaction setTransition(int);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setTransitionStyle(@StyleRes int);
-    method public androidx.fragment.app.FragmentTransaction show(androidx.fragment.app.Fragment);
-    field public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
-    field public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
-    field public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002
-    field public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003
-    field public static final int TRANSIT_FRAGMENT_MATCH_ACTIVITY_CLOSE = 8197; // 0x2005
-    field public static final int TRANSIT_FRAGMENT_MATCH_ACTIVITY_OPEN = 4100; // 0x1004
-    field public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001
-    field public static final int TRANSIT_NONE = 0; // 0x0
-    field public static final int TRANSIT_UNSET = -1; // 0xffffffff
-  }
-
-  public class ListFragment extends androidx.fragment.app.Fragment {
-    ctor public ListFragment();
-    method public android.widget.ListAdapter? getListAdapter();
-    method public android.widget.ListView getListView();
-    method public long getSelectedItemId();
-    method public int getSelectedItemPosition();
-    method public void onListItemClick(android.widget.ListView, android.view.View, int, long);
-    method public final android.widget.ListAdapter requireListAdapter();
-    method public void setEmptyText(CharSequence?);
-    method public void setListAdapter(android.widget.ListAdapter?);
-    method public void setListShown(boolean);
-    method public void setListShownNoAnimation(boolean);
-    method public void setSelection(int);
-  }
-
-}
-
-package androidx.fragment.app.strictmode {
-
-  public final class FragmentReuseViolation extends androidx.fragment.app.strictmode.Violation {
-    method public String getPreviousFragmentId();
-    property public final String previousFragmentId;
-  }
-
-  public final class FragmentStrictMode {
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy getDefaultPolicy();
-    method @VisibleForTesting public void onPolicyViolation(androidx.fragment.app.strictmode.Violation violation);
-    method public void setDefaultPolicy(androidx.fragment.app.strictmode.FragmentStrictMode.Policy);
-    property public final androidx.fragment.app.strictmode.FragmentStrictMode.Policy defaultPolicy;
-    field public static final androidx.fragment.app.strictmode.FragmentStrictMode INSTANCE;
-  }
-
-  public static fun interface FragmentStrictMode.OnViolationListener {
-    method public void onViolation(androidx.fragment.app.strictmode.Violation violation);
-  }
-
-  public static final class FragmentStrictMode.Policy {
-    field public static final androidx.fragment.app.strictmode.FragmentStrictMode.Policy LAX;
-  }
-
-  public static final class FragmentStrictMode.Policy.Builder {
-    ctor public FragmentStrictMode.Policy.Builder();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder allowViolation(Class<? extends androidx.fragment.app.Fragment> fragmentClass, Class<? extends androidx.fragment.app.strictmode.Violation> violationClass);
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder allowViolation(String fragmentClass, Class<? extends androidx.fragment.app.strictmode.Violation> violationClass);
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy build();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectFragmentReuse();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectFragmentTagUsage();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectRetainInstanceUsage();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectSetUserVisibleHint();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectTargetFragmentUsage();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectWrongFragmentContainer();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyDeath();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyListener(androidx.fragment.app.strictmode.FragmentStrictMode.OnViolationListener listener);
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyLog();
-  }
-
-  public final class FragmentTagUsageViolation extends androidx.fragment.app.strictmode.Violation {
-    method public android.view.ViewGroup? getParentContainer();
-    property public final android.view.ViewGroup? parentContainer;
-  }
-
-  public final class GetRetainInstanceUsageViolation extends androidx.fragment.app.strictmode.RetainInstanceUsageViolation {
-  }
-
-  public final class GetTargetFragmentRequestCodeUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
-  }
-
-  public final class GetTargetFragmentUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
-  }
-
-  public abstract class RetainInstanceUsageViolation extends androidx.fragment.app.strictmode.Violation {
-  }
-
-  public final class SetRetainInstanceUsageViolation extends androidx.fragment.app.strictmode.RetainInstanceUsageViolation {
-  }
-
-  public final class SetTargetFragmentUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
-    method public int getRequestCode();
-    method public androidx.fragment.app.Fragment getTargetFragment();
-    property public final int requestCode;
-    property public final androidx.fragment.app.Fragment targetFragment;
-  }
-
-  public final class SetUserVisibleHintViolation extends androidx.fragment.app.strictmode.Violation {
-    method public boolean isVisibleToUser();
-    property public final boolean isVisibleToUser;
-  }
-
-  public abstract class TargetFragmentUsageViolation extends androidx.fragment.app.strictmode.Violation {
-  }
-
-  public abstract class Violation extends java.lang.RuntimeException {
-    method public final androidx.fragment.app.Fragment getFragment();
-    property public final androidx.fragment.app.Fragment fragment;
-  }
-
-  public final class WrongFragmentContainerViolation extends androidx.fragment.app.strictmode.Violation {
-    method public android.view.ViewGroup getContainer();
-    property public final android.view.ViewGroup container;
-  }
-
-}
-
diff --git a/fragment/fragment/api/public_plus_experimental_1.5.0-beta01.txt b/fragment/fragment/api/public_plus_experimental_1.5.0-beta01.txt
deleted file mode 100644
index 32377c9..0000000
--- a/fragment/fragment/api/public_plus_experimental_1.5.0-beta01.txt
+++ /dev/null
@@ -1,543 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
-  public class DialogFragment extends androidx.fragment.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
-    ctor public DialogFragment();
-    ctor public DialogFragment(@LayoutRes int);
-    method public void dismiss();
-    method public void dismissAllowingStateLoss();
-    method @MainThread public void dismissNow();
-    method public android.app.Dialog? getDialog();
-    method public boolean getShowsDialog();
-    method @StyleRes public int getTheme();
-    method public boolean isCancelable();
-    method public void onCancel(android.content.DialogInterface);
-    method @MainThread public android.app.Dialog onCreateDialog(android.os.Bundle?);
-    method public void onDismiss(android.content.DialogInterface);
-    method public final android.app.Dialog requireDialog();
-    method public void setCancelable(boolean);
-    method public void setShowsDialog(boolean);
-    method public void setStyle(int, @StyleRes int);
-    method public void show(androidx.fragment.app.FragmentManager, String?);
-    method public int show(androidx.fragment.app.FragmentTransaction, String?);
-    method public void showNow(androidx.fragment.app.FragmentManager, String?);
-    field public static final int STYLE_NORMAL = 0; // 0x0
-    field public static final int STYLE_NO_FRAME = 2; // 0x2
-    field public static final int STYLE_NO_INPUT = 3; // 0x3
-    field public static final int STYLE_NO_TITLE = 1; // 0x1
-  }
-
-  public class Fragment implements androidx.activity.result.ActivityResultCaller android.content.ComponentCallbacks androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner android.view.View.OnCreateContextMenuListener androidx.lifecycle.ViewModelStoreOwner {
-    ctor public Fragment();
-    ctor @ContentView public Fragment(@LayoutRes int);
-    method public void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method public final boolean equals(Object?);
-    method public final androidx.fragment.app.FragmentActivity? getActivity();
-    method public boolean getAllowEnterTransitionOverlap();
-    method public boolean getAllowReturnTransitionOverlap();
-    method public final android.os.Bundle? getArguments();
-    method public final androidx.fragment.app.FragmentManager getChildFragmentManager();
-    method public android.content.Context? getContext();
-    method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
-    method public Object? getEnterTransition();
-    method public Object? getExitTransition();
-    method @Deprecated public final androidx.fragment.app.FragmentManager? getFragmentManager();
-    method public final Object? getHost();
-    method public final int getId();
-    method public final android.view.LayoutInflater getLayoutInflater();
-    method public androidx.lifecycle.Lifecycle getLifecycle();
-    method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
-    method public final androidx.fragment.app.Fragment? getParentFragment();
-    method public final androidx.fragment.app.FragmentManager getParentFragmentManager();
-    method public Object? getReenterTransition();
-    method public final android.content.res.Resources getResources();
-    method @Deprecated public final boolean getRetainInstance();
-    method public Object? getReturnTransition();
-    method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
-    method public Object? getSharedElementEnterTransition();
-    method public Object? getSharedElementReturnTransition();
-    method public final String getString(@StringRes int);
-    method public final String getString(@StringRes int, java.lang.Object!...);
-    method public final String? getTag();
-    method @Deprecated public final androidx.fragment.app.Fragment? getTargetFragment();
-    method @Deprecated public final int getTargetRequestCode();
-    method public final CharSequence getText(@StringRes int);
-    method @Deprecated public boolean getUserVisibleHint();
-    method public android.view.View? getView();
-    method @MainThread public androidx.lifecycle.LifecycleOwner getViewLifecycleOwner();
-    method public androidx.lifecycle.LiveData<androidx.lifecycle.LifecycleOwner!> getViewLifecycleOwnerLiveData();
-    method public androidx.lifecycle.ViewModelStore getViewModelStore();
-    method public final int hashCode();
-    method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, String);
-    method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, String, android.os.Bundle?);
-    method public final boolean isAdded();
-    method public final boolean isDetached();
-    method public final boolean isHidden();
-    method public final boolean isInLayout();
-    method public final boolean isRemoving();
-    method public final boolean isResumed();
-    method public final boolean isStateSaved();
-    method public final boolean isVisible();
-    method @Deprecated @CallSuper @MainThread public void onActivityCreated(android.os.Bundle?);
-    method @Deprecated public void onActivityResult(int, int, android.content.Intent?);
-    method @CallSuper @MainThread public void onAttach(android.content.Context);
-    method @Deprecated @CallSuper @MainThread public void onAttach(android.app.Activity);
-    method @Deprecated @MainThread public void onAttachFragment(androidx.fragment.app.Fragment);
-    method @CallSuper public void onConfigurationChanged(android.content.res.Configuration);
-    method @MainThread public boolean onContextItemSelected(android.view.MenuItem);
-    method @CallSuper @MainThread public void onCreate(android.os.Bundle?);
-    method @MainThread public android.view.animation.Animation? onCreateAnimation(int, boolean, int);
-    method @MainThread public android.animation.Animator? onCreateAnimator(int, boolean, int);
-    method @MainThread public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo?);
-    method @Deprecated @MainThread public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
-    method @MainThread public android.view.View? onCreateView(android.view.LayoutInflater, android.view.ViewGroup?, android.os.Bundle?);
-    method @CallSuper @MainThread public void onDestroy();
-    method @Deprecated @MainThread public void onDestroyOptionsMenu();
-    method @CallSuper @MainThread public void onDestroyView();
-    method @CallSuper @MainThread public void onDetach();
-    method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle?);
-    method @MainThread public void onHiddenChanged(boolean);
-    method @CallSuper @UiThread public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle?);
-    method @Deprecated @CallSuper @UiThread public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle?);
-    method @CallSuper @MainThread public void onLowMemory();
-    method public void onMultiWindowModeChanged(boolean);
-    method @Deprecated @MainThread public boolean onOptionsItemSelected(android.view.MenuItem);
-    method @Deprecated @MainThread public void onOptionsMenuClosed(android.view.Menu);
-    method @CallSuper @MainThread public void onPause();
-    method public void onPictureInPictureModeChanged(boolean);
-    method @Deprecated @MainThread public void onPrepareOptionsMenu(android.view.Menu);
-    method @MainThread public void onPrimaryNavigationFragmentChanged(boolean);
-    method @Deprecated public void onRequestPermissionsResult(int, String![], int[]);
-    method @CallSuper @MainThread public void onResume();
-    method @MainThread public void onSaveInstanceState(android.os.Bundle);
-    method @CallSuper @MainThread public void onStart();
-    method @CallSuper @MainThread public void onStop();
-    method @MainThread public void onViewCreated(android.view.View, android.os.Bundle?);
-    method @CallSuper @MainThread public void onViewStateRestored(android.os.Bundle?);
-    method public void postponeEnterTransition();
-    method public final void postponeEnterTransition(long, java.util.concurrent.TimeUnit);
-    method @MainThread public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method @MainThread public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
-    method public void registerForContextMenu(android.view.View);
-    method @Deprecated public final void requestPermissions(String![], int);
-    method public final androidx.fragment.app.FragmentActivity requireActivity();
-    method public final android.os.Bundle requireArguments();
-    method public final android.content.Context requireContext();
-    method @Deprecated public final androidx.fragment.app.FragmentManager requireFragmentManager();
-    method public final Object requireHost();
-    method public final androidx.fragment.app.Fragment requireParentFragment();
-    method public final android.view.View requireView();
-    method public void setAllowEnterTransitionOverlap(boolean);
-    method public void setAllowReturnTransitionOverlap(boolean);
-    method public void setArguments(android.os.Bundle?);
-    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void setEnterTransition(Object?);
-    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void setExitTransition(Object?);
-    method @Deprecated public void setHasOptionsMenu(boolean);
-    method public void setInitialSavedState(androidx.fragment.app.Fragment.SavedState?);
-    method public void setMenuVisibility(boolean);
-    method public void setReenterTransition(Object?);
-    method @Deprecated public void setRetainInstance(boolean);
-    method public void setReturnTransition(Object?);
-    method public void setSharedElementEnterTransition(Object?);
-    method public void setSharedElementReturnTransition(Object?);
-    method @Deprecated public void setTargetFragment(androidx.fragment.app.Fragment?, int);
-    method @Deprecated public void setUserVisibleHint(boolean);
-    method public boolean shouldShowRequestPermissionRationale(String);
-    method public void startActivity(android.content.Intent!);
-    method public void startActivity(android.content.Intent!, android.os.Bundle?);
-    method @Deprecated public void startActivityForResult(android.content.Intent!, int);
-    method @Deprecated public void startActivityForResult(android.content.Intent!, int, android.os.Bundle?);
-    method @Deprecated public void startIntentSenderForResult(android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
-    method public void startPostponedEnterTransition();
-    method public void unregisterForContextMenu(android.view.View);
-  }
-
-  public static class Fragment.InstantiationException extends java.lang.RuntimeException {
-    ctor public Fragment.InstantiationException(String, Exception?);
-  }
-
-  public static class Fragment.SavedState implements android.os.Parcelable {
-    method public int describeContents();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<androidx.fragment.app.Fragment.SavedState!> CREATOR;
-  }
-
-  public class FragmentActivity extends androidx.activity.ComponentActivity implements androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback androidx.lifecycle.LifecycleOwner {
-    ctor public FragmentActivity();
-    ctor @ContentView public FragmentActivity(@LayoutRes int);
-    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
-    method @Deprecated public androidx.loader.app.LoaderManager getSupportLoaderManager();
-    method @Deprecated @MainThread public void onAttachFragment(androidx.fragment.app.Fragment);
-    method protected void onResumeFragments();
-    method public void onStateNotSaved();
-    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int);
-    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int, android.os.Bundle?);
-    method @Deprecated public void startIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
-    method public void supportFinishAfterTransition();
-    method @Deprecated public void supportInvalidateOptionsMenu();
-    method public void supportPostponeEnterTransition();
-    method public void supportStartPostponedEnterTransition();
-    method @Deprecated public final void validateRequestPermissionsRequestCode(int);
-  }
-
-  public abstract class FragmentContainer {
-    ctor public FragmentContainer();
-    method @Deprecated public androidx.fragment.app.Fragment instantiate(android.content.Context, String, android.os.Bundle?);
-    method public abstract android.view.View? onFindViewById(@IdRes int);
-    method public abstract boolean onHasView();
-  }
-
-  public final class FragmentContainerView extends android.widget.FrameLayout {
-    ctor public FragmentContainerView(android.content.Context context);
-    ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs, optional int defStyleAttr);
-    ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs);
-    method public <F extends androidx.fragment.app.Fragment> F! getFragment();
-  }
-
-  public class FragmentController {
-    method public void attachHost(androidx.fragment.app.Fragment?);
-    method public static androidx.fragment.app.FragmentController createController(androidx.fragment.app.FragmentHostCallback<?>);
-    method public void dispatchActivityCreated();
-    method @Deprecated public void dispatchConfigurationChanged(android.content.res.Configuration);
-    method public boolean dispatchContextItemSelected(android.view.MenuItem);
-    method public void dispatchCreate();
-    method @Deprecated public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
-    method public void dispatchDestroy();
-    method public void dispatchDestroyView();
-    method @Deprecated public void dispatchLowMemory();
-    method @Deprecated public void dispatchMultiWindowModeChanged(boolean);
-    method @Deprecated public boolean dispatchOptionsItemSelected(android.view.MenuItem);
-    method @Deprecated public void dispatchOptionsMenuClosed(android.view.Menu);
-    method public void dispatchPause();
-    method @Deprecated public void dispatchPictureInPictureModeChanged(boolean);
-    method @Deprecated public boolean dispatchPrepareOptionsMenu(android.view.Menu);
-    method @Deprecated public void dispatchReallyStop();
-    method public void dispatchResume();
-    method public void dispatchStart();
-    method public void dispatchStop();
-    method @Deprecated public void doLoaderDestroy();
-    method @Deprecated public void doLoaderRetain();
-    method @Deprecated public void doLoaderStart();
-    method @Deprecated public void doLoaderStop(boolean);
-    method @Deprecated public void dumpLoaders(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method public boolean execPendingActions();
-    method public androidx.fragment.app.Fragment? findFragmentByWho(String);
-    method public java.util.List<androidx.fragment.app.Fragment!> getActiveFragments(java.util.List<androidx.fragment.app.Fragment!>!);
-    method public int getActiveFragmentsCount();
-    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
-    method @Deprecated public androidx.loader.app.LoaderManager! getSupportLoaderManager();
-    method public void noteStateNotSaved();
-    method public android.view.View? onCreateView(android.view.View?, String, android.content.Context, android.util.AttributeSet);
-    method @Deprecated public void reportLoaderStart();
-    method @Deprecated public void restoreAllState(android.os.Parcelable?, java.util.List<androidx.fragment.app.Fragment!>?);
-    method @Deprecated public void restoreAllState(android.os.Parcelable?, androidx.fragment.app.FragmentManagerNonConfig?);
-    method @Deprecated public void restoreLoaderNonConfig(androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>!);
-    method @Deprecated public void restoreSaveState(android.os.Parcelable?);
-    method @Deprecated public androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>? retainLoaderNonConfig();
-    method @Deprecated public androidx.fragment.app.FragmentManagerNonConfig? retainNestedNonConfig();
-    method @Deprecated public java.util.List<androidx.fragment.app.Fragment!>? retainNonConfig();
-    method @Deprecated public android.os.Parcelable? saveAllState();
-  }
-
-  public class FragmentFactory {
-    ctor public FragmentFactory();
-    method public androidx.fragment.app.Fragment instantiate(ClassLoader, String);
-    method public static Class<? extends androidx.fragment.app.Fragment> loadFragmentClass(ClassLoader, String);
-  }
-
-  public abstract class FragmentHostCallback<E> extends androidx.fragment.app.FragmentContainer {
-    ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
-    method public void onDump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method public android.view.View? onFindViewById(int);
-    method public abstract E? onGetHost();
-    method public android.view.LayoutInflater onGetLayoutInflater();
-    method public int onGetWindowAnimations();
-    method public boolean onHasView();
-    method public boolean onHasWindowAnimations();
-    method @Deprecated public void onRequestPermissionsFromFragment(androidx.fragment.app.Fragment, String![], int);
-    method public boolean onShouldSaveFragmentState(androidx.fragment.app.Fragment);
-    method public boolean onShouldShowRequestPermissionRationale(String);
-    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int);
-    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int, android.os.Bundle?);
-    method @Deprecated public void onStartIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
-    method public void onSupportInvalidateOptionsMenu();
-  }
-
-  public abstract class FragmentManager implements androidx.fragment.app.FragmentResultOwner {
-    ctor public FragmentManager();
-    method public void addFragmentOnAttachListener(androidx.fragment.app.FragmentOnAttachListener);
-    method public void addOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
-    method public androidx.fragment.app.FragmentTransaction beginTransaction();
-    method public void clearBackStack(String);
-    method public final void clearFragmentResult(String);
-    method public final void clearFragmentResultListener(String);
-    method public void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method @Deprecated public static void enableDebugLogging(boolean);
-    method public boolean executePendingTransactions();
-    method public static <F extends androidx.fragment.app.Fragment> F findFragment(android.view.View);
-    method public androidx.fragment.app.Fragment? findFragmentById(@IdRes int);
-    method public androidx.fragment.app.Fragment? findFragmentByTag(String?);
-    method public androidx.fragment.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
-    method public int getBackStackEntryCount();
-    method public androidx.fragment.app.Fragment? getFragment(android.os.Bundle, String);
-    method public androidx.fragment.app.FragmentFactory getFragmentFactory();
-    method public java.util.List<androidx.fragment.app.Fragment!> getFragments();
-    method public androidx.fragment.app.Fragment? getPrimaryNavigationFragment();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy? getStrictModePolicy();
-    method public boolean isDestroyed();
-    method public boolean isStateSaved();
-    method public void popBackStack();
-    method public void popBackStack(String?, int);
-    method public void popBackStack(int, int);
-    method public boolean popBackStackImmediate();
-    method public boolean popBackStackImmediate(String?, int);
-    method public boolean popBackStackImmediate(int, int);
-    method public void putFragment(android.os.Bundle, String, androidx.fragment.app.Fragment);
-    method public void registerFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
-    method public void removeFragmentOnAttachListener(androidx.fragment.app.FragmentOnAttachListener);
-    method public void removeOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
-    method public void restoreBackStack(String);
-    method public void saveBackStack(String);
-    method public androidx.fragment.app.Fragment.SavedState? saveFragmentInstanceState(androidx.fragment.app.Fragment);
-    method public void setFragmentFactory(androidx.fragment.app.FragmentFactory);
-    method public final void setFragmentResult(String, android.os.Bundle);
-    method public final void setFragmentResultListener(String, androidx.lifecycle.LifecycleOwner, androidx.fragment.app.FragmentResultListener);
-    method public void setStrictModePolicy(androidx.fragment.app.strictmode.FragmentStrictMode.Policy?);
-    method public void unregisterFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks);
-    field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
-  }
-
-  public static interface FragmentManager.BackStackEntry {
-    method @Deprecated public CharSequence? getBreadCrumbShortTitle();
-    method @Deprecated @StringRes public int getBreadCrumbShortTitleRes();
-    method @Deprecated public CharSequence? getBreadCrumbTitle();
-    method @Deprecated @StringRes public int getBreadCrumbTitleRes();
-    method public int getId();
-    method public String? getName();
-  }
-
-  public abstract static class FragmentManager.FragmentLifecycleCallbacks {
-    ctor public FragmentManager.FragmentLifecycleCallbacks();
-    method @Deprecated public void onFragmentActivityCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
-    method public void onFragmentAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
-    method public void onFragmentCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
-    method public void onFragmentDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentDetached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentPaused(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentPreAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
-    method public void onFragmentPreCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
-    method public void onFragmentResumed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentSaveInstanceState(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle);
-    method public void onFragmentStarted(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentStopped(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentViewCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.view.View, android.os.Bundle?);
-    method public void onFragmentViewDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-  }
-
-  public static interface FragmentManager.OnBackStackChangedListener {
-    method @MainThread public void onBackStackChanged();
-  }
-
-  @Deprecated public class FragmentManagerNonConfig {
-  }
-
-  public interface FragmentOnAttachListener {
-    method @MainThread public void onAttachFragment(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-  }
-
-  @Deprecated public abstract class FragmentPagerAdapter extends androidx.viewpager.widget.PagerAdapter {
-    ctor @Deprecated public FragmentPagerAdapter(androidx.fragment.app.FragmentManager);
-    ctor @Deprecated public FragmentPagerAdapter(androidx.fragment.app.FragmentManager, int);
-    method @Deprecated public abstract androidx.fragment.app.Fragment getItem(int);
-    method @Deprecated public long getItemId(int);
-    method @Deprecated public boolean isViewFromObject(android.view.View, Object);
-    field @Deprecated public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1; // 0x1
-    field @Deprecated public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0; // 0x0
-  }
-
-  public interface FragmentResultListener {
-    method public void onFragmentResult(String, android.os.Bundle);
-  }
-
-  public interface FragmentResultOwner {
-    method public void clearFragmentResult(String);
-    method public void clearFragmentResultListener(String);
-    method public void setFragmentResult(String, android.os.Bundle);
-    method public void setFragmentResultListener(String, androidx.lifecycle.LifecycleOwner, androidx.fragment.app.FragmentResultListener);
-  }
-
-  @Deprecated public abstract class FragmentStatePagerAdapter extends androidx.viewpager.widget.PagerAdapter {
-    ctor @Deprecated public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager);
-    ctor @Deprecated public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager, int);
-    method @Deprecated public abstract androidx.fragment.app.Fragment getItem(int);
-    method @Deprecated public boolean isViewFromObject(android.view.View, Object);
-    field @Deprecated public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1; // 0x1
-    field @Deprecated public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0; // 0x0
-  }
-
-  @Deprecated public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
-    ctor @Deprecated public FragmentTabHost(android.content.Context);
-    ctor @Deprecated public FragmentTabHost(android.content.Context, android.util.AttributeSet?);
-    method @Deprecated public void addTab(android.widget.TabHost.TabSpec, Class<?>, android.os.Bundle?);
-    method @Deprecated public void onTabChanged(String?);
-    method @Deprecated public void setup(android.content.Context, androidx.fragment.app.FragmentManager);
-    method @Deprecated public void setup(android.content.Context, androidx.fragment.app.FragmentManager, int);
-  }
-
-  public abstract class FragmentTransaction {
-    ctor @Deprecated public FragmentTransaction();
-    method public final androidx.fragment.app.FragmentTransaction add(Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
-    method public androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.Fragment, String?);
-    method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
-    method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment);
-    method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
-    method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment, String?);
-    method public androidx.fragment.app.FragmentTransaction addSharedElement(android.view.View, String);
-    method public androidx.fragment.app.FragmentTransaction addToBackStack(String?);
-    method public androidx.fragment.app.FragmentTransaction attach(androidx.fragment.app.Fragment);
-    method public abstract int commit();
-    method public abstract int commitAllowingStateLoss();
-    method public abstract void commitNow();
-    method public abstract void commitNowAllowingStateLoss();
-    method public androidx.fragment.app.FragmentTransaction detach(androidx.fragment.app.Fragment);
-    method public androidx.fragment.app.FragmentTransaction disallowAddToBackStack();
-    method public androidx.fragment.app.FragmentTransaction hide(androidx.fragment.app.Fragment);
-    method public boolean isAddToBackStackAllowed();
-    method public boolean isEmpty();
-    method public androidx.fragment.app.FragmentTransaction remove(androidx.fragment.app.Fragment);
-    method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
-    method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment);
-    method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
-    method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment, String?);
-    method public androidx.fragment.app.FragmentTransaction runOnCommit(Runnable);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setAllowOptimization(boolean);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(@StringRes int);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(CharSequence?);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(@StringRes int);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(CharSequence?);
-    method public androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int);
-    method public androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int);
-    method public androidx.fragment.app.FragmentTransaction setMaxLifecycle(androidx.fragment.app.Fragment, androidx.lifecycle.Lifecycle.State);
-    method public androidx.fragment.app.FragmentTransaction setPrimaryNavigationFragment(androidx.fragment.app.Fragment?);
-    method public androidx.fragment.app.FragmentTransaction setReorderingAllowed(boolean);
-    method public androidx.fragment.app.FragmentTransaction setTransition(int);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setTransitionStyle(@StyleRes int);
-    method public androidx.fragment.app.FragmentTransaction show(androidx.fragment.app.Fragment);
-    field public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
-    field public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
-    field public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002
-    field public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003
-    field public static final int TRANSIT_FRAGMENT_MATCH_ACTIVITY_CLOSE = 8197; // 0x2005
-    field public static final int TRANSIT_FRAGMENT_MATCH_ACTIVITY_OPEN = 4100; // 0x1004
-    field public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001
-    field public static final int TRANSIT_NONE = 0; // 0x0
-    field public static final int TRANSIT_UNSET = -1; // 0xffffffff
-  }
-
-  public class ListFragment extends androidx.fragment.app.Fragment {
-    ctor public ListFragment();
-    method public android.widget.ListAdapter? getListAdapter();
-    method public android.widget.ListView getListView();
-    method public long getSelectedItemId();
-    method public int getSelectedItemPosition();
-    method public void onListItemClick(android.widget.ListView, android.view.View, int, long);
-    method public final android.widget.ListAdapter requireListAdapter();
-    method public void setEmptyText(CharSequence?);
-    method public void setListAdapter(android.widget.ListAdapter?);
-    method public void setListShown(boolean);
-    method public void setListShownNoAnimation(boolean);
-    method public void setSelection(int);
-  }
-
-}
-
-package androidx.fragment.app.strictmode {
-
-  public final class FragmentReuseViolation extends androidx.fragment.app.strictmode.Violation {
-    method public String getPreviousFragmentId();
-    property public final String previousFragmentId;
-  }
-
-  public final class FragmentStrictMode {
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy getDefaultPolicy();
-    method @VisibleForTesting public void onPolicyViolation(androidx.fragment.app.strictmode.Violation violation);
-    method public void setDefaultPolicy(androidx.fragment.app.strictmode.FragmentStrictMode.Policy);
-    property public final androidx.fragment.app.strictmode.FragmentStrictMode.Policy defaultPolicy;
-    field public static final androidx.fragment.app.strictmode.FragmentStrictMode INSTANCE;
-  }
-
-  public static fun interface FragmentStrictMode.OnViolationListener {
-    method public void onViolation(androidx.fragment.app.strictmode.Violation violation);
-  }
-
-  public static final class FragmentStrictMode.Policy {
-    field public static final androidx.fragment.app.strictmode.FragmentStrictMode.Policy LAX;
-  }
-
-  public static final class FragmentStrictMode.Policy.Builder {
-    ctor public FragmentStrictMode.Policy.Builder();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder allowViolation(Class<? extends androidx.fragment.app.Fragment> fragmentClass, Class<? extends androidx.fragment.app.strictmode.Violation> violationClass);
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder allowViolation(String fragmentClass, Class<? extends androidx.fragment.app.strictmode.Violation> violationClass);
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy build();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectFragmentReuse();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectFragmentTagUsage();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectRetainInstanceUsage();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectSetUserVisibleHint();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectTargetFragmentUsage();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectWrongFragmentContainer();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyDeath();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyListener(androidx.fragment.app.strictmode.FragmentStrictMode.OnViolationListener listener);
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyLog();
-  }
-
-  public final class FragmentTagUsageViolation extends androidx.fragment.app.strictmode.Violation {
-    method public android.view.ViewGroup? getParentContainer();
-    property public final android.view.ViewGroup? parentContainer;
-  }
-
-  public final class GetRetainInstanceUsageViolation extends androidx.fragment.app.strictmode.RetainInstanceUsageViolation {
-  }
-
-  public final class GetTargetFragmentRequestCodeUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
-  }
-
-  public final class GetTargetFragmentUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
-  }
-
-  public abstract class RetainInstanceUsageViolation extends androidx.fragment.app.strictmode.Violation {
-  }
-
-  public final class SetRetainInstanceUsageViolation extends androidx.fragment.app.strictmode.RetainInstanceUsageViolation {
-  }
-
-  public final class SetTargetFragmentUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
-    method public int getRequestCode();
-    method public androidx.fragment.app.Fragment getTargetFragment();
-    property public final int requestCode;
-    property public final androidx.fragment.app.Fragment targetFragment;
-  }
-
-  public final class SetUserVisibleHintViolation extends androidx.fragment.app.strictmode.Violation {
-    method public boolean isVisibleToUser();
-    property public final boolean isVisibleToUser;
-  }
-
-  public abstract class TargetFragmentUsageViolation extends androidx.fragment.app.strictmode.Violation {
-  }
-
-  public abstract class Violation extends java.lang.RuntimeException {
-    method public final androidx.fragment.app.Fragment getFragment();
-    property public final androidx.fragment.app.Fragment fragment;
-  }
-
-  public final class WrongFragmentContainerViolation extends androidx.fragment.app.strictmode.Violation {
-    method public android.view.ViewGroup getContainer();
-    property public final android.view.ViewGroup container;
-  }
-
-}
-
diff --git a/fragment/fragment/api/res-1.5.0-beta01.txt b/fragment/fragment/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/fragment/fragment/api/res-1.5.0-beta01.txt
+++ /dev/null
diff --git a/fragment/fragment/api/restricted_1.5.0-beta01.txt b/fragment/fragment/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index 7f0aa7c..0000000
--- a/fragment/fragment/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,572 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
-  public class DialogFragment extends androidx.fragment.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
-    ctor public DialogFragment();
-    ctor public DialogFragment(@LayoutRes int);
-    method public void dismiss();
-    method public void dismissAllowingStateLoss();
-    method @MainThread public void dismissNow();
-    method public android.app.Dialog? getDialog();
-    method public boolean getShowsDialog();
-    method @StyleRes public int getTheme();
-    method public boolean isCancelable();
-    method public void onCancel(android.content.DialogInterface);
-    method @MainThread public android.app.Dialog onCreateDialog(android.os.Bundle?);
-    method public void onDismiss(android.content.DialogInterface);
-    method public final android.app.Dialog requireDialog();
-    method public void setCancelable(boolean);
-    method public void setShowsDialog(boolean);
-    method public void setStyle(int, @StyleRes int);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setupDialog(android.app.Dialog, int);
-    method public void show(androidx.fragment.app.FragmentManager, String?);
-    method public int show(androidx.fragment.app.FragmentTransaction, String?);
-    method public void showNow(androidx.fragment.app.FragmentManager, String?);
-    field public static final int STYLE_NORMAL = 0; // 0x0
-    field public static final int STYLE_NO_FRAME = 2; // 0x2
-    field public static final int STYLE_NO_INPUT = 3; // 0x3
-    field public static final int STYLE_NO_TITLE = 1; // 0x1
-  }
-
-  public class Fragment implements androidx.activity.result.ActivityResultCaller android.content.ComponentCallbacks androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner android.view.View.OnCreateContextMenuListener androidx.lifecycle.ViewModelStoreOwner {
-    ctor public Fragment();
-    ctor @ContentView public Fragment(@LayoutRes int);
-    method public void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method public final boolean equals(Object?);
-    method public final androidx.fragment.app.FragmentActivity? getActivity();
-    method public boolean getAllowEnterTransitionOverlap();
-    method public boolean getAllowReturnTransitionOverlap();
-    method public final android.os.Bundle? getArguments();
-    method public final androidx.fragment.app.FragmentManager getChildFragmentManager();
-    method public android.content.Context? getContext();
-    method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
-    method public Object? getEnterTransition();
-    method public Object? getExitTransition();
-    method @Deprecated public final androidx.fragment.app.FragmentManager? getFragmentManager();
-    method public final Object? getHost();
-    method public final int getId();
-    method public final android.view.LayoutInflater getLayoutInflater();
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.view.LayoutInflater getLayoutInflater(android.os.Bundle?);
-    method public androidx.lifecycle.Lifecycle getLifecycle();
-    method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
-    method public final androidx.fragment.app.Fragment? getParentFragment();
-    method public final androidx.fragment.app.FragmentManager getParentFragmentManager();
-    method public Object? getReenterTransition();
-    method public final android.content.res.Resources getResources();
-    method @Deprecated public final boolean getRetainInstance();
-    method public Object? getReturnTransition();
-    method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
-    method public Object? getSharedElementEnterTransition();
-    method public Object? getSharedElementReturnTransition();
-    method public final String getString(@StringRes int);
-    method public final String getString(@StringRes int, java.lang.Object!...);
-    method public final String? getTag();
-    method @Deprecated public final androidx.fragment.app.Fragment? getTargetFragment();
-    method @Deprecated public final int getTargetRequestCode();
-    method public final CharSequence getText(@StringRes int);
-    method @Deprecated public boolean getUserVisibleHint();
-    method public android.view.View? getView();
-    method @MainThread public androidx.lifecycle.LifecycleOwner getViewLifecycleOwner();
-    method public androidx.lifecycle.LiveData<androidx.lifecycle.LifecycleOwner!> getViewLifecycleOwnerLiveData();
-    method public androidx.lifecycle.ViewModelStore getViewModelStore();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final boolean hasOptionsMenu();
-    method public final int hashCode();
-    method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, String);
-    method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, String, android.os.Bundle?);
-    method public final boolean isAdded();
-    method public final boolean isDetached();
-    method public final boolean isHidden();
-    method public final boolean isInLayout();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final boolean isMenuVisible();
-    method public final boolean isRemoving();
-    method public final boolean isResumed();
-    method public final boolean isStateSaved();
-    method public final boolean isVisible();
-    method @Deprecated @CallSuper @MainThread public void onActivityCreated(android.os.Bundle?);
-    method @Deprecated public void onActivityResult(int, int, android.content.Intent?);
-    method @CallSuper @MainThread public void onAttach(android.content.Context);
-    method @Deprecated @CallSuper @MainThread public void onAttach(android.app.Activity);
-    method @Deprecated @MainThread public void onAttachFragment(androidx.fragment.app.Fragment);
-    method @CallSuper public void onConfigurationChanged(android.content.res.Configuration);
-    method @MainThread public boolean onContextItemSelected(android.view.MenuItem);
-    method @CallSuper @MainThread public void onCreate(android.os.Bundle?);
-    method @MainThread public android.view.animation.Animation? onCreateAnimation(int, boolean, int);
-    method @MainThread public android.animation.Animator? onCreateAnimator(int, boolean, int);
-    method @MainThread public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo?);
-    method @Deprecated @MainThread public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
-    method @MainThread public android.view.View? onCreateView(android.view.LayoutInflater, android.view.ViewGroup?, android.os.Bundle?);
-    method @CallSuper @MainThread public void onDestroy();
-    method @Deprecated @MainThread public void onDestroyOptionsMenu();
-    method @CallSuper @MainThread public void onDestroyView();
-    method @CallSuper @MainThread public void onDetach();
-    method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle?);
-    method @MainThread public void onHiddenChanged(boolean);
-    method @CallSuper @UiThread public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle?);
-    method @Deprecated @CallSuper @UiThread public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle?);
-    method @CallSuper @MainThread public void onLowMemory();
-    method public void onMultiWindowModeChanged(boolean);
-    method @Deprecated @MainThread public boolean onOptionsItemSelected(android.view.MenuItem);
-    method @Deprecated @MainThread public void onOptionsMenuClosed(android.view.Menu);
-    method @CallSuper @MainThread public void onPause();
-    method public void onPictureInPictureModeChanged(boolean);
-    method @Deprecated @MainThread public void onPrepareOptionsMenu(android.view.Menu);
-    method @MainThread public void onPrimaryNavigationFragmentChanged(boolean);
-    method @Deprecated public void onRequestPermissionsResult(int, String![], int[]);
-    method @CallSuper @MainThread public void onResume();
-    method @MainThread public void onSaveInstanceState(android.os.Bundle);
-    method @CallSuper @MainThread public void onStart();
-    method @CallSuper @MainThread public void onStop();
-    method @MainThread public void onViewCreated(android.view.View, android.os.Bundle?);
-    method @CallSuper @MainThread public void onViewStateRestored(android.os.Bundle?);
-    method public void postponeEnterTransition();
-    method public final void postponeEnterTransition(long, java.util.concurrent.TimeUnit);
-    method @MainThread public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method @MainThread public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
-    method public void registerForContextMenu(android.view.View);
-    method @Deprecated public final void requestPermissions(String![], int);
-    method public final androidx.fragment.app.FragmentActivity requireActivity();
-    method public final android.os.Bundle requireArguments();
-    method public final android.content.Context requireContext();
-    method @Deprecated public final androidx.fragment.app.FragmentManager requireFragmentManager();
-    method public final Object requireHost();
-    method public final androidx.fragment.app.Fragment requireParentFragment();
-    method public final android.view.View requireView();
-    method public void setAllowEnterTransitionOverlap(boolean);
-    method public void setAllowReturnTransitionOverlap(boolean);
-    method public void setArguments(android.os.Bundle?);
-    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void setEnterTransition(Object?);
-    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void setExitTransition(Object?);
-    method @Deprecated public void setHasOptionsMenu(boolean);
-    method public void setInitialSavedState(androidx.fragment.app.Fragment.SavedState?);
-    method public void setMenuVisibility(boolean);
-    method public void setReenterTransition(Object?);
-    method @Deprecated public void setRetainInstance(boolean);
-    method public void setReturnTransition(Object?);
-    method public void setSharedElementEnterTransition(Object?);
-    method public void setSharedElementReturnTransition(Object?);
-    method @Deprecated public void setTargetFragment(androidx.fragment.app.Fragment?, int);
-    method @Deprecated public void setUserVisibleHint(boolean);
-    method public boolean shouldShowRequestPermissionRationale(String);
-    method public void startActivity(android.content.Intent!);
-    method public void startActivity(android.content.Intent!, android.os.Bundle?);
-    method @Deprecated public void startActivityForResult(android.content.Intent!, int);
-    method @Deprecated public void startActivityForResult(android.content.Intent!, int, android.os.Bundle?);
-    method @Deprecated public void startIntentSenderForResult(android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
-    method public void startPostponedEnterTransition();
-    method public void unregisterForContextMenu(android.view.View);
-  }
-
-  public static class Fragment.InstantiationException extends java.lang.RuntimeException {
-    ctor public Fragment.InstantiationException(String, Exception?);
-  }
-
-  public static class Fragment.SavedState implements android.os.Parcelable {
-    method public int describeContents();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<androidx.fragment.app.Fragment.SavedState!> CREATOR;
-  }
-
-  public class FragmentActivity extends androidx.activity.ComponentActivity implements androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback androidx.core.app.ActivityCompat.RequestPermissionsRequestCodeValidator {
-    ctor public FragmentActivity();
-    ctor @ContentView public FragmentActivity(@LayoutRes int);
-    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
-    method @Deprecated public androidx.loader.app.LoaderManager getSupportLoaderManager();
-    method @Deprecated @MainThread public void onAttachFragment(androidx.fragment.app.Fragment);
-    method protected void onResumeFragments();
-    method public void onStateNotSaved();
-    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
-    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int);
-    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int, android.os.Bundle?);
-    method @Deprecated public void startIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
-    method public void supportFinishAfterTransition();
-    method @Deprecated public void supportInvalidateOptionsMenu();
-    method public void supportPostponeEnterTransition();
-    method public void supportStartPostponedEnterTransition();
-    method @Deprecated public final void validateRequestPermissionsRequestCode(int);
-  }
-
-  public abstract class FragmentContainer {
-    ctor public FragmentContainer();
-    method @Deprecated public androidx.fragment.app.Fragment instantiate(android.content.Context, String, android.os.Bundle?);
-    method public abstract android.view.View? onFindViewById(@IdRes int);
-    method public abstract boolean onHasView();
-  }
-
-  public final class FragmentContainerView extends android.widget.FrameLayout {
-    ctor public FragmentContainerView(android.content.Context context);
-    ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs, optional int defStyleAttr);
-    ctor public FragmentContainerView(android.content.Context context, android.util.AttributeSet? attrs);
-    method public <F extends androidx.fragment.app.Fragment> F! getFragment();
-  }
-
-  public class FragmentController {
-    method public void attachHost(androidx.fragment.app.Fragment?);
-    method public static androidx.fragment.app.FragmentController createController(androidx.fragment.app.FragmentHostCallback<?>);
-    method public void dispatchActivityCreated();
-    method @Deprecated public void dispatchConfigurationChanged(android.content.res.Configuration);
-    method public boolean dispatchContextItemSelected(android.view.MenuItem);
-    method public void dispatchCreate();
-    method @Deprecated public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
-    method public void dispatchDestroy();
-    method public void dispatchDestroyView();
-    method @Deprecated public void dispatchLowMemory();
-    method @Deprecated public void dispatchMultiWindowModeChanged(boolean);
-    method @Deprecated public boolean dispatchOptionsItemSelected(android.view.MenuItem);
-    method @Deprecated public void dispatchOptionsMenuClosed(android.view.Menu);
-    method public void dispatchPause();
-    method @Deprecated public void dispatchPictureInPictureModeChanged(boolean);
-    method @Deprecated public boolean dispatchPrepareOptionsMenu(android.view.Menu);
-    method @Deprecated public void dispatchReallyStop();
-    method public void dispatchResume();
-    method public void dispatchStart();
-    method public void dispatchStop();
-    method @Deprecated public void doLoaderDestroy();
-    method @Deprecated public void doLoaderRetain();
-    method @Deprecated public void doLoaderStart();
-    method @Deprecated public void doLoaderStop(boolean);
-    method @Deprecated public void dumpLoaders(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method public boolean execPendingActions();
-    method public androidx.fragment.app.Fragment? findFragmentByWho(String);
-    method public java.util.List<androidx.fragment.app.Fragment!> getActiveFragments(java.util.List<androidx.fragment.app.Fragment!>!);
-    method public int getActiveFragmentsCount();
-    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
-    method @Deprecated public androidx.loader.app.LoaderManager! getSupportLoaderManager();
-    method public void noteStateNotSaved();
-    method public android.view.View? onCreateView(android.view.View?, String, android.content.Context, android.util.AttributeSet);
-    method @Deprecated public void reportLoaderStart();
-    method @Deprecated public void restoreAllState(android.os.Parcelable?, java.util.List<androidx.fragment.app.Fragment!>?);
-    method @Deprecated public void restoreAllState(android.os.Parcelable?, androidx.fragment.app.FragmentManagerNonConfig?);
-    method @Deprecated public void restoreLoaderNonConfig(androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>!);
-    method @Deprecated public void restoreSaveState(android.os.Parcelable?);
-    method @Deprecated public androidx.collection.SimpleArrayMap<java.lang.String!,androidx.loader.app.LoaderManager!>? retainLoaderNonConfig();
-    method @Deprecated public androidx.fragment.app.FragmentManagerNonConfig? retainNestedNonConfig();
-    method @Deprecated public java.util.List<androidx.fragment.app.Fragment!>? retainNonConfig();
-    method @Deprecated public android.os.Parcelable? saveAllState();
-  }
-
-  public class FragmentFactory {
-    ctor public FragmentFactory();
-    method public androidx.fragment.app.Fragment instantiate(ClassLoader, String);
-    method public static Class<? extends androidx.fragment.app.Fragment> loadFragmentClass(ClassLoader, String);
-  }
-
-  public abstract class FragmentHostCallback<E> extends androidx.fragment.app.FragmentContainer {
-    ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
-    method public void onDump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method public android.view.View? onFindViewById(int);
-    method public abstract E? onGetHost();
-    method public android.view.LayoutInflater onGetLayoutInflater();
-    method public int onGetWindowAnimations();
-    method public boolean onHasView();
-    method public boolean onHasWindowAnimations();
-    method @Deprecated public void onRequestPermissionsFromFragment(androidx.fragment.app.Fragment, String![], int);
-    method public boolean onShouldSaveFragmentState(androidx.fragment.app.Fragment);
-    method public boolean onShouldShowRequestPermissionRationale(String);
-    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int);
-    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int, android.os.Bundle?);
-    method @Deprecated public void onStartIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender!, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
-    method public void onSupportInvalidateOptionsMenu();
-  }
-
-  public abstract class FragmentManager implements androidx.fragment.app.FragmentResultOwner {
-    ctor public FragmentManager();
-    method public void addFragmentOnAttachListener(androidx.fragment.app.FragmentOnAttachListener);
-    method public void addOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
-    method public androidx.fragment.app.FragmentTransaction beginTransaction();
-    method public void clearBackStack(String);
-    method public final void clearFragmentResult(String);
-    method public final void clearFragmentResultListener(String);
-    method public void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String![]?);
-    method @Deprecated public static void enableDebugLogging(boolean);
-    method public boolean executePendingTransactions();
-    method public static <F extends androidx.fragment.app.Fragment> F findFragment(android.view.View);
-    method public androidx.fragment.app.Fragment? findFragmentById(@IdRes int);
-    method public androidx.fragment.app.Fragment? findFragmentByTag(String?);
-    method public androidx.fragment.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
-    method public int getBackStackEntryCount();
-    method public androidx.fragment.app.Fragment? getFragment(android.os.Bundle, String);
-    method public androidx.fragment.app.FragmentFactory getFragmentFactory();
-    method public java.util.List<androidx.fragment.app.Fragment!> getFragments();
-    method public androidx.fragment.app.Fragment? getPrimaryNavigationFragment();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy? getStrictModePolicy();
-    method public boolean isDestroyed();
-    method public boolean isStateSaved();
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.fragment.app.FragmentTransaction openTransaction();
-    method public void popBackStack();
-    method public void popBackStack(String?, int);
-    method public void popBackStack(int, int);
-    method public boolean popBackStackImmediate();
-    method public boolean popBackStackImmediate(String?, int);
-    method public boolean popBackStackImmediate(int, int);
-    method public void putFragment(android.os.Bundle, String, androidx.fragment.app.Fragment);
-    method public void registerFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
-    method public void removeFragmentOnAttachListener(androidx.fragment.app.FragmentOnAttachListener);
-    method public void removeOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
-    method public void restoreBackStack(String);
-    method public void saveBackStack(String);
-    method public androidx.fragment.app.Fragment.SavedState? saveFragmentInstanceState(androidx.fragment.app.Fragment);
-    method public void setFragmentFactory(androidx.fragment.app.FragmentFactory);
-    method public final void setFragmentResult(String, android.os.Bundle);
-    method public final void setFragmentResultListener(String, androidx.lifecycle.LifecycleOwner, androidx.fragment.app.FragmentResultListener);
-    method public void setStrictModePolicy(androidx.fragment.app.strictmode.FragmentStrictMode.Policy?);
-    method public void unregisterFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks);
-    field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
-  }
-
-  public static interface FragmentManager.BackStackEntry {
-    method @Deprecated public CharSequence? getBreadCrumbShortTitle();
-    method @Deprecated @StringRes public int getBreadCrumbShortTitleRes();
-    method @Deprecated public CharSequence? getBreadCrumbTitle();
-    method @Deprecated @StringRes public int getBreadCrumbTitleRes();
-    method public int getId();
-    method public String? getName();
-  }
-
-  public abstract static class FragmentManager.FragmentLifecycleCallbacks {
-    ctor public FragmentManager.FragmentLifecycleCallbacks();
-    method @Deprecated public void onFragmentActivityCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
-    method public void onFragmentAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
-    method public void onFragmentCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
-    method public void onFragmentDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentDetached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentPaused(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentPreAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
-    method public void onFragmentPreCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
-    method public void onFragmentResumed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentSaveInstanceState(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle);
-    method public void onFragmentStarted(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentStopped(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-    method public void onFragmentViewCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.view.View, android.os.Bundle?);
-    method public void onFragmentViewDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-  }
-
-  public static interface FragmentManager.OnBackStackChangedListener {
-    method @MainThread public void onBackStackChanged();
-  }
-
-  @Deprecated public class FragmentManagerNonConfig {
-  }
-
-  public interface FragmentOnAttachListener {
-    method @MainThread public void onAttachFragment(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
-  }
-
-  @Deprecated public abstract class FragmentPagerAdapter extends androidx.viewpager.widget.PagerAdapter {
-    ctor @Deprecated public FragmentPagerAdapter(androidx.fragment.app.FragmentManager);
-    ctor @Deprecated public FragmentPagerAdapter(androidx.fragment.app.FragmentManager, int);
-    method @Deprecated public abstract androidx.fragment.app.Fragment getItem(int);
-    method @Deprecated public long getItemId(int);
-    method @Deprecated public boolean isViewFromObject(android.view.View, Object);
-    field @Deprecated public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1; // 0x1
-    field @Deprecated public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0; // 0x0
-  }
-
-  public interface FragmentResultListener {
-    method public void onFragmentResult(String, android.os.Bundle);
-  }
-
-  public interface FragmentResultOwner {
-    method public void clearFragmentResult(String);
-    method public void clearFragmentResultListener(String);
-    method public void setFragmentResult(String, android.os.Bundle);
-    method public void setFragmentResultListener(String, androidx.lifecycle.LifecycleOwner, androidx.fragment.app.FragmentResultListener);
-  }
-
-  @Deprecated public abstract class FragmentStatePagerAdapter extends androidx.viewpager.widget.PagerAdapter {
-    ctor @Deprecated public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager);
-    ctor @Deprecated public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager, int);
-    method @Deprecated public abstract androidx.fragment.app.Fragment getItem(int);
-    method @Deprecated public boolean isViewFromObject(android.view.View, Object);
-    field @Deprecated public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1; // 0x1
-    field @Deprecated public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0; // 0x0
-  }
-
-  @Deprecated public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
-    ctor @Deprecated public FragmentTabHost(android.content.Context);
-    ctor @Deprecated public FragmentTabHost(android.content.Context, android.util.AttributeSet?);
-    method @Deprecated public void addTab(android.widget.TabHost.TabSpec, Class<?>, android.os.Bundle?);
-    method @Deprecated public void onTabChanged(String?);
-    method @Deprecated public void setup(android.content.Context, androidx.fragment.app.FragmentManager);
-    method @Deprecated public void setup(android.content.Context, androidx.fragment.app.FragmentManager, int);
-  }
-
-  public abstract class FragmentTransaction {
-    ctor @Deprecated public FragmentTransaction();
-    method public final androidx.fragment.app.FragmentTransaction add(Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
-    method public androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.Fragment, String?);
-    method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
-    method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment);
-    method public final androidx.fragment.app.FragmentTransaction add(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
-    method public androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment, String?);
-    method public androidx.fragment.app.FragmentTransaction addSharedElement(android.view.View, String);
-    method public androidx.fragment.app.FragmentTransaction addToBackStack(String?);
-    method public androidx.fragment.app.FragmentTransaction attach(androidx.fragment.app.Fragment);
-    method public abstract int commit();
-    method public abstract int commitAllowingStateLoss();
-    method public abstract void commitNow();
-    method public abstract void commitNowAllowingStateLoss();
-    method public androidx.fragment.app.FragmentTransaction detach(androidx.fragment.app.Fragment);
-    method public androidx.fragment.app.FragmentTransaction disallowAddToBackStack();
-    method public androidx.fragment.app.FragmentTransaction hide(androidx.fragment.app.Fragment);
-    method public boolean isAddToBackStackAllowed();
-    method public boolean isEmpty();
-    method public androidx.fragment.app.FragmentTransaction remove(androidx.fragment.app.Fragment);
-    method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?);
-    method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment);
-    method public final androidx.fragment.app.FragmentTransaction replace(@IdRes int, Class<? extends androidx.fragment.app.Fragment>, android.os.Bundle?, String?);
-    method public androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment, String?);
-    method public androidx.fragment.app.FragmentTransaction runOnCommit(Runnable);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setAllowOptimization(boolean);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(@StringRes int);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(CharSequence?);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(@StringRes int);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(CharSequence?);
-    method public androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int);
-    method public androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int, @AnimRes @AnimatorRes int);
-    method public androidx.fragment.app.FragmentTransaction setMaxLifecycle(androidx.fragment.app.Fragment, androidx.lifecycle.Lifecycle.State);
-    method public androidx.fragment.app.FragmentTransaction setPrimaryNavigationFragment(androidx.fragment.app.Fragment?);
-    method public androidx.fragment.app.FragmentTransaction setReorderingAllowed(boolean);
-    method public androidx.fragment.app.FragmentTransaction setTransition(int);
-    method @Deprecated public androidx.fragment.app.FragmentTransaction setTransitionStyle(@StyleRes int);
-    method public androidx.fragment.app.FragmentTransaction show(androidx.fragment.app.Fragment);
-    field public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
-    field public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
-    field public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002
-    field public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003
-    field public static final int TRANSIT_FRAGMENT_MATCH_ACTIVITY_CLOSE = 8197; // 0x2005
-    field public static final int TRANSIT_FRAGMENT_MATCH_ACTIVITY_OPEN = 4100; // 0x1004
-    field public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001
-    field public static final int TRANSIT_NONE = 0; // 0x0
-    field public static final int TRANSIT_UNSET = -1; // 0xffffffff
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class FragmentTransitionImpl {
-    ctor public FragmentTransitionImpl();
-    method public abstract void addTarget(Object!, android.view.View!);
-    method public abstract void addTargets(Object!, java.util.ArrayList<android.view.View!>!);
-    method public abstract void beginDelayedTransition(android.view.ViewGroup!, Object!);
-    method protected static void bfsAddViewChildren(java.util.List<android.view.View!>!, android.view.View!);
-    method public abstract boolean canHandle(Object!);
-    method public abstract Object! cloneTransition(Object!);
-    method protected void getBoundsOnScreen(android.view.View!, android.graphics.Rect!);
-    method protected static boolean isNullOrEmpty(java.util.List!);
-    method public abstract Object! mergeTransitionsInSequence(Object!, Object!, Object!);
-    method public abstract Object! mergeTransitionsTogether(Object!, Object!, Object!);
-    method public abstract void removeTarget(Object!, android.view.View!);
-    method public abstract void replaceTargets(Object!, java.util.ArrayList<android.view.View!>!, java.util.ArrayList<android.view.View!>!);
-    method public abstract void scheduleHideFragmentView(Object!, android.view.View!, java.util.ArrayList<android.view.View!>!);
-    method public abstract void scheduleRemoveTargets(Object!, Object!, java.util.ArrayList<android.view.View!>!, Object!, java.util.ArrayList<android.view.View!>!, Object!, java.util.ArrayList<android.view.View!>!);
-    method public abstract void setEpicenter(Object!, android.view.View!);
-    method public abstract void setEpicenter(Object!, android.graphics.Rect!);
-    method public void setListenerForTransitionEnd(androidx.fragment.app.Fragment, Object, androidx.core.os.CancellationSignal, Runnable);
-    method public abstract void setSharedElementTargets(Object!, android.view.View!, java.util.ArrayList<android.view.View!>!);
-    method public abstract void swapSharedElementTargets(Object!, java.util.ArrayList<android.view.View!>!, java.util.ArrayList<android.view.View!>!);
-    method public abstract Object! wrapTransitionInSet(Object!);
-  }
-
-  public class ListFragment extends androidx.fragment.app.Fragment {
-    ctor public ListFragment();
-    method public android.widget.ListAdapter? getListAdapter();
-    method public android.widget.ListView getListView();
-    method public long getSelectedItemId();
-    method public int getSelectedItemPosition();
-    method public void onListItemClick(android.widget.ListView, android.view.View, int, long);
-    method public final android.widget.ListAdapter requireListAdapter();
-    method public void setEmptyText(CharSequence?);
-    method public void setListAdapter(android.widget.ListAdapter?);
-    method public void setListShown(boolean);
-    method public void setListShownNoAnimation(boolean);
-    method public void setSelection(int);
-  }
-
-}
-
-package androidx.fragment.app.strictmode {
-
-  public final class FragmentReuseViolation extends androidx.fragment.app.strictmode.Violation {
-    method public String getPreviousFragmentId();
-    property public final String previousFragmentId;
-  }
-
-  public final class FragmentStrictMode {
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy getDefaultPolicy();
-    method @VisibleForTesting public void onPolicyViolation(androidx.fragment.app.strictmode.Violation violation);
-    method public void setDefaultPolicy(androidx.fragment.app.strictmode.FragmentStrictMode.Policy);
-    property public final androidx.fragment.app.strictmode.FragmentStrictMode.Policy defaultPolicy;
-    field public static final androidx.fragment.app.strictmode.FragmentStrictMode INSTANCE;
-  }
-
-  public static fun interface FragmentStrictMode.OnViolationListener {
-    method public void onViolation(androidx.fragment.app.strictmode.Violation violation);
-  }
-
-  public static final class FragmentStrictMode.Policy {
-    field public static final androidx.fragment.app.strictmode.FragmentStrictMode.Policy LAX;
-  }
-
-  public static final class FragmentStrictMode.Policy.Builder {
-    ctor public FragmentStrictMode.Policy.Builder();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder allowViolation(Class<? extends androidx.fragment.app.Fragment> fragmentClass, Class<? extends androidx.fragment.app.strictmode.Violation> violationClass);
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder allowViolation(String fragmentClass, Class<? extends androidx.fragment.app.strictmode.Violation> violationClass);
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy build();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectFragmentReuse();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectFragmentTagUsage();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectRetainInstanceUsage();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectSetUserVisibleHint();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectTargetFragmentUsage();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectWrongFragmentContainer();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyDeath();
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyListener(androidx.fragment.app.strictmode.FragmentStrictMode.OnViolationListener listener);
-    method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyLog();
-  }
-
-  public final class FragmentTagUsageViolation extends androidx.fragment.app.strictmode.Violation {
-    method public android.view.ViewGroup? getParentContainer();
-    property public final android.view.ViewGroup? parentContainer;
-  }
-
-  public final class GetRetainInstanceUsageViolation extends androidx.fragment.app.strictmode.RetainInstanceUsageViolation {
-  }
-
-  public final class GetTargetFragmentRequestCodeUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
-  }
-
-  public final class GetTargetFragmentUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
-  }
-
-  public abstract class RetainInstanceUsageViolation extends androidx.fragment.app.strictmode.Violation {
-  }
-
-  public final class SetRetainInstanceUsageViolation extends androidx.fragment.app.strictmode.RetainInstanceUsageViolation {
-  }
-
-  public final class SetTargetFragmentUsageViolation extends androidx.fragment.app.strictmode.TargetFragmentUsageViolation {
-    method public int getRequestCode();
-    method public androidx.fragment.app.Fragment getTargetFragment();
-    property public final int requestCode;
-    property public final androidx.fragment.app.Fragment targetFragment;
-  }
-
-  public final class SetUserVisibleHintViolation extends androidx.fragment.app.strictmode.Violation {
-    method public boolean isVisibleToUser();
-    property public final boolean isVisibleToUser;
-  }
-
-  public abstract class TargetFragmentUsageViolation extends androidx.fragment.app.strictmode.Violation {
-  }
-
-  public abstract class Violation extends java.lang.RuntimeException {
-    method public final androidx.fragment.app.Fragment getFragment();
-    property public final androidx.fragment.app.Fragment fragment;
-  }
-
-  public final class WrongFragmentContainerViolation extends androidx.fragment.app.strictmode.Violation {
-    method public android.view.ViewGroup getContainer();
-    property public final android.view.ViewGroup container;
-  }
-
-}
-
diff --git a/fragment/fragment/lint-baseline.xml b/fragment/fragment/lint-baseline.xml
deleted file mode 100644
index a16c227..0000000
--- a/fragment/fragment/lint-baseline.xml
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
-
-    <issue
-        id="ResourceType"
-        message="Expected resource of type animator"
-        errorLine1="                    animator = AnimatorInflater.loadAnimator(context, nextAnim);"
-        errorLine2="                                                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/fragment/app/FragmentAnim.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getEnterTransition`"
-        errorLine1="    assertThat(fragment.enterTransition.enteringTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getEnteringTargets`"
-        errorLine1="    assertThat(fragment.enterTransition.enteringTargets).isEmpty()"
-        errorLine2="                                        ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getEnterTransition`"
-        errorLine1="    assertThat(fragment.enterTransition.exitingTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getExitingTargets`"
-        errorLine1="    assertThat(fragment.enterTransition.exitingTargets).isEmpty()"
-        errorLine2="                                        ~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getEnteringTargets`"
-        errorLine1="    assertThat(fragment.exitTransition.enteringTargets).isEmpty()"
-        errorLine2="                                       ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getExitTransition`"
-        errorLine1="    assertThat(fragment.exitTransition.enteringTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getExitTransition`"
-        errorLine1="    assertThat(fragment.exitTransition.exitingTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getExitingTargets`"
-        errorLine1="    assertThat(fragment.exitTransition.exitingTargets).isEmpty()"
-        errorLine2="                                       ~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getEnteringTargets`"
-        errorLine1="    assertThat(fragment.reenterTransition.enteringTargets).isEmpty()"
-        errorLine2="                                          ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getReenterTransition`"
-        errorLine1="    assertThat(fragment.reenterTransition.enteringTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getExitingTargets`"
-        errorLine1="    assertThat(fragment.reenterTransition.exitingTargets).isEmpty()"
-        errorLine2="                                          ~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getReenterTransition`"
-        errorLine1="    assertThat(fragment.reenterTransition.exitingTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getEnteringTargets`"
-        errorLine1="    assertThat(fragment.returnTransition.enteringTargets).isEmpty()"
-        errorLine2="                                         ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getReturnTransition`"
-        errorLine1="    assertThat(fragment.returnTransition.enteringTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getExitingTargets`"
-        errorLine1="    assertThat(fragment.returnTransition.exitingTargets).isEmpty()"
-        errorLine2="                                         ~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getReturnTransition`"
-        errorLine1="    assertThat(fragment.returnTransition.exitingTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getEnteringTargets`"
-        errorLine1="    assertThat(fragment.sharedElementEnter.enteringTargets).isEmpty()"
-        errorLine2="                                           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getSharedElementEnter`"
-        errorLine1="    assertThat(fragment.sharedElementEnter.enteringTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getExitingTargets`"
-        errorLine1="    assertThat(fragment.sharedElementEnter.exitingTargets).isEmpty()"
-        errorLine2="                                           ~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getSharedElementEnter`"
-        errorLine1="    assertThat(fragment.sharedElementEnter.exitingTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getEnteringTargets`"
-        errorLine1="    assertThat(fragment.sharedElementReturn.enteringTargets).isEmpty()"
-        errorLine2="                                            ~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getSharedElementReturn`"
-        errorLine1="    assertThat(fragment.sharedElementReturn.enteringTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getExitingTargets`"
-        errorLine1="    assertThat(fragment.sharedElementReturn.exitingTargets).isEmpty()"
-        errorLine2="                                            ~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Field requires API level 21 (current min is 14): `getSharedElementReturn`"
-        errorLine1="    assertThat(fragment.sharedElementReturn.exitingTargets).isEmpty()"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 21 (current min is 14): `TransitionFragment`"
-        errorLine1="    val fragment = TransitionFragment()"
-        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt"/>
-    </issue>
-
-    <issue
-        id="ObsoleteSdkInt"
-        message="Unnecessary; SDK_INT is always >= 21 from outer annotation (`@RequiresApi(21)`)"
-        errorLine1="    @RequiresApi(19)"
-        errorLine2="    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/fragment/app/FragmentTransitionCompat21.java"/>
-    </issue>
-
-</issues>
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt
index a595660..4fc400a 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt
@@ -863,6 +863,112 @@
         assertThat(fragment2.loadedAnimation).isEqualTo(POP_EXIT)
     }
 
+    @Test
+    fun ensureProperAnimationOnPopUpAndReplace() {
+        waitForAnimationReady()
+        val fm = activityRule.activity.supportFragmentManager
+        val fragment1 = AnimationFragment()
+        val fragment2 = AnimationFragment()
+        val fragment3 = AnimationFragment()
+
+        fm.beginTransaction()
+            .setReorderingAllowed(true)
+            .setCustomAnimations(ENTER_OTHER, EXIT_OTHER)
+            .add(R.id.fragmentContainer, fragment1, "fragment1")
+            .setPrimaryNavigationFragment(fragment1)
+            .addToBackStack("fragment1")
+            .commit()
+        activityRule.waitForExecution()
+
+        assertThat(fragment1.loadedAnimation).isEqualTo(ENTER_OTHER)
+        assertThat(fragment2.loadedAnimation).isEqualTo(0)
+        assertThat(fragment3.loadedAnimation).isEqualTo(0)
+
+        fm.beginTransaction()
+            .setReorderingAllowed(true)
+            .setCustomAnimations(ENTER_OTHER, EXIT_OTHER)
+            .replace(R.id.fragmentContainer, fragment2, "fragment2")
+            .setPrimaryNavigationFragment(fragment2)
+            .addToBackStack("fragment2")
+            .commit()
+        activityRule.waitForExecution()
+
+        assertThat(fragment1.loadedAnimation).isEqualTo(EXIT_OTHER)
+        assertThat(fragment2.loadedAnimation).isEqualTo(ENTER_OTHER)
+        assertThat(fragment3.loadedAnimation).isEqualTo(0)
+
+        fm.popBackStack()
+
+        fm.beginTransaction()
+            .setReorderingAllowed(true)
+            .setCustomAnimations(ENTER, EXIT)
+            .replace(R.id.fragmentContainer, fragment3, "fragment3")
+            .setPrimaryNavigationFragment(fragment3)
+            .addToBackStack("fragment3")
+            .commit()
+        activityRule.waitForExecution()
+
+        assertThat(fragment1.loadedAnimation).isEqualTo(EXIT_OTHER)
+        assertThat(fragment2.loadedAnimation).isEqualTo(EXIT)
+        assertThat(fragment3.loadedAnimation).isEqualTo(ENTER)
+    }
+
+    @Test
+    fun ensureProperAnimationOnDoublePop() {
+        waitForAnimationReady()
+        val fm = activityRule.activity.supportFragmentManager
+        val fragment1 = AnimationFragment()
+        val fragment2 = AnimationFragment()
+        val fragment3 = AnimationFragment()
+
+        fm.beginTransaction()
+            .setReorderingAllowed(true)
+            .setCustomAnimations(ENTER_OTHER, EXIT_OTHER, ENTER_OTHER, EXIT_OTHER)
+            .add(R.id.fragmentContainer, fragment1, "fragment1")
+            .setPrimaryNavigationFragment(fragment1)
+            .addToBackStack("fragment1")
+            .commit()
+        activityRule.waitForExecution()
+
+        assertThat(fragment1.loadedAnimation).isEqualTo(ENTER_OTHER)
+        assertThat(fragment2.loadedAnimation).isEqualTo(0)
+        assertThat(fragment3.loadedAnimation).isEqualTo(0)
+
+        fm.beginTransaction()
+            .setReorderingAllowed(true)
+            .setCustomAnimations(ENTER_OTHER, EXIT_OTHER, ENTER_OTHER, EXIT_OTHER)
+            .replace(R.id.fragmentContainer, fragment2, "fragment2")
+            .setPrimaryNavigationFragment(fragment2)
+            .addToBackStack("fragment2")
+            .commit()
+        activityRule.waitForExecution()
+
+        assertThat(fragment1.loadedAnimation).isEqualTo(EXIT_OTHER)
+        assertThat(fragment2.loadedAnimation).isEqualTo(ENTER_OTHER)
+        assertThat(fragment3.loadedAnimation).isEqualTo(0)
+
+        fm.beginTransaction()
+            .setReorderingAllowed(true)
+            .setCustomAnimations(ENTER, EXIT, ENTER, EXIT)
+            .replace(R.id.fragmentContainer, fragment3, "fragment3")
+            .setPrimaryNavigationFragment(fragment3)
+            .addToBackStack("fragment3")
+            .commit()
+        activityRule.waitForExecution()
+
+        assertThat(fragment1.loadedAnimation).isEqualTo(EXIT_OTHER)
+        assertThat(fragment2.loadedAnimation).isEqualTo(EXIT)
+        assertThat(fragment3.loadedAnimation).isEqualTo(ENTER)
+
+        fm.popBackStack()
+        fm.popBackStack()
+        activityRule.waitForExecution()
+
+        assertThat(fragment1.loadedAnimation).isEqualTo(ENTER_OTHER)
+        assertThat(fragment2.loadedAnimation).isEqualTo(EXIT)
+        assertThat(fragment3.loadedAnimation).isEqualTo(EXIT_OTHER)
+    }
+
     private fun assertEnterPopExit(fragment: AnimationFragment) {
         assertFragmentAnimation(fragment, 1, true, ENTER)
 
@@ -1070,6 +1176,10 @@
         private val POP_ENTER = 3
         @AnimRes
         private val POP_EXIT = 4
+        @AnimRes
+        private val ENTER_OTHER = 5
+        @AnimRes
+        private val EXIT_OTHER = 6
     }
 }
 
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.java b/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.java
index c2f2434..5c30741 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.java
@@ -87,6 +87,9 @@
         List<TransitionInfo> transitions = new ArrayList<>();
         final List<Operation> awaitingContainerChanges = new ArrayList<>(operations);
 
+        // sync animations together before we start loading them.
+        syncAnimations(operations);
+
         for (final Operation operation : operations) {
             // Create the animation CancellationSignal
             CancellationSignal animCancellationSignal = new CancellationSignal();
@@ -133,6 +136,25 @@
         }
     }
 
+    /**
+     * Syncs the animations of all other operations with the animations of the last operation.
+     */
+    private void syncAnimations(@NonNull List<Operation> operations) {
+        // get the last operation's fragment
+        Fragment lastOpFragment = operations.get(operations.size() - 1).getFragment();
+        // change the animations of all other fragments to match the last one.
+        for (final Operation operation : operations) {
+            operation.getFragment().mAnimationInfo.mEnterAnim =
+                    lastOpFragment.mAnimationInfo.mEnterAnim;
+            operation.getFragment().mAnimationInfo.mExitAnim =
+                    lastOpFragment.mAnimationInfo.mExitAnim;
+            operation.getFragment().mAnimationInfo.mPopEnterAnim =
+                    lastOpFragment.mAnimationInfo.mPopEnterAnim;
+            operation.getFragment().mAnimationInfo.mPopExitAnim =
+                    lastOpFragment.mAnimationInfo.mPopExitAnim;
+        }
+    }
+
     private void startAnimations(@NonNull List<AnimationInfo> animationInfos,
             @NonNull List<Operation> awaitingContainerChanges,
             boolean startedAnyTransition, @NonNull Map<Operation, Boolean> startedTransitions) {
diff --git a/glance/glance-appwidget-preview/api/public_plus_experimental_current.txt b/glance/glance-appwidget-preview/api/public_plus_experimental_current.txt
index fd15726..873473c 100644
--- a/glance/glance-appwidget-preview/api/public_plus_experimental_current.txt
+++ b/glance/glance-appwidget-preview/api/public_plus_experimental_current.txt
@@ -4,12 +4,5 @@
   public final class GlanceAppWidgetViewAdapterKt {
   }
 
-  @androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface PreviewGlance {
-  }
-
-  @androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface PreviewGlance.Container {
-    method public abstract androidx.glance.appwidget.preview.PreviewGlance[] value();
-  }
-
 }
 
diff --git a/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt b/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt
index cb4eac1..9c8b9f1 100644
--- a/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt
+++ b/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt
@@ -21,13 +21,16 @@
 import androidx.glance.appwidget.GlanceAppWidget
 import androidx.glance.appwidget.GlanceAppWidgetReceiver
 import androidx.glance.appwidget.SizeMode
+import androidx.glance.appwidget.action.actionRunCallback
 import androidx.glance.appwidget.template.GalleryTemplate
 import androidx.glance.appwidget.template.GlanceTemplateAppWidget
+import androidx.glance.template.ActionBlock
 import androidx.glance.template.GalleryTemplateData
 import androidx.glance.template.HeaderBlock
 import androidx.glance.template.ImageBlock
 import androidx.glance.template.TemplateImageWithDescription
 import androidx.glance.template.TemplateText
+import androidx.glance.template.TemplateTextButton
 import androidx.glance.template.TextBlock
 import androidx.glance.template.TextType
 
@@ -58,8 +61,9 @@
                     ),
                 ),
                 mainTextBlock = TextBlock(
-                    text1 = TemplateText("Gallery Template title", TextType.Title),
-                    text2 = TemplateText("Gallery Template headline", TextType.Headline),
+                    text1 = TemplateText("Title1", TextType.Title),
+                    text2 = TemplateText("Headline1", TextType.Headline),
+                    text3 = TemplateText("Label1", TextType.Label),
                     priority = 0,
                 ),
                 mainImageBlock = ImageBlock(
@@ -71,6 +75,18 @@
                     ),
                     priority = 1,
                 ),
+                mainActionBlock = ActionBlock(
+                    actionButtons = listOf(
+                        TemplateTextButton(
+                            actionRunCallback<DefaultNoopAction>(),
+                            "Act1"
+                        ),
+                        TemplateTextButton(
+                            actionRunCallback<DefaultNoopAction>(),
+                            "Act2"
+                        ),
+                    ),
+                ),
                 galleryImageBlock = ImageBlock(
                     images = galleryContent,
                     priority = 2,
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampoline.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampoline.kt
index 486e1fa..0905d7e 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampoline.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampoline.kt
@@ -82,6 +82,7 @@
  *
  * @see applyTrampolineIntent
  */
+@Suppress("DEPRECATION")
 internal fun Activity.launchTrampolineAction(intent: Intent) {
     val actionIntent = requireNotNull(intent.getParcelableExtra<Intent>(ActionIntentKey)) {
         "List adapter activity trampoline invoked without specifying target intent."
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt
index 2489d93..9cf2f5b 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt
@@ -19,21 +19,20 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.unit.dp
 import androidx.glance.GlanceModifier
-import androidx.glance.Image
 import androidx.glance.background
-import androidx.glance.layout.Alignment
 import androidx.glance.layout.Column
 import androidx.glance.layout.ContentScale
 import androidx.glance.layout.Row
 import androidx.glance.layout.Spacer
+import androidx.glance.layout.fillMaxHeight
 import androidx.glance.layout.fillMaxSize
+import androidx.glance.layout.fillMaxWidth
+import androidx.glance.layout.height
 import androidx.glance.layout.padding
-import androidx.glance.layout.width
 import androidx.glance.template.GalleryTemplateData
 import androidx.glance.template.LocalTemplateColors
 import androidx.glance.template.LocalTemplateMode
 import androidx.glance.template.TemplateMode
-import androidx.glance.text.Text
 
 /**
  * Composable layout for a gallery template app widget. The template is optimized to show images.
@@ -51,75 +50,42 @@
 
 @Composable
 private fun WidgetLayoutCollapsed(data: GalleryTemplateData) {
-    val modifier = createTopLevelModifier(data, true)
-
-    Column(modifier = modifier) {
-        data.header?.let { AppWidgetTemplateHeader(it) }
+    Column(modifier = createTopLevelModifier(data, true)) {
+        HeaderBlockTemplate(data.header)
         Spacer(modifier = GlanceModifier.defaultWeight())
-        AppWidgetTextSection(
-            listOfNotNull(
-                data.mainTextBlock.text1,
-                data.mainTextBlock.text2,
-                data.mainTextBlock.text3
-            )
-        )
-    }
-}
-
-// TODO: Implement when UX has specs.
-@Composable
-private fun WidgetLayoutVertical(data: GalleryTemplateData) {
-    Column(
-        modifier = GlanceModifier.fillMaxSize().padding(8.dp),
-    ) {
-        Row(
-            modifier = GlanceModifier.fillMaxSize().padding(8.dp),
-            verticalAlignment = Alignment.CenterVertically
-        ) {
-            Column {
-                MainImageBlock(data)
-            }
-            Spacer(GlanceModifier.width(8.dp))
-            Column {
-                Text(data.mainTextBlock.text1.text)
-                data.mainTextBlock.text2?.let { headline ->
-                    Text(headline.text)
-                }
-            }
-            Column(verticalAlignment = Alignment.Top) {
-                MainImageBlock(data)
-            }
-        }
+        TextBlockTemplate(data.mainTextBlock)
     }
 }
 
 @Composable
 private fun WidgetLayoutHorizontal(data: GalleryTemplateData) {
-    Row(
-        modifier = GlanceModifier.fillMaxSize().padding(8.dp),
-        verticalAlignment = Alignment.CenterVertically
-    ) {
-        Column {
-            MainImageBlock(data)
+    Row(modifier = createTopLevelModifier(data)) {
+        Column(
+            modifier = GlanceModifier.defaultWeight().fillMaxHeight()
+        ) {
+            HeaderBlockTemplate(data.header)
+            Spacer(modifier = GlanceModifier.height(16.dp).defaultWeight())
+            TextBlockTemplate(data.mainTextBlock)
+            ActionBlockTemplate(data.mainActionBlock)
         }
-        Spacer(GlanceModifier.width(8.dp))
-        Column {
-            Text(data.mainTextBlock.text1.text)
-            data.mainTextBlock.text2?.let { headline ->
-                Text(headline.text)
-            }
-        }
-        Column(verticalAlignment = Alignment.Top) {
-            MainImageBlock(data)
-        }
+        SingleImageBlockTemplate(
+            data.mainImageBlock,
+            GlanceModifier.fillMaxHeight().defaultWeight()
+        )
     }
 }
 
 @Composable
-private fun MainImageBlock(data: GalleryTemplateData) {
-    if (data.mainImageBlock.images.isNotEmpty()) {
-        val mainImage = data.mainImageBlock.images[0]
-        Image(provider = mainImage.image, contentDescription = mainImage.description)
+private fun WidgetLayoutVertical(data: GalleryTemplateData) {
+    Column(modifier = createTopLevelModifier(data)) {
+        HeaderBlockTemplate(data.header)
+        Spacer(modifier = GlanceModifier.height(16.dp))
+        SingleImageBlockTemplate(data.mainImageBlock, GlanceModifier.fillMaxWidth().defaultWeight())
+        Row(modifier = GlanceModifier.fillMaxWidth()) {
+            TextBlockTemplate(data.mainTextBlock)
+            Spacer(modifier = GlanceModifier.defaultWeight())
+            ActionBlockTemplate(data.mainActionBlock)
+        }
     }
 }
 
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceAppWidgetTemplates.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceAppWidgetTemplates.kt
index c355fdb..2fed787 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceAppWidgetTemplates.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceAppWidgetTemplates.kt
@@ -28,18 +28,22 @@
 import androidx.glance.action.clickable
 import androidx.glance.layout.Alignment
 import androidx.glance.layout.Column
+import androidx.glance.layout.ContentScale
 import androidx.glance.layout.Row
 import androidx.glance.layout.Spacer
 import androidx.glance.layout.fillMaxWidth
 import androidx.glance.layout.height
 import androidx.glance.layout.width
+import androidx.glance.template.ActionBlock
 import androidx.glance.template.HeaderBlock
+import androidx.glance.template.ImageBlock
 import androidx.glance.template.LocalTemplateColors
 import androidx.glance.template.TemplateButton
 import androidx.glance.template.TemplateImageButton
 import androidx.glance.template.TemplateImageWithDescription
 import androidx.glance.template.TemplateText
 import androidx.glance.template.TemplateTextButton
+import androidx.glance.template.TextBlock
 import androidx.glance.template.TextType
 import androidx.glance.text.Text
 import androidx.glance.text.TextStyle
@@ -169,6 +173,73 @@
     }
 }
 
+/**
+ * Displays an [ImageBlock] as a single image for AppWidget layout template.
+ *
+ * @param imageBlock The [ImageBlock] data containing the main image for display
+ * @param modifier Glance modifier for further image button customization
+ */
+@Composable
+internal fun SingleImageBlockTemplate(
+    imageBlock: ImageBlock,
+    modifier: GlanceModifier = GlanceModifier
+) {
+    if (imageBlock.images.isNotEmpty()) {
+        Spacer(modifier = GlanceModifier.width(16.dp))
+        val mainImage = imageBlock.images[0]
+        Image(
+            provider = mainImage.image,
+            contentDescription = mainImage.description,
+            modifier = modifier,
+            contentScale = ContentScale.Crop
+        )
+    }
+}
+
+/**
+ * Displays a [TextBlock] with top three types of text lines for AppWidget layout template.
+ *
+ * @param textBlock The [TextBlock] data containing top three types of text lines.
+ */
+@Composable
+internal fun TextBlockTemplate(textBlock: TextBlock) {
+    AppWidgetTextSection(
+        listOfNotNull(
+            textBlock.text1,
+            textBlock.text2,
+            textBlock.text3,
+        )
+    )
+}
+
+/**
+ * Displays a [HeaderBlock] with header information.
+ *
+ * @param headerBlock The [HeaderBlock] data containing the header information.
+ */
+@Composable
+internal fun HeaderBlockTemplate(headerBlock: HeaderBlock?) {
+    headerBlock?.let { AppWidgetTemplateHeader(it) }
+}
+
+/**
+ * Displays an [ActionBlock] as a sequence of action buttons for AppWidget layout template.
+ *
+ * @param actionBlock The [ActionBlock] data containing a list of buttons for display
+ */
+@Composable
+internal fun ActionBlockTemplate(actionBlock: ActionBlock?) {
+    if (actionBlock?.actionButtons?.isNotEmpty() == true) {
+        Spacer(modifier = GlanceModifier.height(16.dp))
+        Row {
+            actionBlock.actionButtons.forEach { button ->
+                AppWidgetTemplateButton(button)
+                Spacer(modifier = GlanceModifier.width(4.dp))
+            }
+        }
+    }
+}
+
 private enum class DisplaySize {
     Small,
     Medium,
diff --git a/glance/glance-preview/api/current.txt b/glance/glance-preview/api/current.txt
new file mode 100644
index 0000000..42fa5e3
--- /dev/null
+++ b/glance/glance-preview/api/current.txt
@@ -0,0 +1,11 @@
+// Signature format: 4.0
+package androidx.glance.preview {
+
+  public final class Surfaces {
+    field public static final String APP_WIDGET = "AppWidget";
+    field public static final androidx.glance.preview.Surfaces INSTANCE;
+    field public static final String TILE = "Tile";
+  }
+
+}
+
diff --git a/glance/glance-preview/api/public_plus_experimental_current.txt b/glance/glance-preview/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..b70d5c3
--- /dev/null
+++ b/glance/glance-preview/api/public_plus_experimental_current.txt
@@ -0,0 +1,23 @@
+// Signature format: 4.0
+package androidx.glance.preview {
+
+  @kotlin.RequiresOptIn(message="This API is experimental and is likely to change in the future.") public @interface ExperimentalGlancePreviewApi {
+  }
+
+  @androidx.glance.preview.ExperimentalGlancePreviewApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface GlancePreview {
+    method public abstract String surface();
+    property public abstract String surface;
+  }
+
+  @androidx.glance.preview.ExperimentalGlancePreviewApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface GlancePreview.Container {
+    method public abstract androidx.glance.preview.GlancePreview[] value();
+  }
+
+  public final class Surfaces {
+    field public static final String APP_WIDGET = "AppWidget";
+    field public static final androidx.glance.preview.Surfaces INSTANCE;
+    field public static final String TILE = "Tile";
+  }
+
+}
+
diff --git a/core/core-ktx/api/res-1.8.0-beta01.txt b/glance/glance-preview/api/res-current.txt
similarity index 100%
copy from core/core-ktx/api/res-1.8.0-beta01.txt
copy to glance/glance-preview/api/res-current.txt
diff --git a/glance/glance-preview/api/restricted_current.txt b/glance/glance-preview/api/restricted_current.txt
new file mode 100644
index 0000000..42fa5e3
--- /dev/null
+++ b/glance/glance-preview/api/restricted_current.txt
@@ -0,0 +1,11 @@
+// Signature format: 4.0
+package androidx.glance.preview {
+
+  public final class Surfaces {
+    field public static final String APP_WIDGET = "AppWidget";
+    field public static final androidx.glance.preview.Surfaces INSTANCE;
+    field public static final String TILE = "Tile";
+  }
+
+}
+
diff --git a/glance/glance-preview/build.gradle b/glance/glance-preview/build.gradle
new file mode 100644
index 0000000..ce67185
--- /dev/null
+++ b/glance/glance-preview/build.gradle
@@ -0,0 +1,33 @@
+import androidx.build.AndroidXComposePlugin
+import androidx.build.LibraryType
+
+plugins {
+    id("AndroidXComposePlugin")
+    id("AndroidXPlugin")
+    id("com.android.library")
+}
+
+// Disable multi-platform; this will only be used on Android.
+AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)
+
+dependencies {
+    implementation(libs.kotlinStdlib)
+    api("androidx.annotation:annotation:1.4.0")
+    api("androidx.compose.runtime:runtime:1.1.1")
+}
+
+android {
+    defaultConfig {
+        minSdkVersion 21
+    }
+    namespace "androidx.glance.preview"
+}
+
+androidx {
+    name = "Android Glance Preview"
+    type = LibraryType.PUBLISHED_LIBRARY
+    mavenGroup = LibraryGroups.GLANCE
+    inceptionYear = "2022"
+    description = "Glance preview library. This library provides the API required for marking the" +
+            "glance @Composable components that should have preview in the Android Studio."
+}
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt b/glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/ExperimentalGlancePreviewApi.kt
similarity index 66%
copy from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
copy to glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/ExperimentalGlancePreviewApi.kt
index 8aed834..b21e9d3 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
+++ b/glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/ExperimentalGlancePreviewApi.kt
@@ -14,15 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.glance.appwidget.preview
+package androidx.glance.preview
 
-import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
-
-@Retention(AnnotationRetention.SOURCE)
-@Target(
-    AnnotationTarget.ANNOTATION_CLASS,
-    AnnotationTarget.FUNCTION
-)
-@ExperimentalGlanceRemoteViewsApi
-@Repeatable
-annotation class PreviewGlance
\ No newline at end of file
+@RequiresOptIn("This API is experimental and is likely to change in the future.")
+annotation class ExperimentalGlancePreviewApi
\ No newline at end of file
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt b/glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/GlancePreview.kt
similarity index 76%
rename from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
rename to glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/GlancePreview.kt
index 8aed834..cdc9027 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
+++ b/glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/GlancePreview.kt
@@ -14,15 +14,16 @@
  * limitations under the License.
  */
 
-package androidx.glance.appwidget.preview
+package androidx.glance.preview
 
-import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
-
+/**
+ * The annotation that marks glance components (functions) that should have visual preview.
+ */
 @Retention(AnnotationRetention.SOURCE)
 @Target(
     AnnotationTarget.ANNOTATION_CLASS,
     AnnotationTarget.FUNCTION
 )
-@ExperimentalGlanceRemoteViewsApi
+@ExperimentalGlancePreviewApi
 @Repeatable
-annotation class PreviewGlance
\ No newline at end of file
+annotation class GlancePreview(@Surface val surface: String)
diff --git a/glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/Surface.kt b/glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/Surface.kt
new file mode 100644
index 0000000..5fb0353
--- /dev/null
+++ b/glance/glance-preview/src/androidMain/kotlin/androidx/glance/preview/Surface.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2022 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.glance.preview
+
+import androidx.annotation.RestrictTo
+import androidx.annotation.StringDef
+
+/**
+ * The list of glance surfaces that have preview available. The list will grow as more glance
+ * surfaces will are added and allow the preview functionality.
+ */
+object Surfaces {
+    const val APP_WIDGET = "AppWidget"
+    const val TILE = "Tile"
+}
+
+/**
+ * The annotation that ensures that the variable value is strictly a recognized glance surface.
+ */
+@Retention(AnnotationRetention.SOURCE)
+@StringDef(value = [Surfaces.APP_WIDGET, Surfaces.TILE])
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+annotation class Surface
diff --git a/gradle.properties b/gradle.properties
index 465af51..c17e4a1 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -23,9 +23,12 @@
 android.forceJacocoOutOfProcess=true
 android.experimental.lint.missingBaselineIsEmptyBaseline=true
 
-# Generate versioned API files
+# Don't generate versioned API files
 androidx.writeVersionedApiFiles=true
 
+# Don't warn about needing to update AGP
+android.suppressUnsupportedCompileSdk=Tiramisu,33
+
 # Disable features we do not use
 android.defaults.buildfeatures.aidl=false
 android.defaults.buildfeatures.buildconfig=false
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 3cef7aa..4b46199 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -158,6 +158,7 @@
 playServicesBase = { module = "com.google.android.gms:play-services-base", version = "17.0.0" }
 playServicesBasement = { module = "com.google.android.gms:play-services-basement", version = "17.0.0" }
 playServicesWearable = { module = "com.google.android.gms:play-services-wearable", version = "17.1.0" }
+paparazzi = { module = "app.cash.paparazzi:paparazzi", version="1.0.0" }
 protobuf = { module = "com.google.protobuf:protobuf-java", version.ref = "protobuf" }
 protobufCompiler = { module = "com.google.protobuf:protoc", version.ref = "protobuf" }
 protobufGradlePluginz = { module = "com.google.protobuf:protobuf-gradle-plugin", version = "0.8.18" }
diff --git a/gradle/verification-keyring.keys b/gradle/verification-keyring.keys
index 05c098b..cee15ae 100644
--- a/gradle/verification-keyring.keys
+++ b/gradle/verification-keyring.keys
@@ -3910,39 +3910,6 @@
 -----END PGP PUBLIC KEY BLOCK-----
 
 
-pub    DEE12B9896F97E34
-sub    9A716F957BC42546
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQENBFAxQKwBCADJGPv6pmFEq0SDwAKESEgCdnXycbR0bNXpNa/3VGboNto1xKgd
-AQ/sI5x+CmN0hpUjklEwff6QIt3MlofEMkAzSfRmTobhJTK9W7r4+p5DuhJpi5Wz
-ITdbNCMT3Cvp13rRE+dx9qY+WFQmTYPf3gq+C6T8Q1i35ePNlCTN2RayaFxxR77D
-W93zKZDdd7I1qH0Vx7GGcSwBgBlEB8jmhNAkz/zAhv53S6px3ZttqYYmuwRtg6Fi
-i/u9VoDR/c9tyUq8L6oAUtg0mo4CP/tfUF/uZnibshEsLzbRP961VQXduhn8HcRp
-k6QPTj37B1vsNWJ9U7XXJ6pYnkizQo7sl5XxABEBAAG5AQ0EUDFArAEIALyNR+z1
-eBBF4S+dOEWKXz2ANmsp6RRhvR09QeQwNycVdbdEXpOiSZUCAkw/EhuJWmHBngat
-0KBO+7CIHyQqwHnqyatizzKXi1OuaEhMzPsQMwPRfYyWHgN0aklc5oOzB2RbSJN4
-et/oVvfAplVSjgR0v+56+qXw9TFlp4kxqFeJLycZ+5ImKQ+XclsBokKuE7cjeF+g
-O5oY/CFHdkxD8d+cLF8FSNUFMypuDQ4IH9zPYGkUJqsb2t67iMyxi14RqyN2YNqK
-JcwxTL42VBlUFlTBoF2Y3w0LNll6pR2WSNvpcj+5/uBjtY1qAj5e7yVts+d1YZsX
-7D76AV742RQ31kkAEQEAAYkCRAQYAQIADwUCUDFArAIbLgUJB4YfgAEpCRDe4SuY
-lvl+NMBdIAQZAQIABgUCUDFArAAKCRCacW+Ve8QlRhFDB/9xE/cXf5fVaLa598xL
-muXiD9U1B04dPdz445/chdDS9iGWBB+5QVvAqv2Jt0hyPN0+n9Mk/4lLStEEL8TP
-NLdTBP1JRvVWC1c+G3kTJq05Abj8CGFFm1UZhFRwCTJ+vrv8fSb15s+YYxBLIUdl
-tKld6OupTHm8A4XJQOhYxd5PHs72bJ3bXs4GmPLKD/RpYmXYJ9EZHQHKnrhZKJ8R
-JKTM6sxBrgdVeI1K0ekA0o5HAVpNEXgY1gG8Pa14jqK0iwlcI02ntqeJkobvv1wN
-vh+nJT2wM5QyLH737kdPrUdi63PfCYLOEHYhI6sFkzI/DAtI/C3wmHtTuRam3aLs
-Rnb7GNQH/i07ndoI4trmUor3X1JBbcjw2BVS+idCtML3jhKtziwK2/kz0rJqBQKa
-Z/zxgEfwkRPqhXLaBW8a1G/d1mGphazHqSaDqylz07XqR31ZtGCc6256anaVbWaW
-9HXUsU5ADNrAK9PdD0EibGB8YumuSTtApICUqN5SVz+h3Mi1MXVsmbiVSAZPzLTD
-0YRwzPJ3jiXIrKDUmZMM7oWwGx6nzW++tW8aKyLKm7x1/y8g+XHvySQiVOKAvvxj
-yPStkEW38Rls5nucpyLzLjoA5vlyIcOkeKCy2jlUmM56YrAIWNn/eCRFPHMOY1DO
-B1nUXMr+2W21xZO+/sWrEEysY0mdGU0=
-=uzFx
------END PGP PUBLIC KEY BLOCK-----
-
-
 pub    5F69AD087600B22C
 uid    Eric Bruneton <ebruneton@free.fr>
 
@@ -4037,6 +4004,33 @@
 -----END PGP PUBLIC KEY BLOCK-----
 
 
+pub    604F437C1682DDE5
+sub    F664BA5FCF7560B9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFv2vg0BCADQzzfU42MkbydOEese82s5wyfs/qkUZOQatjwPMyEMlK/H7LZc
+Bk2ZOgBMaDDdEZv2Vq+6oUa/rD/Xmr71gCEk5U1rqeZZ4HuvyEZjjIisjnVrMCT8
+py93im2MJb1zifvY+rgiveiVBNCjSkfqX1/g7HmGiYL30romA/io3jvtWOo6PkQf
+GYzifOKz/5j9oWm1yqdXuhVmPD1aUkpXZeoxfWDpaPS+iUm4Db38umVj7GY55okB
+rrfQAdAUuOG9dyseIgI4HPZMB562Qy2tww5q+PvSxs9ydgSbFHFu1ejCmlViSeXL
+leGPJEoiRdyu9zMW5sU68lxhErtFRpa3IORjABEBAAG5AQ0EW/a+DQEIAMiknjyN
+qHzzG07PNE68DSlUuMvraoyJSkcA6Sjsg1nTgcp9jubqekXW+ZHnNYWZJSxZx4RZ
+wloo3+A4skthmDVh2UN/FO9Vwx1EGkJuyaKELmIVBRSC4IBrVrQ/4/nUXMtG9NhL
+Qmgug3glnlXYg5gqlQc2YjNiWI1zdYmR7pHTxBhDYLB1hweA8X7SH690HDevqhiy
+/qT8YAHZzMZaauj/xQHpvn4uN5xpGm1eQw47tormy7I/1QaDW3pbS4YIC+Q7gdYd
+IA217tTgN5OA8+kXuPJJQKDMG0WtEGegYjMMuNh266HMtfekJVSlJTRdIFQT1j1U
+0OLjrk9WRK/ZcrcAEQEAAYkBJQQYAQIADwUCW/a+DQIbDAUJAeEzgAAKCRBgT0N8
+FoLd5RodB/4pZu8Segyb2VhGYbl0jgmZFqMZDI9iPINx7oZ+09Ck32R6UJgaiaTw
+KT0qeEssum3oj7zz3r5D0s1k5pwvd0w5TLL8CeQ7NxTy+hE+8cHZbFfoMBlnr73c
+UhedkZk+Cf7dm/GVkv1ERr/XnL46wLO3OAMamh2wwo9Od2GP58ZFgFd3jhroIuTt
+YtBVeB21JO5eaktP1ZLi7zsGWcP2mPkQAnd7BtQGwjh6x6M+Xhs/mZEmLP2/nLEf
+oX3eaWU6uE54giiHDC33rBGerBuHGeW0WT7wzatKPz9S51w7mqPXLYNmw7/Qwfvi
+Ca2w4l1R/HAaNTH5suZ1HGKy1nNcY6aA
+=fcxU
+-----END PGP PUBLIC KEY BLOCK-----
+
+
 pub    62BA9C275D14234E
 uid    Pierre Yves Ricau <py.ricau@gmail.com>
 
@@ -8025,6 +8019,55 @@
 -----END PGP PUBLIC KEY BLOCK-----
 
 
+pub    A6EA2E2BF22E0543
+uid    Tobias Warneke (for development purposes) <t.warneke@gmx.net>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBFJQhigBDADpuhND/VUQwJT0nnJxfjAIur59hyaZZ3Ph/KIgmCneyq7lzYO6
+xa1ucH8mqNBVNLLBhs4CjihBddU/ZKTX3WnZyhQKQMZr3Tg+TCNFmAR4/hnZ3NjZ
+N5N5gUj/dqVI2rIvypIuxUApl88BYMsxYpn2+8FKeMd8oBJLqFRJ3WNjB4Op2tRO
+XRWoxs1ypubS/IV1zkphHHpi6VSABlTyTWu4kXEj/1/GpsdtHRa9kvdWw7yKQbnM
+XuwOxtzZFJcyu0P2jYVfHHvxcjxuklc9edmCGdNxgKIoo0LXZOeFIi6OWtwzD0pn
+O6ovJ+PL9QscMdnQlPwsiCwjNUNue20GBv3aUIYc+Z8Gq0SqSan5V0IiKRHMJkzd
+FAhnpkSFBvHhPJn07BCcb1kctqL+xnLxIdi7arq3WNA/6bJjsojc/x3FdIvORIeP
+sqejhtL8mCBvbMAMHSBrFxclMp+HSz2ouHEEPIQam0KeN8t1yEqIy3/aYKMzHj9c
+C3s8XOaBCbJbKpMAEQEAAbQ9VG9iaWFzIFdhcm5la2UgKGZvciBkZXZlbG9wbWVu
+dCBwdXJwb3NlcykgPHQud2FybmVrZUBnbXgubmV0PokB1gQTAQgAQAIbDwcLCQgH
+AwIBBhUIAgkKCwQWAgMBAh4BAheAFiEE1HfVGBLmkgEdsR5mpuouK/IuBUMFAl+f
+HewFCREQdggACgkQpuouK/IuBUPAjgv+IvGD8arZP2epxB10nNxehgdB3vVGRvCz
+AWyw/d56KBwGN1czmlHINP/Ejfh4bRZgFXILISqcf+8rATvISsCgKzzfluOfDuFR
+puqZisrlaqEpDqUGK2R8x7kxARaB2G3g4dy6xyJZwv/5dfFPQJ/aQjeNkRSoXI4W
+WLNexZB3E0Gx9a3F32Xvr87vu9GchsoftxQft9joFupRg+kCipQ+w36D9gWmFXtj
+pYT3Wdrm0AcP6lezq+SpcwVn3+DW79p0/WOLhRr6NNQsRBIuM5nNIbCt8hnj9ule
+PZGctzwCTY8suID4Ru18NOiU8NKztoXII7XRloB9v5ezwktKoDzwTBgwm2+XM/vv
+GFlB09LaICdiuPQaiqSZbeLKKmBT1hTEtEHiPdMld2Hlji/rVYS3Ceiv0YUoOnmo
+AAEmtAG7ghpIJxyVtWZchZ55Hrb4oU5AntshrwYMWNRe0toxjQds5Ds2I2lqkjeU
+paUjQXEmPDS1hnckKAxI2PiOeifiLljxiQHWBBMBAgBAAhsPBwsJCAcDAgEGFQgC
+CQoLBBYCAwECHgECF4AWIQTUd9UYEuaSAR2xHmam6i4r8i4FQwUCW5n2GQUJDSpo
+eAAKCRCm6i4r8i4FQ9byDAC6yPry/EBRyJgpWXgLca8Dy56Oe9XtRA+kuAxq+c3q
+GmLy8JdBYxWeBI/dnjwzU6jCLLnY6eTigjSemHZRMPOoyxXYF47LpaoWL52JDi4R
+7xft+GD5Hy+tbDlYW5RVeMzR2Okg3XpvTmsYlcgSr6HCL0L7D25tpcFZMZrls9LN
+z80HetFk4LrR1LvVL8GpFv74xyWullpQU2QwnwXCzUpsXa9qOzwZltNIUfs4gVNG
+KhzfabYmMtlBAXzpi20bRWmJY4W+vGJKC9yWL1L4iu7LrIgMedqsKoMrl4Bg8xKE
+JGU0JEHWgfRopSr0FccP1bxWOaoJ2iN/v3Lifrk0T24vBA9cbTrnQmwrbNftJBLb
+7ccgkvkaFk+8qBe5t/OFgoV5zvmJ6xNEojpFnOtLfrPVpu8b7t3mcGVq1jQJ8afa
+8yIlQrLsA+ubA71pqgdv2ZhoWvL3R2wyxZGMX3xefqavJNxaziHGQorddrg9dyEO
+0xqXKDzjN5vuDTgSJimmZiGJAb8EEwECACkFAlJQhigCGw8FCQlmr/gHCwkIBwMC
+AQYVCAIJCgsEFgIDAQIeAQIXgAAKCRCm6i4r8i4FQ//CC/oD2LxmXHedlqlKl5WU
+EEFoXjDRpcSnfOTFdCn9U5bpBxM2gtlxNB4890TVga6C9kGfgkf9e11/ftdFQgHQ
+2LQKwpRaPOQdfk8Ek/oONmO6x6oIYXrVvY57xsW5AiFHUtPd84NJBoAyTePxstrJ
+TrFo0KQ8wX84rsU2XF/5CRCUuvx+Xomv1ALEed8Ajf9dhY85UTwIWXFINKwMTbNC
+neoBeUy3xugYEYWZCkrIk/iUvwA2pwqCwzHeDRomf1OTwW3VZ0U9/cfFyt3RgkU5
+goF55YOIpnKAjSkyygESaAs4kPrMtAJ6gy8lKsBEpxQfJWH6c5Q6MZn3RVb2S5Dx
+vlpCeiKIqnKtX1DnZrCZntt4Dwrrt4aFemLJ7+iaYndbMun3mAxG6Nqm+CfEOicG
+uTmFS6yakutYNOxJrxtz7yEIIt6yr5T3fQk6LhczhjXpVlvExPutlIsbtVZSsSlE
+lFV5uuVOVYcfjnQJtuUj5JtwP6mhn0Njj/YiJPzG2ugpM0M=
+=thlj
+-----END PGP PUBLIC KEY BLOCK-----
+
+
 pub    A730529CA355A63E
 sub    D5A25EF82542C54A
 -----BEGIN PGP PUBLIC KEY BLOCK-----
@@ -9548,6 +9591,49 @@
 -----END PGP PUBLIC KEY BLOCK-----
 
 
+pub    D364ABAA39A47320
+sub    3F606403DCA455C8
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQINBGH0NlsBEACnLJ3vl/aV+4ytkJ6QSfDFHrwzSo1eEXyuFZ85mLijvgGuaKRr
+c9/lKed0MuyhLJ7YD752kcFCEIyPbjeqEFsBcgU/RWa1AEfaay4eMLBzLSOwCvhD
+m+1zSFswH2bOqeLSbFZPQ9sVIOzO6AInaOTOoecHChHnUztAhRIOIUYmhABJGiu5
+jCP5SStoXm8YtRWT1unJcduHQ51EztQe02k+RTratQ31OSkeJORle7k7cudCS+yp
+z5gTaS1Bx02v0Y8Qaw17vY9Pn8DmsECRvXL6K7ItX6zKkSdJYVGMtiF/kp4rg94I
+XodrlzrMGPGPga9fTcqMPvx/3ffwgIsgtgaKg7te++L3db/xx48XgZ2qYAU8GssE
+N14xRFQmr8sg+QiCIHL0Az88v9mILYOqgxa3RvQ79tTqAKwPg0o2w/wF/WU0Rw53
+mdNy9JTUjetWKuoTmDaXVZO4LQ2g4W2dQTbgHyomiIgV7BnLFUiqOLPo+imruSCs
+W31Arjpb8q6XGTwjySa8waJxHhyV2AvEdAHUIdNuhD4dmPKXszlfFZwXbo1OOuIF
+tUZ9lsOQiCpuO7IpIprLc8L9d1TRnCrfM8kxMbX4KVGajWL+c8FlLnUwR4gSxT1G
+qIgZZ09wL5QiTeGF3biS5mxvn+gF9ns2Ahr2QmMqA2k5AMBTJimmY/OSWwARAQAB
+uQINBGH0NlsBEAC9o6m+D2LubGjOJxLQB1BnfBOkFHadsbkb82QFdrCNsd44fJie
+aqZVP+6XHKVRHSPktwpE1FnjThBJJsLwwcvwWXwDwvED57n4bATPlrPGuG7x+LRV
+bxFBTd+LQUCcHd3puruvbEjQdV54mbgdMqAp5dSA4Fc6h2hMWVBX4EdLiH/0ui3l
+UoqYTJcB73U1/jbKcbs0+cVuXIpmAPQpIs30p0wWLOKiJqn9tTZpwfntnrdfLvKL
+3FZcRQeWZjqH1Ywt4zWlCRqGEp7yVqhK5gn4nfEdSX2koxr53OOsGk2Pjhzs/5XJ
+Li1FTOcnja5kkqOPiPGB/BxAnjPCEsSiOFmF3Af4WdYa3+TK8+ggBSEeLjjLa5zy
+qexfhADwgb5ASZitUErJZDhAvqHGwfz3VPENy3K2kJLH+maWwOT1ZRoJnz3fxwIu
+gKhPx1MzlwhTclIknK7q2CNcB61pC9lg70ICW090NgknE2DtmjrRMONhcSkuWGLZ
+BKBgRqNwITJFcAdg6+ffZzGLsnEd+6A29PdsXfLS9KJqiabvpiBg8RaAAWiv5Tqs
+Nu9YSWUQUzBZO43u8AxTtThuHYZrxasoC3sCGIcRy2V9eaq480DRJ9uotONMutIH
+UDVSdqViPmmit0+PyRiCX/DOeBHumaEOm+RqIxPE8h6W8sHrYAQ7J1a3AQARAQAB
+iQI2BBgBCgAgFiEE7gyocwdAkvgG9Ztl02SrqjmkcyAFAmH0NlsCGwwACgkQ02Sr
+qjmkcyAsehAAps6j+qpjyNGUet/B6Z7nJcobSxnCIP/c+uUPD1oB6Uuht6NTYWQd
+wmEqL5BGz8WNTsBd0cQYvSztrMiz5tCDoiGGrWcgWxrrNxc1EVydhBbT4PpiG6CB
+WFCoEXN76/f0ndxZbjjobElTXbQ6oaLh2812OavgMdiJUVBgXrtfgi5/h49Wpc5o
+/IDM3bfujfrn5nvPIkd7Ee+GaK2YSCT7pfK4N/eW1g1SusqRQxBKCU3C5MVgVjkp
+Ba82U0kTxUGDFYUUcS+Yjhi/w4uynwIXW0pSl5wvxVVxNBfGFH5fkprkpcuVXp9B
+6SRVM85uUoZJFaIFyoAhU9uQQfVe6ugwP9BbhzRzDpJe9tiOcaazwzNnP5Zj31nI
+V6UltZu7mVSl1JwIcWxW3b36p4Ht9G5jIPQc8xS+oMd//p8r4sYFB4KOYas1ukRN
+iCshn9tJfeohkKj9ewxyUNf1rS8uOUJvZC3c3XRF8CJXRpxmHu2pPNf0QxFVhghL
+Y2cJU1OWGi6NyZN65EdfmkTbeDxdlSNv89STD4Vp6MmFtrA4JZDSR0Bp1zEPKiSx
+jpG5FpfVv6lXmFboa5qkXAHG9+bcaRYoXun+wJ3ioWo+cQEdy/bsX03+MHMsms8l
+ikmfPIGVw73RF3HXjJ8GVqTkqbo4ZpgTw/7Z3+fAYE/vxquhnpl2HvE=
+=5tlI
+-----END PGP PUBLIC KEY BLOCK-----
+
+
 pub    D4DA5EAB3CD7E958
 uid    Jiaxiang Chen <jiaxiang@google.com>
 
@@ -9606,49 +9692,6 @@
 -----END PGP PUBLIC KEY BLOCK-----
 
 
-pub    D364ABAA39A47320
-sub    3F606403DCA455C8
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: BCPG v1.68
-
-mQINBGH0NlsBEACnLJ3vl/aV+4ytkJ6QSfDFHrwzSo1eEXyuFZ85mLijvgGuaKRr
-c9/lKed0MuyhLJ7YD752kcFCEIyPbjeqEFsBcgU/RWa1AEfaay4eMLBzLSOwCvhD
-m+1zSFswH2bOqeLSbFZPQ9sVIOzO6AInaOTOoecHChHnUztAhRIOIUYmhABJGiu5
-jCP5SStoXm8YtRWT1unJcduHQ51EztQe02k+RTratQ31OSkeJORle7k7cudCS+yp
-z5gTaS1Bx02v0Y8Qaw17vY9Pn8DmsECRvXL6K7ItX6zKkSdJYVGMtiF/kp4rg94I
-XodrlzrMGPGPga9fTcqMPvx/3ffwgIsgtgaKg7te++L3db/xx48XgZ2qYAU8GssE
-N14xRFQmr8sg+QiCIHL0Az88v9mILYOqgxa3RvQ79tTqAKwPg0o2w/wF/WU0Rw53
-mdNy9JTUjetWKuoTmDaXVZO4LQ2g4W2dQTbgHyomiIgV7BnLFUiqOLPo+imruSCs
-W31Arjpb8q6XGTwjySa8waJxHhyV2AvEdAHUIdNuhD4dmPKXszlfFZwXbo1OOuIF
-tUZ9lsOQiCpuO7IpIprLc8L9d1TRnCrfM8kxMbX4KVGajWL+c8FlLnUwR4gSxT1G
-qIgZZ09wL5QiTeGF3biS5mxvn+gF9ns2Ahr2QmMqA2k5AMBTJimmY/OSWwARAQAB
-uQINBGH0NlsBEAC9o6m+D2LubGjOJxLQB1BnfBOkFHadsbkb82QFdrCNsd44fJie
-aqZVP+6XHKVRHSPktwpE1FnjThBJJsLwwcvwWXwDwvED57n4bATPlrPGuG7x+LRV
-bxFBTd+LQUCcHd3puruvbEjQdV54mbgdMqAp5dSA4Fc6h2hMWVBX4EdLiH/0ui3l
-UoqYTJcB73U1/jbKcbs0+cVuXIpmAPQpIs30p0wWLOKiJqn9tTZpwfntnrdfLvKL
-3FZcRQeWZjqH1Ywt4zWlCRqGEp7yVqhK5gn4nfEdSX2koxr53OOsGk2Pjhzs/5XJ
-Li1FTOcnja5kkqOPiPGB/BxAnjPCEsSiOFmF3Af4WdYa3+TK8+ggBSEeLjjLa5zy
-qexfhADwgb5ASZitUErJZDhAvqHGwfz3VPENy3K2kJLH+maWwOT1ZRoJnz3fxwIu
-gKhPx1MzlwhTclIknK7q2CNcB61pC9lg70ICW090NgknE2DtmjrRMONhcSkuWGLZ
-BKBgRqNwITJFcAdg6+ffZzGLsnEd+6A29PdsXfLS9KJqiabvpiBg8RaAAWiv5Tqs
-Nu9YSWUQUzBZO43u8AxTtThuHYZrxasoC3sCGIcRy2V9eaq480DRJ9uotONMutIH
-UDVSdqViPmmit0+PyRiCX/DOeBHumaEOm+RqIxPE8h6W8sHrYAQ7J1a3AQARAQAB
-iQI2BBgBCgAgFiEE7gyocwdAkvgG9Ztl02SrqjmkcyAFAmH0NlsCGwwACgkQ02Sr
-qjmkcyAsehAAps6j+qpjyNGUet/B6Z7nJcobSxnCIP/c+uUPD1oB6Uuht6NTYWQd
-wmEqL5BGz8WNTsBd0cQYvSztrMiz5tCDoiGGrWcgWxrrNxc1EVydhBbT4PpiG6CB
-WFCoEXN76/f0ndxZbjjobElTXbQ6oaLh2812OavgMdiJUVBgXrtfgi5/h49Wpc5o
-/IDM3bfujfrn5nvPIkd7Ee+GaK2YSCT7pfK4N/eW1g1SusqRQxBKCU3C5MVgVjkp
-Ba82U0kTxUGDFYUUcS+Yjhi/w4uynwIXW0pSl5wvxVVxNBfGFH5fkprkpcuVXp9B
-6SRVM85uUoZJFaIFyoAhU9uQQfVe6ugwP9BbhzRzDpJe9tiOcaazwzNnP5Zj31nI
-V6UltZu7mVSl1JwIcWxW3b36p4Ht9G5jIPQc8xS+oMd//p8r4sYFB4KOYas1ukRN
-iCshn9tJfeohkKj9ewxyUNf1rS8uOUJvZC3c3XRF8CJXRpxmHu2pPNf0QxFVhghL
-Y2cJU1OWGi6NyZN65EdfmkTbeDxdlSNv89STD4Vp6MmFtrA4JZDSR0Bp1zEPKiSx
-jpG5FpfVv6lXmFboa5qkXAHG9+bcaRYoXun+wJ3ioWo+cQEdy/bsX03+MHMsms8l
-ikmfPIGVw73RF3HXjJ8GVqTkqbo4ZpgTw/7Z3+fAYE/vxquhnpl2HvE=
-=5tlI
------END PGP PUBLIC KEY BLOCK-----
-
-
 pub    D57506CD188FD842
 sub    63F72A7A8658D653
 -----BEGIN PGP PUBLIC KEY BLOCK-----
@@ -10351,6 +10394,39 @@
 -----END PGP PUBLIC KEY BLOCK-----
 
 
+pub    DEE12B9896F97E34
+sub    9A716F957BC42546
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFAxQKwBCADJGPv6pmFEq0SDwAKESEgCdnXycbR0bNXpNa/3VGboNto1xKgd
+AQ/sI5x+CmN0hpUjklEwff6QIt3MlofEMkAzSfRmTobhJTK9W7r4+p5DuhJpi5Wz
+ITdbNCMT3Cvp13rRE+dx9qY+WFQmTYPf3gq+C6T8Q1i35ePNlCTN2RayaFxxR77D
+W93zKZDdd7I1qH0Vx7GGcSwBgBlEB8jmhNAkz/zAhv53S6px3ZttqYYmuwRtg6Fi
+i/u9VoDR/c9tyUq8L6oAUtg0mo4CP/tfUF/uZnibshEsLzbRP961VQXduhn8HcRp
+k6QPTj37B1vsNWJ9U7XXJ6pYnkizQo7sl5XxABEBAAG5AQ0EUDFArAEIALyNR+z1
+eBBF4S+dOEWKXz2ANmsp6RRhvR09QeQwNycVdbdEXpOiSZUCAkw/EhuJWmHBngat
+0KBO+7CIHyQqwHnqyatizzKXi1OuaEhMzPsQMwPRfYyWHgN0aklc5oOzB2RbSJN4
+et/oVvfAplVSjgR0v+56+qXw9TFlp4kxqFeJLycZ+5ImKQ+XclsBokKuE7cjeF+g
+O5oY/CFHdkxD8d+cLF8FSNUFMypuDQ4IH9zPYGkUJqsb2t67iMyxi14RqyN2YNqK
+JcwxTL42VBlUFlTBoF2Y3w0LNll6pR2WSNvpcj+5/uBjtY1qAj5e7yVts+d1YZsX
+7D76AV742RQ31kkAEQEAAYkCRAQYAQIADwUCUDFArAIbLgUJB4YfgAEpCRDe4SuY
+lvl+NMBdIAQZAQIABgUCUDFArAAKCRCacW+Ve8QlRhFDB/9xE/cXf5fVaLa598xL
+muXiD9U1B04dPdz445/chdDS9iGWBB+5QVvAqv2Jt0hyPN0+n9Mk/4lLStEEL8TP
+NLdTBP1JRvVWC1c+G3kTJq05Abj8CGFFm1UZhFRwCTJ+vrv8fSb15s+YYxBLIUdl
+tKld6OupTHm8A4XJQOhYxd5PHs72bJ3bXs4GmPLKD/RpYmXYJ9EZHQHKnrhZKJ8R
+JKTM6sxBrgdVeI1K0ekA0o5HAVpNEXgY1gG8Pa14jqK0iwlcI02ntqeJkobvv1wN
+vh+nJT2wM5QyLH737kdPrUdi63PfCYLOEHYhI6sFkzI/DAtI/C3wmHtTuRam3aLs
+Rnb7GNQH/i07ndoI4trmUor3X1JBbcjw2BVS+idCtML3jhKtziwK2/kz0rJqBQKa
+Z/zxgEfwkRPqhXLaBW8a1G/d1mGphazHqSaDqylz07XqR31ZtGCc6256anaVbWaW
+9HXUsU5ADNrAK9PdD0EibGB8YumuSTtApICUqN5SVz+h3Mi1MXVsmbiVSAZPzLTD
+0YRwzPJ3jiXIrKDUmZMM7oWwGx6nzW++tW8aKyLKm7x1/y8g+XHvySQiVOKAvvxj
+yPStkEW38Rls5nucpyLzLjoA5vlyIcOkeKCy2jlUmM56YrAIWNn/eCRFPHMOY1DO
+B1nUXMr+2W21xZO+/sWrEEysY0mdGU0=
+=uzFx
+-----END PGP PUBLIC KEY BLOCK-----
+
+
 pub    E0130A3ED5A2079E
 sub    0AE7BBD7FEE66E0C
 -----BEGIN PGP PUBLIC KEY BLOCK-----
@@ -10880,6 +10956,33 @@
 -----END PGP PUBLIC KEY BLOCK-----
 
 
+pub    F406F31BC1468EBA
+sub    4BB1ED965FF68B71
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBFmnALcBCAD1KazT9eswNXzML5+M72qhdIX4VlJrrOzeiQtTW9vbXj7DZUnw
+U8m2bNmKHtpnyXQ3Vl7FE/e8CKGUVKmB854VJGDSyjToeAnt8A0Lg4smaSfgbEim
+rVi6jkgSCjzvNFUsKx4uOCkI59lbAWcww1aoQZcjW3D0ZTrrjo5ilx/zNXbKMfX5
+KosRIO3OzIfHYOjsmbLKj9U6pj85AXJ3/aKuRMLbFvOE3KZTxKLhl8LsgSgJFg2g
+XFKOJeXyRHCLTlsRB2qD+jAXeE0f7nTQ3xMnMUi9U2SN4WuYxxFTtrZ7QyIze0/4
+568f0ylZda+3j/FkbcZK4KJEi11kqS/ph9UNABEBAAG5AQ0EWacAtwEIAKH79EfC
+C5z/pkDx9MVSnoA5WAYX20KL+ErpMnaRbwzpizQeQVhqDjiKGCk6qyC4PUUk+H3I
+aYuTQN+rABVur4S2sO6AyNUETpAMNmrZNvClG/p6gnlYml0vzvEKtsa3U88rTTWx
+fzoecQs0UugkUrRuJI4XJyTMgRuDDLClH7IUjkrUmw2g6EzlDVdLczcpLxvP93j6
+I8R+DwDwlCX6Nqw5Nnr7Q16n9sPgDthJAF+7VS7xXs/jeGROFckdrolrQGirwbfa
+Kh4k0gfSJykV1ivuKx7QOWN6bYejph9DXD8oxE+Nne1y8tfNZFw16i75y46zAVqr
+rKY79Pkcr4RgP9sAEQEAAYkBHwQYAQIACQUCWacAtwIbDAAKCRD0BvMbwUaOunu/
+CADJcTU+K/cg8ItaIfMWM+miuYpoITqDiMpMw+2RkUnlXwn1ouZP0QP7Cpt3mq+K
+Ihei1JIRKR5+XvMV5h8ffvDy6gKpWdsUFadyLMNY07/HVtE2ydUjDhPo5vb2AWe0
+9qMZWef1/hQumkqqhz9Dbs/L8QATpnYVAtv4QMKFwDAXYCgnBijZClYwwhnJwJ3U
+rPejhP0MQomdy/li9kFMlkp795s0Ng5I/BjkFYg/S3IFQEHsgizPclibJdUR8P2C
+GXOcxXB5dE7ykv51FxMpcpgd6jnK0XRzWwQExelrRb5ys/D7pDiJBuGG/u4Hykbm
+LuHslpPWYJ7ZOeVf01xL+I5T
+=dLR3
+-----END PGP PUBLIC KEY BLOCK-----
+
+
 pub    F42E87F9665015C9
 uid    Jonathan Hedley <jonathan@hedley.net>
 
@@ -11068,50 +11171,3 @@
 Pt2uco8an9pO9/oqU6vlZUr38w==
 =alQS
 -----END PGP PUBLIC KEY BLOCK-----
-
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Comment: Hostname:
-Version: Hockeypuck 2.1.0-152-ga266fd3
-
-xsDNBFJQhigBDADpuhND/VUQwJT0nnJxfjAIur59hyaZZ3Ph/KIgmCneyq7lzYO6
-xa1ucH8mqNBVNLLBhs4CjihBddU/ZKTX3WnZyhQKQMZr3Tg+TCNFmAR4/hnZ3NjZ
-N5N5gUj/dqVI2rIvypIuxUApl88BYMsxYpn2+8FKeMd8oBJLqFRJ3WNjB4Op2tRO
-XRWoxs1ypubS/IV1zkphHHpi6VSABlTyTWu4kXEj/1/GpsdtHRa9kvdWw7yKQbnM
-XuwOxtzZFJcyu0P2jYVfHHvxcjxuklc9edmCGdNxgKIoo0LXZOeFIi6OWtwzD0pn
-O6ovJ+PL9QscMdnQlPwsiCwjNUNue20GBv3aUIYc+Z8Gq0SqSan5V0IiKRHMJkzd
-FAhnpkSFBvHhPJn07BCcb1kctqL+xnLxIdi7arq3WNA/6bJjsojc/x3FdIvORIeP
-sqejhtL8mCBvbMAMHSBrFxclMp+HSz2ouHEEPIQam0KeN8t1yEqIy3/aYKMzHj9c
-C3s8XOaBCbJbKpMAEQEAAc09VG9iaWFzIFdhcm5la2UgKGZvciBkZXZlbG9wbWVu
-dCBwdXJwb3NlcykgPHQud2FybmVrZUBnbXgubmV0PsLBFgQTAQgAQAIbDwcLCQgH
-AwIBBhUIAgkKCwQWAgMBAh4BAheAFiEE1HfVGBLmkgEdsR5mpuouK/IuBUMFAl+f
-HewFCREQdggACgkQpuouK/IuBUPAjgv+IvGD8arZP2epxB10nNxehgdB3vVGRvCz
-AWyw/d56KBwGN1czmlHINP/Ejfh4bRZgFXILISqcf+8rATvISsCgKzzfluOfDuFR
-puqZisrlaqEpDqUGK2R8x7kxARaB2G3g4dy6xyJZwv/5dfFPQJ/aQjeNkRSoXI4W
-WLNexZB3E0Gx9a3F32Xvr87vu9GchsoftxQft9joFupRg+kCipQ+w36D9gWmFXtj
-pYT3Wdrm0AcP6lezq+SpcwVn3+DW79p0/WOLhRr6NNQsRBIuM5nNIbCt8hnj9ule
-PZGctzwCTY8suID4Ru18NOiU8NKztoXII7XRloB9v5ezwktKoDzwTBgwm2+XM/vv
-GFlB09LaICdiuPQaiqSZbeLKKmBT1hTEtEHiPdMld2Hlji/rVYS3Ceiv0YUoOnmo
-AAEmtAG7ghpIJxyVtWZchZ55Hrb4oU5AntshrwYMWNRe0toxjQds5Ds2I2lqkjeU
-paUjQXEmPDS1hnckKAxI2PiOeifiLljxwsEWBBMBAgBAAhsPBwsJCAcDAgEGFQgC
-CQoLBBYCAwECHgECF4AWIQTUd9UYEuaSAR2xHmam6i4r8i4FQwUCW5n2GQUJDSpo
-eAAKCRCm6i4r8i4FQ9byDAC6yPry/EBRyJgpWXgLca8Dy56Oe9XtRA+kuAxq+c3q
-GmLy8JdBYxWeBI/dnjwzU6jCLLnY6eTigjSemHZRMPOoyxXYF47LpaoWL52JDi4R
-7xft+GD5Hy+tbDlYW5RVeMzR2Okg3XpvTmsYlcgSr6HCL0L7D25tpcFZMZrls9LN
-z80HetFk4LrR1LvVL8GpFv74xyWullpQU2QwnwXCzUpsXa9qOzwZltNIUfs4gVNG
-KhzfabYmMtlBAXzpi20bRWmJY4W+vGJKC9yWL1L4iu7LrIgMedqsKoMrl4Bg8xKE
-JGU0JEHWgfRopSr0FccP1bxWOaoJ2iN/v3Lifrk0T24vBA9cbTrnQmwrbNftJBLb
-7ccgkvkaFk+8qBe5t/OFgoV5zvmJ6xNEojpFnOtLfrPVpu8b7t3mcGVq1jQJ8afa
-8yIlQrLsA+ubA71pqgdv2ZhoWvL3R2wyxZGMX3xefqavJNxaziHGQorddrg9dyEO
-0xqXKDzjN5vuDTgSJimmZiHCwP8EEwECACkFAlJQhigCGw8FCQlmr/gHCwkIBwMC
-AQYVCAIJCgsEFgIDAQIeAQIXgAAKCRCm6i4r8i4FQ//CC/oD2LxmXHedlqlKl5WU
-EEFoXjDRpcSnfOTFdCn9U5bpBxM2gtlxNB4890TVga6C9kGfgkf9e11/ftdFQgHQ
-2LQKwpRaPOQdfk8Ek/oONmO6x6oIYXrVvY57xsW5AiFHUtPd84NJBoAyTePxstrJ
-TrFo0KQ8wX84rsU2XF/5CRCUuvx+Xomv1ALEed8Ajf9dhY85UTwIWXFINKwMTbNC
-neoBeUy3xugYEYWZCkrIk/iUvwA2pwqCwzHeDRomf1OTwW3VZ0U9/cfFyt3RgkU5
-goF55YOIpnKAjSkyygESaAs4kPrMtAJ6gy8lKsBEpxQfJWH6c5Q6MZn3RVb2S5Dx
-vlpCeiKIqnKtX1DnZrCZntt4Dwrrt4aFemLJ7+iaYndbMun3mAxG6Nqm+CfEOicG
-uTmFS6yakutYNOxJrxtz7yEIIt6yr5T3fQk6LhczhjXpVlvExPutlIsbtVZSsSlE
-lFV5uuVOVYcfjnQJtuUj5JtwP6mhn0Njj/YiJPzG2ugpM0M=
-=BDYe
------END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 6a1d261..948919c 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -244,6 +244,7 @@
             <trusting group="com.google.auto"/>
             <trusting group="com.google.auto.value" name="auto-value"/>
          </trusted-key>
+         <trusted-key id="70731c2ffb496dc4e8105aa3604f437c1682dde5" group="app.cash.paparazzi"/>
          <trusted-key id="70cd19bfd9f6c330027d6f260315bfb7970a144f">
             <trusting group="com.sun.xml.bind"/>
             <trusting group="javax.xml.bind"/>
@@ -268,6 +269,7 @@
          <trusted-key id="8254180bfc943b816e0b5e2e5e2f2b3d474efe6b" group="it.unimi.dsi"/>
          <trusted-key id="82b5574242c20d6f" group="org.antlr"/>
          <trusted-key id="82f833963889d7ed06f1e4dc6525fd70cc303655" group="org.codehaus.mojo"/>
+         <trusted-key id="835a685c8c6f49c54980e5caf406f31bc1468eba" group="org.jcodec"/>
          <trusted-key id="840b2bf6da8ed8c8" group="com.google.android.apps.common.testing.accessibility.framework"/>
          <trusted-key id="842afb86375d805422835bfd82b5574242c20d6f" group="org.antlr"/>
          <trusted-key id="8569c95cadc508b09fe90f3002216ed811210daa" group="io.github.detekt.sarif4k" name="sarif4k"/>
@@ -630,6 +632,11 @@
             <sha256 value="2864f19da84fd52763d75a197a71779b2decbccaac3eb4e4760ffc884c5af4a2" origin="Generated by Gradle because artifact wasn't signed"/>
          </artifact>
       </component>
+      <component group="kxml2" name="kxml2" version="2.3.0" androidx:reason="https://github.com/kobjects/kxml2/issues/20">
+         <artifact name="kxml2-2.3.0.pom">
+            <sha256 value="095bf24f46ded9de0b66ca9d671dcf54f8f615ba95150b1a313c3475c55fd6a5" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="net.java" name="jvnet-parent" version="1" androidx:reason="Unsigned">
          <artifact name="jvnet-parent-1.pom">
             <sha256 value="281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf" origin="Generated by Gradle"/>
@@ -653,7 +660,7 @@
             <sha256 value="1af699f8d9ddab67f9a0d202fbd7915eb0362a5a6dfd5ffc54cafa3465c9cb0a" origin="Generated by Gradle"/>
          </artifact>
       </component>
-      <component group="net.sf.kxml" name="kxml2" version="2.3.0" androidx:reason="Unsigned">
+      <component group="net.sf.kxml" name="kxml2" version="2.3.0" androidx:reason="https://github.com/kobjects/kxml2/issues/20">
          <artifact name="kxml2-2.3.0.jar">
             <sha256 value="f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2" origin="Generated by Gradle"/>
          </artifact>
@@ -693,6 +700,11 @@
             <sha256 value="b217e9a1f1503c9f0c744b736fc2afed6fa6c3c2e86e5276a3c549f5bd48baef" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="org.jetbrains.kotlin" name="kotlin-reflect" version="1.3.71" androidx:reason="https://youtrack.jetbrains.com/issue/KT-50957">
+         <artifact name="kotlin-reflect-1.3.71.pom">
+            <sha256 value="4df94aaeee8d900be431386e31ef44e82a66e57c3ae30866aec2875aff01fe70" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="org.ow2" name="ow2" version="1.5" androidx:reason="https://gitlab.ow2.org/asm/asm/-/merge_requests/354">
          <artifact name="ow2-1.5.pom">
             <sha256 value="0f8a1b116e760b8fe6389c51b84e4b07a70fc11082d4f936e453b583dd50b43b" origin="Generated by Gradle"/>
diff --git a/graphics/OWNERS b/graphics/OWNERS
new file mode 100644
index 0000000..9ba9c32
--- /dev/null
+++ b/graphics/OWNERS
@@ -0,0 +1,4 @@
+# Bug component: 1137062
+sumir@google.com
+jreck@google.com
+njawad@google.com
diff --git a/graphics/graphics-core/api/current.txt b/graphics/graphics-core/api/current.txt
new file mode 100644
index 0000000..4136e2e
--- /dev/null
+++ b/graphics/graphics-core/api/current.txt
@@ -0,0 +1,345 @@
+// Signature format: 4.0
+package androidx.graphics.lowlatency {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class GLFrontBufferedRenderer<T> {
+    ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
+    ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback);
+    method public void clear();
+    method public void commit();
+    method public boolean isValid();
+    method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
+    method public void release(boolean cancelPending);
+    method public void renderFrontBufferedLayer(T? param);
+    field public static final androidx.graphics.lowlatency.GLFrontBufferedRenderer.Companion Companion;
+  }
+
+  public static interface GLFrontBufferedRenderer.Callback<T> {
+    method @WorkerThread public default void onDoubleBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+    method @WorkerThread public void onDrawDoubleBufferedLayer(androidx.graphics.opengl.egl.EGLManager eglManager, java.util.Collection<? extends T> params);
+    method @WorkerThread public void onDrawFrontBufferedLayer(androidx.graphics.opengl.egl.EGLManager eglManager, T? param);
+    method @WorkerThread public default void onFrontBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+  }
+
+  public static final class GLFrontBufferedRenderer.Companion {
+  }
+
+  @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public final class SyncFenceCompat implements java.lang.AutoCloseable {
+    method public boolean await(long timeoutNanos);
+    method public boolean awaitForever();
+    method public void close();
+    method public static androidx.graphics.lowlatency.SyncFenceCompat createNativeSyncFence(androidx.graphics.opengl.egl.EGLSpec egl);
+    field public static final androidx.graphics.lowlatency.SyncFenceCompat.Companion Companion;
+  }
+
+  public static final class SyncFenceCompat.Companion {
+    method public androidx.graphics.lowlatency.SyncFenceCompat createNativeSyncFence(androidx.graphics.opengl.egl.EGLSpec egl);
+  }
+
+  public final class SyncFenceCompatKt {
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) @kotlin.jvm.JvmSynthetic public static androidx.graphics.lowlatency.SyncFenceCompat! createNativeSyncFence(androidx.graphics.opengl.egl.EGLSpec);
+  }
+
+}
+
+package androidx.graphics.opengl {
+
+  public final class GLRenderer {
+    ctor public GLRenderer(optional kotlin.jvm.functions.Function0<? extends androidx.graphics.opengl.egl.EGLSpec> eglSpecFactory, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLManager,? extends android.opengl.EGLConfig> eglConfigFactory);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.Surface surface, int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.SurfaceView surfaceView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.TextureView textureView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget createRenderTarget(int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+    method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending);
+    method public boolean isRunning();
+    method public void registerEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
+    method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+    method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target);
+    method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+    method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height);
+    method public void start(optional String name);
+    method public void start();
+    method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
+    method public void stop(boolean cancelPending);
+    method public void unregisterEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
+    field public static final androidx.graphics.opengl.GLRenderer.Companion Companion;
+  }
+
+  public static final class GLRenderer.Companion {
+  }
+
+  public static interface GLRenderer.EGLContextCallback {
+    method @WorkerThread public void onEGLContextCreated(androidx.graphics.opengl.egl.EGLManager eglManager);
+    method @WorkerThread public void onEGLContextDestroyed(androidx.graphics.opengl.egl.EGLManager eglManager);
+  }
+
+  public static interface GLRenderer.RenderCallback {
+    method @WorkerThread public void onDrawFrame(androidx.graphics.opengl.egl.EGLManager eglManager);
+    method @WorkerThread public default android.opengl.EGLSurface? onSurfaceCreated(androidx.graphics.opengl.egl.EGLSpec spec, android.opengl.EGLConfig config, android.view.Surface surface, int width, int height);
+  }
+
+  public static final class GLRenderer.RenderTarget {
+    method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+    method public void detach(boolean cancelPending);
+    method public boolean isAttached();
+    method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+    method public void requestRender();
+    method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+    method public void resize(int width, int height);
+  }
+
+}
+
+package androidx.graphics.opengl.egl {
+
+  public final class EGLConfigAttributes {
+    method public int[] toArray();
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes.Companion Companion;
+    field public static final int EGL_COLOR_COMPONENT_TYPE_EXT = 13113; // 0x3339
+    field public static final int EGL_COLOR_COMPONENT_TYPE_FIXED_EXT = 13114; // 0x333a
+    field public static final int EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT = 13115; // 0x333b
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes RGBA_1010102;
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes RGBA_8888;
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes RGBA_F16;
+  }
+
+  public static final class EGLConfigAttributes.Builder {
+    method public androidx.graphics.opengl.egl.EGLConfigAttributes build();
+    method public void include(androidx.graphics.opengl.egl.EGLConfigAttributes attributes);
+    method public androidx.graphics.opengl.egl.EGLConfigAttributes.Builder setAttribute(int attribute, int value);
+    method @kotlin.jvm.JvmSynthetic public infix void to(int, int that);
+  }
+
+  public static final class EGLConfigAttributes.Companion {
+  }
+
+  public final class EGLConfigAttributesKt {
+    method @kotlin.jvm.JvmSynthetic public static inline androidx.graphics.opengl.egl.EGLConfigAttributes! EGLConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLConfigAttributes.Builder,? extends kotlin.Unit> block);
+  }
+
+  public final class EGLException extends java.lang.RuntimeException {
+    ctor public EGLException(int error, optional String msg);
+    method public int getError();
+    method public String getMsg();
+    property public final int error;
+    property public String message;
+    property public final String msg;
+  }
+
+  public final class EGLManager {
+    ctor public EGLManager(optional androidx.graphics.opengl.egl.EGLSpec eglSpec);
+    method public android.opengl.EGLContext createContext(android.opengl.EGLConfig config);
+    method public android.opengl.EGLSurface getCurrentDrawSurface();
+    method public android.opengl.EGLSurface getCurrentReadSurface();
+    method public android.opengl.EGLSurface getDefaultSurface();
+    method public android.opengl.EGLConfig? getEGLConfig();
+    method public android.opengl.EGLContext? getEGLContext();
+    method public androidx.graphics.opengl.egl.EGLSpec getEGLSpec();
+    method public androidx.graphics.opengl.egl.EGLVersion getEGLVersion();
+    method public void initialize();
+    method public boolean isExtensionSupported(String extensionName);
+    method public android.opengl.EGLConfig? loadConfig(androidx.graphics.opengl.egl.EGLConfigAttributes configAttributes);
+    method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
+    method public boolean makeCurrent(android.opengl.EGLSurface drawSurface);
+    method public void release();
+    method public void swapAndFlushBuffers();
+    property public final android.opengl.EGLSurface currentDrawSurface;
+    property public final android.opengl.EGLSurface currentReadSurface;
+    property public final android.opengl.EGLSurface defaultSurface;
+    property public final android.opengl.EGLConfig? eglConfig;
+    property public final android.opengl.EGLContext? eglContext;
+    property public final androidx.graphics.opengl.egl.EGLSpec eglSpec;
+    property public final androidx.graphics.opengl.egl.EGLVersion eglVersion;
+    field public static final androidx.graphics.opengl.egl.EGLManager.Companion Companion;
+  }
+
+  public static final class EGLManager.Companion {
+  }
+
+  public interface EGLSpec {
+    method public int eglClientWaitSyncKHR(androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+    method public android.opengl.EGLContext eglCreateContext(android.opengl.EGLConfig config);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.hardware.HardwareBuffer hardwareBuffer);
+    method public android.opengl.EGLSurface eglCreatePBufferSurface(android.opengl.EGLConfig config, androidx.graphics.opengl.egl.EGLConfigAttributes? configAttributes);
+    method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(int type, androidx.graphics.opengl.egl.EGLConfigAttributes? attributes);
+    method public android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLConfig config, android.view.Surface surface, androidx.graphics.opengl.egl.EGLConfigAttributes? configAttributes);
+    method public void eglDestroyContext(android.opengl.EGLContext eglContext);
+    method public boolean eglDestroyImageKHR(androidx.opengl.EGLImageKHR image);
+    method public boolean eglDestroySurface(android.opengl.EGLSurface surface);
+    method public boolean eglDestroySyncKHR(androidx.opengl.EGLSyncKHR sync);
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFence eglDupNativeFenceFDANDROID(androidx.opengl.EGLSyncKHR sync);
+    method public android.opengl.EGLSurface eglGetCurrentDrawSurface();
+    method public android.opengl.EGLSurface eglGetCurrentReadSurface();
+    method public int eglGetError();
+    method public boolean eglGetSyncAttribKHR(androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+    method public androidx.graphics.opengl.egl.EGLVersion eglInitialize();
+    method public boolean eglMakeCurrent(android.opengl.EGLContext context, android.opengl.EGLSurface drawSurface, android.opengl.EGLSurface readSurface);
+    method public String eglQueryString(int nameId);
+    method public boolean eglQuerySurface(android.opengl.EGLSurface surface, int attribute, int[] result, int offset);
+    method public boolean eglSwapBuffers(android.opengl.EGLSurface surface);
+    method public default String getErrorMessage();
+    method public default static String getStatusString(int error);
+    method public android.opengl.EGLConfig? loadConfig(androidx.graphics.opengl.egl.EGLConfigAttributes configAttributes);
+    field public static final androidx.graphics.opengl.egl.EGLSpec.Companion Companion;
+    field public static final androidx.graphics.opengl.egl.EGLSpec V14;
+  }
+
+  public static final class EGLSpec.Companion {
+    method public String getStatusString(int error);
+  }
+
+  public final class EGLVersion {
+    ctor public EGLVersion(int major, int minor);
+    method public int component1();
+    method public int component2();
+    method public androidx.graphics.opengl.egl.EGLVersion copy(int major, int minor);
+    method public int getMajor();
+    method public int getMinor();
+    property public final int major;
+    property public final int minor;
+    field public static final androidx.graphics.opengl.egl.EGLVersion.Companion Companion;
+    field public static final androidx.graphics.opengl.egl.EGLVersion Unknown;
+    field public static final androidx.graphics.opengl.egl.EGLVersion V14;
+    field public static final androidx.graphics.opengl.egl.EGLVersion V15;
+  }
+
+  public static final class EGLVersion.Companion {
+  }
+
+}
+
+package androidx.graphics.surface {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class SurfaceControlCompat {
+    method public boolean isValid();
+    method public void release();
+  }
+
+  public static final class SurfaceControlCompat.Builder {
+    ctor public SurfaceControlCompat.Builder();
+    method public androidx.graphics.surface.SurfaceControlCompat build();
+    method public androidx.graphics.surface.SurfaceControlCompat.Builder setName(String name);
+    method public androidx.graphics.surface.SurfaceControlCompat.Builder setParent(android.view.SurfaceView surfaceView);
+  }
+
+  public static final class SurfaceControlCompat.Transaction implements java.lang.AutoCloseable {
+    ctor public SurfaceControlCompat.Transaction();
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
+    method public void close();
+    method public void commit();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.SurfaceView surfaceView);
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.AttachedSurfaceControl attachedSurfaceControl);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setAlpha(androidx.graphics.surface.SurfaceControlCompat surfaceControl, float alpha);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer, optional androidx.graphics.lowlatency.SyncFenceCompat? fence, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer, optional androidx.graphics.lowlatency.SyncFenceCompat? fence);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setDamageRegion(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Region? region);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setLayer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, int z);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setOpaque(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean isOpaque);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setVisibility(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean visible);
+  }
+
+  public static interface SurfaceControlCompat.TransactionCommittedListener {
+    method public void onTransactionCommitted();
+  }
+
+}
+
+package androidx.hardware {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public final class SyncFence implements java.lang.AutoCloseable {
+    ctor public SyncFence(int fd);
+    method public boolean await(long timeoutNanos);
+    method public boolean awaitForever();
+    method public void close();
+    method public long getSignalTime();
+    method public boolean isValid();
+    field public static final androidx.hardware.SyncFence.Companion Companion;
+    field public static final long SIGNAL_TIME_INVALID = -1L; // 0xffffffffffffffffL
+    field public static final long SIGNAL_TIME_PENDING = 9223372036854775807L; // 0x7fffffffffffffffL
+  }
+
+  public static final class SyncFence.Companion {
+  }
+
+}
+
+package androidx.opengl {
+
+  public final class EGLExt {
+    method public static int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+    method public static androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, androidx.graphics.opengl.egl.EGLConfigAttributes? attributes);
+    method public static boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+    method public static boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public static androidx.hardware.SyncFence eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+    method public static boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+    method public static void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+    method public static java.util.Set<java.lang.String> parseExtensions(String queryString);
+    field public static final androidx.opengl.EGLExt.Companion Companion;
+    field public static final String EGL_ANDROID_IMAGE_NATIVE_BUFFER = "EGL_ANDROID_image_native_buffer";
+    field public static final String EGL_ANDROID_NATIVE_FENCE_SYNC = "EGL_ANDROID_native_fence_sync";
+    field public static final int EGL_CONDITION_SATISFIED_KHR = 12534; // 0x30f6
+    field public static final String EGL_EXT_BUFFER_AGE = "EGL_EXT_buffer_age";
+    field public static final String EGL_EXT_GL_COLORSPACE_BT2020_PQ = "EGL_EXT_gl_colorspace_bt2020_pq";
+    field public static final String EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH = "EGL_EXT_gl_colorspace_display_p3_passthrough";
+    field public static final String EGL_EXT_GL_COLORSPACE_SCRGB = "EGL_EXT_gl_colorspace_scrgb";
+    field public static final String EGL_EXT_PIXEL_FORMAT_FLOAT = "EGL_EXT_pixel_format_float";
+    field public static final int EGL_FALSE = 0; // 0x0
+    field public static final long EGL_FOREVER_KHR = -1L; // 0xffffffffffffffffL
+    field public static final String EGL_IMG_CONTEXT_PRIORITY = "EGL_IMG_context_priority";
+    field public static final String EGL_KHR_FENCE_SYNC = "EGL_KHR_fence_sync";
+    field public static final String EGL_KHR_GL_COLORSPACE = "EGL_KHR_gl_colorspace";
+    field public static final String EGL_KHR_IMAGE = "EGL_KHR_image";
+    field public static final String EGL_KHR_IMAGE_BASE = "EGL_KHR_image_base";
+    field public static final String EGL_KHR_NO_CONFIG_CONTEXT = "EGL_KHR_no_config_context";
+    field public static final String EGL_KHR_PARTIAL_UPDATE = "EGL_KHR_partial_update";
+    field public static final String EGL_KHR_SURFACELESS_CONTEXT = "EGL_KHR_surfaceless_context";
+    field public static final String EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE = "EGL_KHR_swap_buffers_with_damage";
+    field public static final String EGL_KHR_WAIT_SYNC = "EGL_KHR_wait_sync";
+    field public static final int EGL_SIGNALED_KHR = 12530; // 0x30f2
+    field public static final int EGL_SYNC_CONDITION_KHR = 12536; // 0x30f8
+    field public static final int EGL_SYNC_FENCE_KHR = 12537; // 0x30f9
+    field public static final int EGL_SYNC_FLUSH_COMMANDS_BIT_KHR = 1; // 0x1
+    field public static final int EGL_SYNC_NATIVE_FENCE_ANDROID = 12612; // 0x3144
+    field public static final int EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR = 12528; // 0x30f0
+    field public static final int EGL_SYNC_STATUS_KHR = 12529; // 0x30f1
+    field public static final int EGL_SYNC_TYPE_KHR = 12535; // 0x30f7
+    field public static final int EGL_TIMEOUT_EXPIRED_KHR = 12533; // 0x30f5
+    field public static final int EGL_TRUE = 1; // 0x1
+    field public static final int EGL_UNSIGNALED_KHR = 12531; // 0x30f3
+  }
+
+  public static final class EGLExt.Companion {
+    method public int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+    method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, androidx.graphics.opengl.egl.EGLConfigAttributes? attributes);
+    method public boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+    method public boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFence eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+    method public boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+    method public void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+    method public java.util.Set<java.lang.String> parseExtensions(String queryString);
+  }
+
+  public interface EGLHandle {
+    method public long getNativeHandle();
+    property public abstract long nativeHandle;
+  }
+
+  public final class EGLImageKHR implements androidx.opengl.EGLHandle {
+    ctor public EGLImageKHR(long nativeHandle);
+    method public long getNativeHandle();
+    property public long nativeHandle;
+  }
+
+  public final class EGLSyncKHR implements androidx.opengl.EGLHandle {
+    ctor public EGLSyncKHR(long nativeHandle);
+    method public long getNativeHandle();
+    property public long nativeHandle;
+  }
+
+}
+
diff --git a/graphics/graphics-core/api/public_plus_experimental_current.txt b/graphics/graphics-core/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..4136e2e
--- /dev/null
+++ b/graphics/graphics-core/api/public_plus_experimental_current.txt
@@ -0,0 +1,345 @@
+// Signature format: 4.0
+package androidx.graphics.lowlatency {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class GLFrontBufferedRenderer<T> {
+    ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
+    ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback);
+    method public void clear();
+    method public void commit();
+    method public boolean isValid();
+    method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
+    method public void release(boolean cancelPending);
+    method public void renderFrontBufferedLayer(T? param);
+    field public static final androidx.graphics.lowlatency.GLFrontBufferedRenderer.Companion Companion;
+  }
+
+  public static interface GLFrontBufferedRenderer.Callback<T> {
+    method @WorkerThread public default void onDoubleBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+    method @WorkerThread public void onDrawDoubleBufferedLayer(androidx.graphics.opengl.egl.EGLManager eglManager, java.util.Collection<? extends T> params);
+    method @WorkerThread public void onDrawFrontBufferedLayer(androidx.graphics.opengl.egl.EGLManager eglManager, T? param);
+    method @WorkerThread public default void onFrontBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+  }
+
+  public static final class GLFrontBufferedRenderer.Companion {
+  }
+
+  @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public final class SyncFenceCompat implements java.lang.AutoCloseable {
+    method public boolean await(long timeoutNanos);
+    method public boolean awaitForever();
+    method public void close();
+    method public static androidx.graphics.lowlatency.SyncFenceCompat createNativeSyncFence(androidx.graphics.opengl.egl.EGLSpec egl);
+    field public static final androidx.graphics.lowlatency.SyncFenceCompat.Companion Companion;
+  }
+
+  public static final class SyncFenceCompat.Companion {
+    method public androidx.graphics.lowlatency.SyncFenceCompat createNativeSyncFence(androidx.graphics.opengl.egl.EGLSpec egl);
+  }
+
+  public final class SyncFenceCompatKt {
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) @kotlin.jvm.JvmSynthetic public static androidx.graphics.lowlatency.SyncFenceCompat! createNativeSyncFence(androidx.graphics.opengl.egl.EGLSpec);
+  }
+
+}
+
+package androidx.graphics.opengl {
+
+  public final class GLRenderer {
+    ctor public GLRenderer(optional kotlin.jvm.functions.Function0<? extends androidx.graphics.opengl.egl.EGLSpec> eglSpecFactory, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLManager,? extends android.opengl.EGLConfig> eglConfigFactory);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.Surface surface, int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.SurfaceView surfaceView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.TextureView textureView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget createRenderTarget(int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+    method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending);
+    method public boolean isRunning();
+    method public void registerEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
+    method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+    method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target);
+    method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+    method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height);
+    method public void start(optional String name);
+    method public void start();
+    method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
+    method public void stop(boolean cancelPending);
+    method public void unregisterEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
+    field public static final androidx.graphics.opengl.GLRenderer.Companion Companion;
+  }
+
+  public static final class GLRenderer.Companion {
+  }
+
+  public static interface GLRenderer.EGLContextCallback {
+    method @WorkerThread public void onEGLContextCreated(androidx.graphics.opengl.egl.EGLManager eglManager);
+    method @WorkerThread public void onEGLContextDestroyed(androidx.graphics.opengl.egl.EGLManager eglManager);
+  }
+
+  public static interface GLRenderer.RenderCallback {
+    method @WorkerThread public void onDrawFrame(androidx.graphics.opengl.egl.EGLManager eglManager);
+    method @WorkerThread public default android.opengl.EGLSurface? onSurfaceCreated(androidx.graphics.opengl.egl.EGLSpec spec, android.opengl.EGLConfig config, android.view.Surface surface, int width, int height);
+  }
+
+  public static final class GLRenderer.RenderTarget {
+    method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+    method public void detach(boolean cancelPending);
+    method public boolean isAttached();
+    method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+    method public void requestRender();
+    method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+    method public void resize(int width, int height);
+  }
+
+}
+
+package androidx.graphics.opengl.egl {
+
+  public final class EGLConfigAttributes {
+    method public int[] toArray();
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes.Companion Companion;
+    field public static final int EGL_COLOR_COMPONENT_TYPE_EXT = 13113; // 0x3339
+    field public static final int EGL_COLOR_COMPONENT_TYPE_FIXED_EXT = 13114; // 0x333a
+    field public static final int EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT = 13115; // 0x333b
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes RGBA_1010102;
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes RGBA_8888;
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes RGBA_F16;
+  }
+
+  public static final class EGLConfigAttributes.Builder {
+    method public androidx.graphics.opengl.egl.EGLConfigAttributes build();
+    method public void include(androidx.graphics.opengl.egl.EGLConfigAttributes attributes);
+    method public androidx.graphics.opengl.egl.EGLConfigAttributes.Builder setAttribute(int attribute, int value);
+    method @kotlin.jvm.JvmSynthetic public infix void to(int, int that);
+  }
+
+  public static final class EGLConfigAttributes.Companion {
+  }
+
+  public final class EGLConfigAttributesKt {
+    method @kotlin.jvm.JvmSynthetic public static inline androidx.graphics.opengl.egl.EGLConfigAttributes! EGLConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLConfigAttributes.Builder,? extends kotlin.Unit> block);
+  }
+
+  public final class EGLException extends java.lang.RuntimeException {
+    ctor public EGLException(int error, optional String msg);
+    method public int getError();
+    method public String getMsg();
+    property public final int error;
+    property public String message;
+    property public final String msg;
+  }
+
+  public final class EGLManager {
+    ctor public EGLManager(optional androidx.graphics.opengl.egl.EGLSpec eglSpec);
+    method public android.opengl.EGLContext createContext(android.opengl.EGLConfig config);
+    method public android.opengl.EGLSurface getCurrentDrawSurface();
+    method public android.opengl.EGLSurface getCurrentReadSurface();
+    method public android.opengl.EGLSurface getDefaultSurface();
+    method public android.opengl.EGLConfig? getEGLConfig();
+    method public android.opengl.EGLContext? getEGLContext();
+    method public androidx.graphics.opengl.egl.EGLSpec getEGLSpec();
+    method public androidx.graphics.opengl.egl.EGLVersion getEGLVersion();
+    method public void initialize();
+    method public boolean isExtensionSupported(String extensionName);
+    method public android.opengl.EGLConfig? loadConfig(androidx.graphics.opengl.egl.EGLConfigAttributes configAttributes);
+    method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
+    method public boolean makeCurrent(android.opengl.EGLSurface drawSurface);
+    method public void release();
+    method public void swapAndFlushBuffers();
+    property public final android.opengl.EGLSurface currentDrawSurface;
+    property public final android.opengl.EGLSurface currentReadSurface;
+    property public final android.opengl.EGLSurface defaultSurface;
+    property public final android.opengl.EGLConfig? eglConfig;
+    property public final android.opengl.EGLContext? eglContext;
+    property public final androidx.graphics.opengl.egl.EGLSpec eglSpec;
+    property public final androidx.graphics.opengl.egl.EGLVersion eglVersion;
+    field public static final androidx.graphics.opengl.egl.EGLManager.Companion Companion;
+  }
+
+  public static final class EGLManager.Companion {
+  }
+
+  public interface EGLSpec {
+    method public int eglClientWaitSyncKHR(androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+    method public android.opengl.EGLContext eglCreateContext(android.opengl.EGLConfig config);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.hardware.HardwareBuffer hardwareBuffer);
+    method public android.opengl.EGLSurface eglCreatePBufferSurface(android.opengl.EGLConfig config, androidx.graphics.opengl.egl.EGLConfigAttributes? configAttributes);
+    method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(int type, androidx.graphics.opengl.egl.EGLConfigAttributes? attributes);
+    method public android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLConfig config, android.view.Surface surface, androidx.graphics.opengl.egl.EGLConfigAttributes? configAttributes);
+    method public void eglDestroyContext(android.opengl.EGLContext eglContext);
+    method public boolean eglDestroyImageKHR(androidx.opengl.EGLImageKHR image);
+    method public boolean eglDestroySurface(android.opengl.EGLSurface surface);
+    method public boolean eglDestroySyncKHR(androidx.opengl.EGLSyncKHR sync);
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFence eglDupNativeFenceFDANDROID(androidx.opengl.EGLSyncKHR sync);
+    method public android.opengl.EGLSurface eglGetCurrentDrawSurface();
+    method public android.opengl.EGLSurface eglGetCurrentReadSurface();
+    method public int eglGetError();
+    method public boolean eglGetSyncAttribKHR(androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+    method public androidx.graphics.opengl.egl.EGLVersion eglInitialize();
+    method public boolean eglMakeCurrent(android.opengl.EGLContext context, android.opengl.EGLSurface drawSurface, android.opengl.EGLSurface readSurface);
+    method public String eglQueryString(int nameId);
+    method public boolean eglQuerySurface(android.opengl.EGLSurface surface, int attribute, int[] result, int offset);
+    method public boolean eglSwapBuffers(android.opengl.EGLSurface surface);
+    method public default String getErrorMessage();
+    method public default static String getStatusString(int error);
+    method public android.opengl.EGLConfig? loadConfig(androidx.graphics.opengl.egl.EGLConfigAttributes configAttributes);
+    field public static final androidx.graphics.opengl.egl.EGLSpec.Companion Companion;
+    field public static final androidx.graphics.opengl.egl.EGLSpec V14;
+  }
+
+  public static final class EGLSpec.Companion {
+    method public String getStatusString(int error);
+  }
+
+  public final class EGLVersion {
+    ctor public EGLVersion(int major, int minor);
+    method public int component1();
+    method public int component2();
+    method public androidx.graphics.opengl.egl.EGLVersion copy(int major, int minor);
+    method public int getMajor();
+    method public int getMinor();
+    property public final int major;
+    property public final int minor;
+    field public static final androidx.graphics.opengl.egl.EGLVersion.Companion Companion;
+    field public static final androidx.graphics.opengl.egl.EGLVersion Unknown;
+    field public static final androidx.graphics.opengl.egl.EGLVersion V14;
+    field public static final androidx.graphics.opengl.egl.EGLVersion V15;
+  }
+
+  public static final class EGLVersion.Companion {
+  }
+
+}
+
+package androidx.graphics.surface {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class SurfaceControlCompat {
+    method public boolean isValid();
+    method public void release();
+  }
+
+  public static final class SurfaceControlCompat.Builder {
+    ctor public SurfaceControlCompat.Builder();
+    method public androidx.graphics.surface.SurfaceControlCompat build();
+    method public androidx.graphics.surface.SurfaceControlCompat.Builder setName(String name);
+    method public androidx.graphics.surface.SurfaceControlCompat.Builder setParent(android.view.SurfaceView surfaceView);
+  }
+
+  public static final class SurfaceControlCompat.Transaction implements java.lang.AutoCloseable {
+    ctor public SurfaceControlCompat.Transaction();
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
+    method public void close();
+    method public void commit();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.SurfaceView surfaceView);
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.AttachedSurfaceControl attachedSurfaceControl);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setAlpha(androidx.graphics.surface.SurfaceControlCompat surfaceControl, float alpha);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer, optional androidx.graphics.lowlatency.SyncFenceCompat? fence, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer, optional androidx.graphics.lowlatency.SyncFenceCompat? fence);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setDamageRegion(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Region? region);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setLayer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, int z);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setOpaque(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean isOpaque);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setVisibility(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean visible);
+  }
+
+  public static interface SurfaceControlCompat.TransactionCommittedListener {
+    method public void onTransactionCommitted();
+  }
+
+}
+
+package androidx.hardware {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public final class SyncFence implements java.lang.AutoCloseable {
+    ctor public SyncFence(int fd);
+    method public boolean await(long timeoutNanos);
+    method public boolean awaitForever();
+    method public void close();
+    method public long getSignalTime();
+    method public boolean isValid();
+    field public static final androidx.hardware.SyncFence.Companion Companion;
+    field public static final long SIGNAL_TIME_INVALID = -1L; // 0xffffffffffffffffL
+    field public static final long SIGNAL_TIME_PENDING = 9223372036854775807L; // 0x7fffffffffffffffL
+  }
+
+  public static final class SyncFence.Companion {
+  }
+
+}
+
+package androidx.opengl {
+
+  public final class EGLExt {
+    method public static int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+    method public static androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, androidx.graphics.opengl.egl.EGLConfigAttributes? attributes);
+    method public static boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+    method public static boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public static androidx.hardware.SyncFence eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+    method public static boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+    method public static void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+    method public static java.util.Set<java.lang.String> parseExtensions(String queryString);
+    field public static final androidx.opengl.EGLExt.Companion Companion;
+    field public static final String EGL_ANDROID_IMAGE_NATIVE_BUFFER = "EGL_ANDROID_image_native_buffer";
+    field public static final String EGL_ANDROID_NATIVE_FENCE_SYNC = "EGL_ANDROID_native_fence_sync";
+    field public static final int EGL_CONDITION_SATISFIED_KHR = 12534; // 0x30f6
+    field public static final String EGL_EXT_BUFFER_AGE = "EGL_EXT_buffer_age";
+    field public static final String EGL_EXT_GL_COLORSPACE_BT2020_PQ = "EGL_EXT_gl_colorspace_bt2020_pq";
+    field public static final String EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH = "EGL_EXT_gl_colorspace_display_p3_passthrough";
+    field public static final String EGL_EXT_GL_COLORSPACE_SCRGB = "EGL_EXT_gl_colorspace_scrgb";
+    field public static final String EGL_EXT_PIXEL_FORMAT_FLOAT = "EGL_EXT_pixel_format_float";
+    field public static final int EGL_FALSE = 0; // 0x0
+    field public static final long EGL_FOREVER_KHR = -1L; // 0xffffffffffffffffL
+    field public static final String EGL_IMG_CONTEXT_PRIORITY = "EGL_IMG_context_priority";
+    field public static final String EGL_KHR_FENCE_SYNC = "EGL_KHR_fence_sync";
+    field public static final String EGL_KHR_GL_COLORSPACE = "EGL_KHR_gl_colorspace";
+    field public static final String EGL_KHR_IMAGE = "EGL_KHR_image";
+    field public static final String EGL_KHR_IMAGE_BASE = "EGL_KHR_image_base";
+    field public static final String EGL_KHR_NO_CONFIG_CONTEXT = "EGL_KHR_no_config_context";
+    field public static final String EGL_KHR_PARTIAL_UPDATE = "EGL_KHR_partial_update";
+    field public static final String EGL_KHR_SURFACELESS_CONTEXT = "EGL_KHR_surfaceless_context";
+    field public static final String EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE = "EGL_KHR_swap_buffers_with_damage";
+    field public static final String EGL_KHR_WAIT_SYNC = "EGL_KHR_wait_sync";
+    field public static final int EGL_SIGNALED_KHR = 12530; // 0x30f2
+    field public static final int EGL_SYNC_CONDITION_KHR = 12536; // 0x30f8
+    field public static final int EGL_SYNC_FENCE_KHR = 12537; // 0x30f9
+    field public static final int EGL_SYNC_FLUSH_COMMANDS_BIT_KHR = 1; // 0x1
+    field public static final int EGL_SYNC_NATIVE_FENCE_ANDROID = 12612; // 0x3144
+    field public static final int EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR = 12528; // 0x30f0
+    field public static final int EGL_SYNC_STATUS_KHR = 12529; // 0x30f1
+    field public static final int EGL_SYNC_TYPE_KHR = 12535; // 0x30f7
+    field public static final int EGL_TIMEOUT_EXPIRED_KHR = 12533; // 0x30f5
+    field public static final int EGL_TRUE = 1; // 0x1
+    field public static final int EGL_UNSIGNALED_KHR = 12531; // 0x30f3
+  }
+
+  public static final class EGLExt.Companion {
+    method public int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+    method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, androidx.graphics.opengl.egl.EGLConfigAttributes? attributes);
+    method public boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+    method public boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFence eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+    method public boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+    method public void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+    method public java.util.Set<java.lang.String> parseExtensions(String queryString);
+  }
+
+  public interface EGLHandle {
+    method public long getNativeHandle();
+    property public abstract long nativeHandle;
+  }
+
+  public final class EGLImageKHR implements androidx.opengl.EGLHandle {
+    ctor public EGLImageKHR(long nativeHandle);
+    method public long getNativeHandle();
+    property public long nativeHandle;
+  }
+
+  public final class EGLSyncKHR implements androidx.opengl.EGLHandle {
+    ctor public EGLSyncKHR(long nativeHandle);
+    method public long getNativeHandle();
+    property public long nativeHandle;
+  }
+
+}
+
diff --git a/core/core-ktx/api/res-1.8.0-beta01.txt b/graphics/graphics-core/api/res-current.txt
similarity index 100%
copy from core/core-ktx/api/res-1.8.0-beta01.txt
copy to graphics/graphics-core/api/res-current.txt
diff --git a/graphics/graphics-core/api/restricted_current.txt b/graphics/graphics-core/api/restricted_current.txt
new file mode 100644
index 0000000..3345488
--- /dev/null
+++ b/graphics/graphics-core/api/restricted_current.txt
@@ -0,0 +1,346 @@
+// Signature format: 4.0
+package androidx.graphics.lowlatency {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class GLFrontBufferedRenderer<T> {
+    ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
+    ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback);
+    method public void clear();
+    method public void commit();
+    method public boolean isValid();
+    method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
+    method public void release(boolean cancelPending);
+    method public void renderFrontBufferedLayer(T? param);
+    field public static final androidx.graphics.lowlatency.GLFrontBufferedRenderer.Companion Companion;
+  }
+
+  public static interface GLFrontBufferedRenderer.Callback<T> {
+    method @WorkerThread public default void onDoubleBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+    method @WorkerThread public void onDrawDoubleBufferedLayer(androidx.graphics.opengl.egl.EGLManager eglManager, java.util.Collection<? extends T> params);
+    method @WorkerThread public void onDrawFrontBufferedLayer(androidx.graphics.opengl.egl.EGLManager eglManager, T? param);
+    method @WorkerThread public default void onFrontBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+  }
+
+  public static final class GLFrontBufferedRenderer.Companion {
+  }
+
+  @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public final class SyncFenceCompat implements java.lang.AutoCloseable {
+    method public boolean await(long timeoutNanos);
+    method public boolean awaitForever();
+    method public void close();
+    method public static androidx.graphics.lowlatency.SyncFenceCompat createNativeSyncFence(androidx.graphics.opengl.egl.EGLSpec egl);
+    field public static final androidx.graphics.lowlatency.SyncFenceCompat.Companion Companion;
+  }
+
+  public static final class SyncFenceCompat.Companion {
+    method public androidx.graphics.lowlatency.SyncFenceCompat createNativeSyncFence(androidx.graphics.opengl.egl.EGLSpec egl);
+  }
+
+  public final class SyncFenceCompatKt {
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) @kotlin.jvm.JvmSynthetic public static androidx.graphics.lowlatency.SyncFenceCompat! createNativeSyncFence(androidx.graphics.opengl.egl.EGLSpec);
+  }
+
+}
+
+package androidx.graphics.opengl {
+
+  public final class GLRenderer {
+    ctor public GLRenderer(optional kotlin.jvm.functions.Function0<? extends androidx.graphics.opengl.egl.EGLSpec> eglSpecFactory, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLManager,? extends android.opengl.EGLConfig> eglConfigFactory);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.Surface surface, int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.SurfaceView surfaceView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.TextureView textureView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public androidx.graphics.opengl.GLRenderer.RenderTarget createRenderTarget(int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+    method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+    method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending);
+    method public boolean isRunning();
+    method public void registerEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
+    method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+    method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target);
+    method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+    method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height);
+    method public void start(optional String name);
+    method public void start();
+    method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
+    method public void stop(boolean cancelPending);
+    method public void unregisterEGLContextCallback(androidx.graphics.opengl.GLRenderer.EGLContextCallback callback);
+    field public static final androidx.graphics.opengl.GLRenderer.Companion Companion;
+  }
+
+  public static final class GLRenderer.Companion {
+  }
+
+  public static interface GLRenderer.EGLContextCallback {
+    method @WorkerThread public void onEGLContextCreated(androidx.graphics.opengl.egl.EGLManager eglManager);
+    method @WorkerThread public void onEGLContextDestroyed(androidx.graphics.opengl.egl.EGLManager eglManager);
+  }
+
+  public static interface GLRenderer.RenderCallback {
+    method @WorkerThread public void onDrawFrame(androidx.graphics.opengl.egl.EGLManager eglManager);
+    method @WorkerThread public default android.opengl.EGLSurface? onSurfaceCreated(androidx.graphics.opengl.egl.EGLSpec spec, android.opengl.EGLConfig config, android.view.Surface surface, int width, int height);
+  }
+
+  public static final class GLRenderer.RenderTarget {
+    method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+    method public void detach(boolean cancelPending);
+    method public boolean isAttached();
+    method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+    method public void requestRender();
+    method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+    method public void resize(int width, int height);
+  }
+
+}
+
+package androidx.graphics.opengl.egl {
+
+  public final class EGLConfigAttributes {
+    method public int[] toArray();
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes.Companion Companion;
+    field public static final int EGL_COLOR_COMPONENT_TYPE_EXT = 13113; // 0x3339
+    field public static final int EGL_COLOR_COMPONENT_TYPE_FIXED_EXT = 13114; // 0x333a
+    field public static final int EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT = 13115; // 0x333b
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes RGBA_1010102;
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes RGBA_8888;
+    field public static final androidx.graphics.opengl.egl.EGLConfigAttributes RGBA_F16;
+  }
+
+  public static final class EGLConfigAttributes.Builder {
+    ctor @kotlin.PublishedApi internal EGLConfigAttributes.Builder();
+    method public androidx.graphics.opengl.egl.EGLConfigAttributes build();
+    method public void include(androidx.graphics.opengl.egl.EGLConfigAttributes attributes);
+    method public androidx.graphics.opengl.egl.EGLConfigAttributes.Builder setAttribute(int attribute, int value);
+    method @kotlin.jvm.JvmSynthetic public infix void to(int, int that);
+  }
+
+  public static final class EGLConfigAttributes.Companion {
+  }
+
+  public final class EGLConfigAttributesKt {
+    method @kotlin.jvm.JvmSynthetic public static inline androidx.graphics.opengl.egl.EGLConfigAttributes! EGLConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EGLConfigAttributes.Builder,? extends kotlin.Unit> block);
+  }
+
+  public final class EGLException extends java.lang.RuntimeException {
+    ctor public EGLException(int error, optional String msg);
+    method public int getError();
+    method public String getMsg();
+    property public final int error;
+    property public String message;
+    property public final String msg;
+  }
+
+  public final class EGLManager {
+    ctor public EGLManager(optional androidx.graphics.opengl.egl.EGLSpec eglSpec);
+    method public android.opengl.EGLContext createContext(android.opengl.EGLConfig config);
+    method public android.opengl.EGLSurface getCurrentDrawSurface();
+    method public android.opengl.EGLSurface getCurrentReadSurface();
+    method public android.opengl.EGLSurface getDefaultSurface();
+    method public android.opengl.EGLConfig? getEGLConfig();
+    method public android.opengl.EGLContext? getEGLContext();
+    method public androidx.graphics.opengl.egl.EGLSpec getEGLSpec();
+    method public androidx.graphics.opengl.egl.EGLVersion getEGLVersion();
+    method public void initialize();
+    method public boolean isExtensionSupported(String extensionName);
+    method public android.opengl.EGLConfig? loadConfig(androidx.graphics.opengl.egl.EGLConfigAttributes configAttributes);
+    method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
+    method public boolean makeCurrent(android.opengl.EGLSurface drawSurface);
+    method public void release();
+    method public void swapAndFlushBuffers();
+    property public final android.opengl.EGLSurface currentDrawSurface;
+    property public final android.opengl.EGLSurface currentReadSurface;
+    property public final android.opengl.EGLSurface defaultSurface;
+    property public final android.opengl.EGLConfig? eglConfig;
+    property public final android.opengl.EGLContext? eglContext;
+    property public final androidx.graphics.opengl.egl.EGLSpec eglSpec;
+    property public final androidx.graphics.opengl.egl.EGLVersion eglVersion;
+    field public static final androidx.graphics.opengl.egl.EGLManager.Companion Companion;
+  }
+
+  public static final class EGLManager.Companion {
+  }
+
+  public interface EGLSpec {
+    method public int eglClientWaitSyncKHR(androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+    method public android.opengl.EGLContext eglCreateContext(android.opengl.EGLConfig config);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.hardware.HardwareBuffer hardwareBuffer);
+    method public android.opengl.EGLSurface eglCreatePBufferSurface(android.opengl.EGLConfig config, androidx.graphics.opengl.egl.EGLConfigAttributes? configAttributes);
+    method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(int type, androidx.graphics.opengl.egl.EGLConfigAttributes? attributes);
+    method public android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLConfig config, android.view.Surface surface, androidx.graphics.opengl.egl.EGLConfigAttributes? configAttributes);
+    method public void eglDestroyContext(android.opengl.EGLContext eglContext);
+    method public boolean eglDestroyImageKHR(androidx.opengl.EGLImageKHR image);
+    method public boolean eglDestroySurface(android.opengl.EGLSurface surface);
+    method public boolean eglDestroySyncKHR(androidx.opengl.EGLSyncKHR sync);
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFence eglDupNativeFenceFDANDROID(androidx.opengl.EGLSyncKHR sync);
+    method public android.opengl.EGLSurface eglGetCurrentDrawSurface();
+    method public android.opengl.EGLSurface eglGetCurrentReadSurface();
+    method public int eglGetError();
+    method public boolean eglGetSyncAttribKHR(androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+    method public androidx.graphics.opengl.egl.EGLVersion eglInitialize();
+    method public boolean eglMakeCurrent(android.opengl.EGLContext context, android.opengl.EGLSurface drawSurface, android.opengl.EGLSurface readSurface);
+    method public String eglQueryString(int nameId);
+    method public boolean eglQuerySurface(android.opengl.EGLSurface surface, int attribute, int[] result, int offset);
+    method public boolean eglSwapBuffers(android.opengl.EGLSurface surface);
+    method public default String getErrorMessage();
+    method public default static String getStatusString(int error);
+    method public android.opengl.EGLConfig? loadConfig(androidx.graphics.opengl.egl.EGLConfigAttributes configAttributes);
+    field public static final androidx.graphics.opengl.egl.EGLSpec.Companion Companion;
+    field public static final androidx.graphics.opengl.egl.EGLSpec V14;
+  }
+
+  public static final class EGLSpec.Companion {
+    method public String getStatusString(int error);
+  }
+
+  public final class EGLVersion {
+    ctor public EGLVersion(int major, int minor);
+    method public int component1();
+    method public int component2();
+    method public androidx.graphics.opengl.egl.EGLVersion copy(int major, int minor);
+    method public int getMajor();
+    method public int getMinor();
+    property public final int major;
+    property public final int minor;
+    field public static final androidx.graphics.opengl.egl.EGLVersion.Companion Companion;
+    field public static final androidx.graphics.opengl.egl.EGLVersion Unknown;
+    field public static final androidx.graphics.opengl.egl.EGLVersion V14;
+    field public static final androidx.graphics.opengl.egl.EGLVersion V15;
+  }
+
+  public static final class EGLVersion.Companion {
+  }
+
+}
+
+package androidx.graphics.surface {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class SurfaceControlCompat {
+    method public boolean isValid();
+    method public void release();
+  }
+
+  public static final class SurfaceControlCompat.Builder {
+    ctor public SurfaceControlCompat.Builder();
+    method public androidx.graphics.surface.SurfaceControlCompat build();
+    method public androidx.graphics.surface.SurfaceControlCompat.Builder setName(String name);
+    method public androidx.graphics.surface.SurfaceControlCompat.Builder setParent(android.view.SurfaceView surfaceView);
+  }
+
+  public static final class SurfaceControlCompat.Transaction implements java.lang.AutoCloseable {
+    ctor public SurfaceControlCompat.Transaction();
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
+    method public void close();
+    method public void commit();
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.SurfaceView surfaceView);
+    method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.AttachedSurfaceControl attachedSurfaceControl);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setAlpha(androidx.graphics.surface.SurfaceControlCompat surfaceControl, float alpha);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer, optional androidx.graphics.lowlatency.SyncFenceCompat? fence, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer, optional androidx.graphics.lowlatency.SyncFenceCompat? fence);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setDamageRegion(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Region? region);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setLayer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, int z);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setOpaque(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean isOpaque);
+    method public androidx.graphics.surface.SurfaceControlCompat.Transaction setVisibility(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean visible);
+  }
+
+  public static interface SurfaceControlCompat.TransactionCommittedListener {
+    method public void onTransactionCommitted();
+  }
+
+}
+
+package androidx.hardware {
+
+  @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public final class SyncFence implements java.lang.AutoCloseable {
+    ctor public SyncFence(int fd);
+    method public boolean await(long timeoutNanos);
+    method public boolean awaitForever();
+    method public void close();
+    method public long getSignalTime();
+    method public boolean isValid();
+    field public static final androidx.hardware.SyncFence.Companion Companion;
+    field public static final long SIGNAL_TIME_INVALID = -1L; // 0xffffffffffffffffL
+    field public static final long SIGNAL_TIME_PENDING = 9223372036854775807L; // 0x7fffffffffffffffL
+  }
+
+  public static final class SyncFence.Companion {
+  }
+
+}
+
+package androidx.opengl {
+
+  public final class EGLExt {
+    method public static int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+    method public static androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, androidx.graphics.opengl.egl.EGLConfigAttributes? attributes);
+    method public static boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+    method public static boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public static androidx.hardware.SyncFence eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+    method public static boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+    method public static void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+    method public static java.util.Set<java.lang.String> parseExtensions(String queryString);
+    field public static final androidx.opengl.EGLExt.Companion Companion;
+    field public static final String EGL_ANDROID_IMAGE_NATIVE_BUFFER = "EGL_ANDROID_image_native_buffer";
+    field public static final String EGL_ANDROID_NATIVE_FENCE_SYNC = "EGL_ANDROID_native_fence_sync";
+    field public static final int EGL_CONDITION_SATISFIED_KHR = 12534; // 0x30f6
+    field public static final String EGL_EXT_BUFFER_AGE = "EGL_EXT_buffer_age";
+    field public static final String EGL_EXT_GL_COLORSPACE_BT2020_PQ = "EGL_EXT_gl_colorspace_bt2020_pq";
+    field public static final String EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH = "EGL_EXT_gl_colorspace_display_p3_passthrough";
+    field public static final String EGL_EXT_GL_COLORSPACE_SCRGB = "EGL_EXT_gl_colorspace_scrgb";
+    field public static final String EGL_EXT_PIXEL_FORMAT_FLOAT = "EGL_EXT_pixel_format_float";
+    field public static final int EGL_FALSE = 0; // 0x0
+    field public static final long EGL_FOREVER_KHR = -1L; // 0xffffffffffffffffL
+    field public static final String EGL_IMG_CONTEXT_PRIORITY = "EGL_IMG_context_priority";
+    field public static final String EGL_KHR_FENCE_SYNC = "EGL_KHR_fence_sync";
+    field public static final String EGL_KHR_GL_COLORSPACE = "EGL_KHR_gl_colorspace";
+    field public static final String EGL_KHR_IMAGE = "EGL_KHR_image";
+    field public static final String EGL_KHR_IMAGE_BASE = "EGL_KHR_image_base";
+    field public static final String EGL_KHR_NO_CONFIG_CONTEXT = "EGL_KHR_no_config_context";
+    field public static final String EGL_KHR_PARTIAL_UPDATE = "EGL_KHR_partial_update";
+    field public static final String EGL_KHR_SURFACELESS_CONTEXT = "EGL_KHR_surfaceless_context";
+    field public static final String EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE = "EGL_KHR_swap_buffers_with_damage";
+    field public static final String EGL_KHR_WAIT_SYNC = "EGL_KHR_wait_sync";
+    field public static final int EGL_SIGNALED_KHR = 12530; // 0x30f2
+    field public static final int EGL_SYNC_CONDITION_KHR = 12536; // 0x30f8
+    field public static final int EGL_SYNC_FENCE_KHR = 12537; // 0x30f9
+    field public static final int EGL_SYNC_FLUSH_COMMANDS_BIT_KHR = 1; // 0x1
+    field public static final int EGL_SYNC_NATIVE_FENCE_ANDROID = 12612; // 0x3144
+    field public static final int EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR = 12528; // 0x30f0
+    field public static final int EGL_SYNC_STATUS_KHR = 12529; // 0x30f1
+    field public static final int EGL_SYNC_TYPE_KHR = 12535; // 0x30f7
+    field public static final int EGL_TIMEOUT_EXPIRED_KHR = 12533; // 0x30f5
+    field public static final int EGL_TRUE = 1; // 0x1
+    field public static final int EGL_UNSIGNALED_KHR = 12531; // 0x30f3
+  }
+
+  public static final class EGLExt.Companion {
+    method public int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+    method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, androidx.graphics.opengl.egl.EGLConfigAttributes? attributes);
+    method public boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+    method public boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+    method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFence eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+    method public boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+    method public void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+    method public java.util.Set<java.lang.String> parseExtensions(String queryString);
+  }
+
+  public interface EGLHandle {
+    method public long getNativeHandle();
+    property public abstract long nativeHandle;
+  }
+
+  public final class EGLImageKHR implements androidx.opengl.EGLHandle {
+    ctor public EGLImageKHR(long nativeHandle);
+    method public long getNativeHandle();
+    property public long nativeHandle;
+  }
+
+  public final class EGLSyncKHR implements androidx.opengl.EGLHandle {
+    ctor public EGLSyncKHR(long nativeHandle);
+    method public long getNativeHandle();
+    property public long nativeHandle;
+  }
+
+}
+
diff --git a/graphics/graphics-core/build.gradle b/graphics/graphics-core/build.gradle
new file mode 100644
index 0000000..ecccb42
--- /dev/null
+++ b/graphics/graphics-core/build.gradle
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ */
+
+import androidx.build.LibraryType
+import androidx.build.Publish
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.library")
+    id("org.jetbrains.kotlin.android")
+}
+
+dependencies {
+    api(libs.kotlinStdlib)
+    implementation 'androidx.annotation:annotation:1.2.0'
+    androidTestImplementation(libs.testExtJunit)
+    androidTestImplementation(libs.testCore)
+    androidTestImplementation(libs.testRunner)
+    androidTestImplementation(libs.testRules)
+    androidTestImplementation("androidx.lifecycle:lifecycle-common:2.5.0-alpha01")
+    androidTestImplementation("androidx.test:core:1.4.0@aar")
+}
+
+android {
+    namespace 'androidx.graphics.core'
+
+    defaultConfig {
+        minSdkVersion 17
+        externalNativeBuild {
+            cmake {
+                cppFlags ''
+            }
+        }
+    }
+    ndkVersion "23.1.7779620"
+    externalNativeBuild {
+        cmake {
+            path file('src/main/cpp/CMakeLists.txt')
+            version '3.22.1'
+        }
+    }
+}
+
+androidx {
+    name = "Android Graphics Core"
+    type = LibraryType.PUBLISHED_LIBRARY
+    mavenGroup = LibraryGroups.GRAPHICS
+    inceptionYear = "2021"
+    description = "Leverage graphics facilities across multiple Android platform releases"
+}
diff --git a/graphics/graphics-core/src/androidTest/AndroidManifest.xml b/graphics/graphics-core/src/androidTest/AndroidManifest.xml
new file mode 100644
index 0000000..e37e3c6
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  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.
+  -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
+    <supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
+    <supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />
+    <application>
+        <activity android:name="androidx.graphics.opengl.egl.EGLTestActivity"
+            android:label="Graphics Core Test"
+            android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="androidx.graphics.surface.SurfaceControlWrapperTestActivity"
+            android:label="Graphics Core Test"
+            android:exported="true">
+        </activity>
+
+        <activity android:name="androidx.graphics.opengl.GLTestActivity"
+            android:label="Graphics Core Test"
+            android:exported="true">
+        </activity>
+
+        <activity android:name="androidx.graphics.lowlatency.FrontBufferedRendererTestActivity"
+            android:label="WetDryRendererTest"
+            android:exported="true"/>
+
+    </application>
+</manifest>
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/FrontBufferedRendererTestActivity.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/FrontBufferedRendererTestActivity.kt
new file mode 100644
index 0000000..addcfff
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/FrontBufferedRendererTestActivity.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import android.app.Activity
+import android.os.Bundle
+import android.view.SurfaceView
+import android.view.ViewGroup
+
+class FrontBufferedRendererTestActivity : Activity() {
+
+    private lateinit var mSurfaceView: SurfaceView
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        val surfaceView = SurfaceView(this).also { mSurfaceView = it }
+        setContentView(surfaceView, ViewGroup.LayoutParams(WIDTH, HEIGHT))
+    }
+
+    fun getSurfaceView(): SurfaceView = mSurfaceView
+
+    companion object {
+        const val WIDTH = 100
+        const val HEIGHT = 100
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt
new file mode 100644
index 0000000..27151164
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt
@@ -0,0 +1,264 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import android.graphics.Color
+import android.hardware.HardwareBuffer
+import android.opengl.GLES20
+import android.os.Build
+import android.util.Log
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EGLManager
+import androidx.graphics.surface.SurfaceControlCompat
+import androidx.graphics.opengl.egl.deviceSupportsNativeAndroidFence
+import androidx.graphics.surface.SurfaceControlUtils
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class GLFrontBufferedRendererTest {
+
+    companion object {
+        val TAG = "GLFrontBufferedRenderer"
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    @Test
+    fun testFrontBufferedLayerRender() {
+        if (!deviceSupportsNativeAndroidFence()) {
+            // If the Android device does not support the corresponding extensions to create
+            // a file descriptor from an EGLSync object then skip the test
+            Log.w(TAG, "Skipping testFrontBufferedLayerRender, no native android fence support")
+            return
+        }
+        val renderLatch = CountDownLatch(1)
+        val callbacks = object : GLFrontBufferedRenderer.Callback<Any> {
+            override fun onDrawFrontBufferedLayer(eglManager: EGLManager, param: Any) {
+                GLES20.glViewport(
+                    0,
+                    0,
+                    FrontBufferedRendererTestActivity.WIDTH,
+                    FrontBufferedRendererTestActivity.HEIGHT
+                )
+                GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+
+            override fun onDrawDoubleBufferedLayer(
+                eglManager: EGLManager,
+                params: Collection<Any>
+            ) {
+                GLES20.glViewport(
+                    0,
+                    0,
+                    FrontBufferedRendererTestActivity.WIDTH,
+                    FrontBufferedRendererTestActivity.HEIGHT
+                )
+                GLES20.glClearColor(0.0f, 0.0f, 1.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+
+            override fun onFrontBufferedLayerRenderComplete(
+                frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+                transaction: SurfaceControlCompat.Transaction
+            ) {
+                transaction.addTransactionCommittedListener(
+                    Executors.newSingleThreadExecutor(),
+                    object : SurfaceControlCompat.TransactionCommittedListener {
+                        override fun onTransactionCommitted() {
+                            renderLatch.countDown()
+                        }
+                    }
+                )
+            }
+        }
+        var renderer: GLFrontBufferedRenderer<Any>? = null
+        var surfaceView: SurfaceView? = null
+        try {
+            val scenario = ActivityScenario.launch(FrontBufferedRendererTestActivity::class.java)
+                .moveToState(Lifecycle.State.CREATED)
+                .onActivity {
+                    surfaceView = it.getSurfaceView()
+                    renderer = GLFrontBufferedRenderer(surfaceView!!, callbacks)
+                }
+
+            scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+                renderer?.renderFrontBufferedLayer(Any())
+            }
+            assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+
+            val coords = IntArray(2)
+            val width: Int
+            val height: Int
+            with(surfaceView!!) {
+                getLocationOnScreen(coords)
+                width = this.width
+                height = this.height
+            }
+
+            SurfaceControlUtils.validateOutput { bitmap ->
+                Color.RED ==
+                    bitmap.getPixel(coords[0] + width / 2, coords[1] + height / 2)
+            }
+        } finally {
+            renderer.blockingRelease()
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    @Test
+    fun testDoubleBufferedLayerRender() {
+        if (!deviceSupportsNativeAndroidFence()) {
+            // If the Android device does not support the corresponding extensions to create
+            // a file descriptor from an EGLSync object then skip the test
+            Log.w(TAG, "Skipping testDoubleBufferedLayerRender, no native android fence support")
+            return
+        }
+
+        val renderLatch = CountDownLatch(1)
+        val callbacks = object : GLFrontBufferedRenderer.Callback<Any> {
+            override fun onDrawFrontBufferedLayer(eglManager: EGLManager, param: Any) {
+                GLES20.glViewport(
+                    0,
+                    0,
+                    FrontBufferedRendererTestActivity.WIDTH,
+                    FrontBufferedRendererTestActivity.HEIGHT
+                )
+                GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+
+            override fun onDrawDoubleBufferedLayer(
+                eglManager: EGLManager,
+                params: Collection<Any>
+            ) {
+                GLES20.glViewport(
+                    0,
+                    0,
+                    FrontBufferedRendererTestActivity.WIDTH,
+                    FrontBufferedRendererTestActivity.HEIGHT
+                )
+                GLES20.glClearColor(0.0f, 0.0f, 1.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+
+            override fun onDoubleBufferedLayerRenderComplete(
+                frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+                transaction: SurfaceControlCompat.Transaction
+            ) {
+                transaction.addTransactionCommittedListener(
+                    Executors.newSingleThreadExecutor(),
+                    object : SurfaceControlCompat.TransactionCommittedListener {
+                        override fun onTransactionCommitted() {
+                            renderLatch.countDown()
+                        }
+                    })
+            }
+        }
+        var renderer: GLFrontBufferedRenderer<Any>? = null
+        var surfaceView: SurfaceView? = null
+        try {
+            val scenario = ActivityScenario.launch(FrontBufferedRendererTestActivity::class.java)
+                .moveToState(Lifecycle.State.CREATED)
+                .onActivity {
+                    surfaceView = it.getSurfaceView()
+                    renderer = GLFrontBufferedRenderer(surfaceView!!, callbacks)
+                }
+
+            scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+                renderer?.renderFrontBufferedLayer(Any())
+                renderer?.commit()
+            }
+            assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+
+            val coords = IntArray(2)
+            val width: Int
+            val height: Int
+            with(surfaceView!!) {
+                getLocationOnScreen(coords)
+                width = this.width
+                height = this.height
+            }
+
+            SurfaceControlUtils.validateOutput { bitmap ->
+                Color.BLUE ==
+                    bitmap.getPixel(coords[0] + width / 2, coords[1] + height / 2)
+            }
+        } finally {
+            renderer.blockingRelease()
+        }
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+    fun testUsageFlagContainsFrontBufferUsage() {
+        val usageFlags = GLFrontBufferedRenderer.obtainHardwareBufferUsageFlags()
+        if (UsageFlagsVerificationHelper.isSupported(HardwareBuffer.USAGE_FRONT_BUFFER)) {
+            assertNotEquals(0, usageFlags and HardwareBuffer.USAGE_FRONT_BUFFER)
+        } else {
+            assertEquals(0, usageFlags and HardwareBuffer.USAGE_FRONT_BUFFER)
+        }
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+    fun testUsageFlagContainsComposerOverlay() {
+        val usageFlags = GLFrontBufferedRenderer.obtainHardwareBufferUsageFlags()
+        if (UsageFlagsVerificationHelper.isSupported(HardwareBuffer.USAGE_COMPOSER_OVERLAY)) {
+            assertNotEquals(0,
+                usageFlags and HardwareBuffer.USAGE_COMPOSER_OVERLAY)
+        } else {
+            assertEquals(0, usageFlags and HardwareBuffer.USAGE_COMPOSER_OVERLAY)
+        }
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    fun testBaseFlags() {
+        assertNotEquals(0, GLFrontBufferedRenderer.BaseFlags and
+            HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE)
+        assertNotEquals(0, GLFrontBufferedRenderer.BaseFlags and
+            HardwareBuffer.USAGE_GPU_COLOR_OUTPUT)
+    }
+
+    @RequiresApi(Build.VERSION_CODES.Q)
+    private fun GLFrontBufferedRenderer<*>?.blockingRelease() {
+        if (this != null) {
+            val destroyLatch = CountDownLatch(1)
+            release(false) {
+                destroyLatch.countDown()
+            }
+            assertTrue(destroyLatch.await(3000, TimeUnit.MILLISECONDS))
+        } else {
+            fail("GLFrontBufferedRenderer is not initialized")
+        }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/RenderBufferPoolTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/RenderBufferPoolTest.kt
new file mode 100644
index 0000000..22333df
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/RenderBufferPoolTest.kt
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import android.hardware.HardwareBuffer
+import android.os.Build
+import androidx.graphics.opengl.egl.EGLManager
+import androidx.graphics.opengl.egl.EGLSpec
+import androidx.graphics.opengl.egl.supportsNativeAndroidFence
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.concurrent.thread
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+internal class RenderBufferPoolTest {
+
+    @Test
+    fun testHardwareBufferMatchesConfig() {
+        withEGLSpec { eglSpec ->
+            val width = 2
+            val height = 3
+            val format = HardwareBuffer.RGB_565
+            val usage = HardwareBuffer.USAGE_GPU_COLOR_OUTPUT
+            val pool = createPool(
+                width,
+                height,
+                format,
+                usage
+            )
+            try {
+                val buffer = pool.obtain(eglSpec).hardwareBuffer
+                assertEquals(width, buffer.width)
+                assertEquals(height, buffer.height)
+                assertEquals(format, buffer.format)
+                assertEquals(usage, buffer.usage)
+            } finally {
+                pool.close()
+            }
+        }
+    }
+
+    @Test
+    fun testCloseReleasesRenderBuffer() {
+        withEGLSpec { egl ->
+            val pool = createPool()
+            val renderBuffer = pool.obtain(egl)
+            pool.release(renderBuffer)
+            pool.close()
+            assertTrue(renderBuffer.isClosed)
+        }
+    }
+
+    @Test
+    fun testAllocationAtMaxPoolSizeBlocks() {
+        withEGLSpec { egl ->
+            val poolSize = 2
+            val latch = CountDownLatch(1)
+            thread {
+                val pool = createPool(maxPoolSize = poolSize)
+                // Attempting to allocate 1 additional buffer than
+                // maximum specified pool size should block
+                repeat(poolSize + 1) {
+                    pool.obtain(egl)
+                }
+                latch.countDown()
+            }
+            assertFalse(latch.await(3, TimeUnit.SECONDS))
+        }
+    }
+
+    @Test
+    fun testReleaseAtMaxPoolSizeUnblocks() {
+        withEGLSpec { egl ->
+            val poolSize = 2
+            val latch = CountDownLatch(1)
+            val pool = createPool(maxPoolSize = poolSize)
+            val b1 = pool.obtain(egl)
+            pool.obtain(egl)
+            var b3: RenderBuffer? = null
+            thread {
+                b3 = pool.obtain(egl)
+                latch.countDown()
+            }
+            pool.release(b1)
+            assertTrue(latch.await(3, TimeUnit.SECONDS))
+            assertTrue(b1 === b3)
+        }
+    }
+
+    fun createPool(
+        width: Int = 2,
+        height: Int = 3,
+        format: Int = HardwareBuffer.RGB_565,
+        usage: Long = HardwareBuffer.USAGE_GPU_COLOR_OUTPUT,
+        maxPoolSize: Int = 2
+    ): RenderBufferPool =
+        RenderBufferPool(
+            width,
+            height,
+            format,
+            usage,
+            maxPoolSize
+        )
+
+    private fun withEGLSpec(
+        block: (egl: EGLSpec) -> Unit = {}
+    ) {
+        with(EGLManager()) {
+            initialize()
+            if (supportsNativeAndroidFence()) {
+                block(eglSpec)
+            }
+            release()
+        }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
new file mode 100644
index 0000000..7831516
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
@@ -0,0 +1,937 @@
+/*
+ * Copyright 2022 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.graphics.opengl
+
+import android.graphics.Bitmap
+import android.graphics.Color
+import android.graphics.ColorSpace
+import android.graphics.PixelFormat
+import android.graphics.SurfaceTexture
+import android.hardware.HardwareBuffer
+import android.media.Image
+import android.media.ImageReader
+import android.opengl.EGL14
+import android.opengl.EGLSurface
+import android.opengl.GLES20
+import android.os.Build
+import android.os.Handler
+import android.os.HandlerThread
+import android.view.PixelCopy
+import android.view.Surface
+import android.view.SurfaceHolder
+import android.view.TextureView
+import androidx.annotation.RequiresApi
+import androidx.annotation.WorkerThread
+import androidx.graphics.lowlatency.HardwareBufferRenderer
+import androidx.graphics.lowlatency.RenderBuffer
+import androidx.graphics.lowlatency.SyncFenceCompat
+import androidx.graphics.opengl.egl.EGLManager
+import androidx.graphics.opengl.egl.EGLSpec
+import androidx.graphics.opengl.egl.deviceSupportsNativeAndroidFence
+import androidx.graphics.opengl.egl.supportsNativeAndroidFence
+import androidx.lifecycle.Lifecycle.State
+import androidx.test.core.app.ActivityScenario
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.atomic.AtomicBoolean
+import java.util.concurrent.atomic.AtomicInteger
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class GLRendererTest {
+
+    @Test
+    fun testStartAfterStop() {
+        with(GLRenderer()) {
+            start("thread1")
+            stop(true)
+            start("thread2")
+            stop(true)
+        }
+    }
+
+    @Test
+    fun testAttachBeforeStartThrows() {
+        try {
+            with(GLRenderer()) {
+                attach(
+                    Surface(SurfaceTexture(17)),
+                    10,
+                    10,
+                    object : GLRenderer.RenderCallback {
+                        override fun onDrawFrame(eglManager: EGLManager) {
+                            // NO-OP
+                        }
+                    })
+            }
+            fail("Start should be called first")
+        } catch (exception: IllegalStateException) {
+            // Success, attach before call to start should fail
+        }
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+    fun testRender() {
+        val latch = CountDownLatch(1)
+        val renderer = object : GLRenderer.RenderCallback {
+            override fun onDrawFrame(eglManager: EGLManager) {
+                GLES20.glClearColor(1.0f, 0.0f, 1.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+        }
+
+        val width = 5
+        val height = 8
+        val reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1)
+        val glRenderer = GLRenderer()
+        glRenderer.start()
+
+        val target = glRenderer.attach(reader.surface, width, height, renderer)
+        target.requestRender {
+            latch.countDown()
+        }
+
+        assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+        val plane = reader.acquireLatestImage().planes[0]
+        assertEquals(4, plane.pixelStride)
+
+        val targetColor = Color.argb(255, 255, 0, 255)
+        Api19Helpers.verifyPlaneContent(width, height, plane, targetColor)
+
+        target.detach(true)
+
+        glRenderer.stop(true)
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+    fun testDetachExecutesPendingRequests() {
+        val latch = CountDownLatch(1)
+        val renderer = object : GLRenderer.RenderCallback {
+            override fun onDrawFrame(eglManager: EGLManager) {
+                GLES20.glClearColor(1.0f, 0.0f, 1.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+        }
+
+        val width = 5
+        val height = 8
+        val reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1)
+        val glRenderer = GLRenderer()
+        glRenderer.start()
+
+        val target = glRenderer.attach(reader.surface, width, height, renderer)
+        target.requestRender {
+            latch.countDown()
+        }
+        target.detach(false) // RequestRender Call should still execute
+
+        assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+        val plane = reader.acquireLatestImage().planes[0]
+        assertEquals(4, plane.pixelStride)
+
+        val targetColor = Color.argb(255, 255, 0, 255)
+        Api19Helpers.verifyPlaneContent(width, height, plane, targetColor)
+
+        glRenderer.stop(true)
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+    fun testStopExecutesPendingRequests() {
+        val latch = CountDownLatch(1)
+        val surfaceWidth = 5
+        val surfaceHeight = 8
+        val renderer = object : GLRenderer.RenderCallback {
+            override fun onDrawFrame(eglManager: EGLManager) {
+                val size = eglManager.eglSpec.querySurfaceSize(eglManager.currentDrawSurface)
+                assertEquals(surfaceWidth, size.width)
+                assertEquals(surfaceHeight, size.height)
+                GLES20.glClearColor(1.0f, 0.0f, 1.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+        }
+
+        val reader = ImageReader.newInstance(surfaceWidth, surfaceHeight, PixelFormat.RGBA_8888, 1)
+        val glRenderer = GLRenderer()
+        glRenderer.start()
+
+        val target = glRenderer.attach(reader.surface, surfaceWidth, surfaceHeight, renderer)
+        target.requestRender {
+            latch.countDown()
+        }
+        glRenderer.stop(false) // RequestRender call should still execute
+
+        assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+        val plane = reader.acquireLatestImage().planes[0]
+        assertEquals(4, plane.pixelStride)
+
+        val targetColor = Color.argb(255, 255, 0, 255)
+        Api19Helpers.verifyPlaneContent(surfaceWidth, surfaceHeight, plane, targetColor)
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+    fun testDetachExecutesMultiplePendingRequests() {
+        val numRenders = 4
+        val latch = CountDownLatch(numRenders)
+        val renderCount = AtomicInteger(0)
+        val renderer = object : GLRenderer.RenderCallback {
+            override fun onDrawFrame(eglManager: EGLManager) {
+                var red: Float = 0f
+                var green: Float = 0f
+                var blue: Float = 0f
+                when (renderCount.get()) {
+                    1 -> {
+                        red = 1f
+                    }
+                    2 -> {
+                        green = 1f
+                    }
+                    3 -> {
+                        blue = 1f
+                    }
+                }
+                GLES20.glClearColor(red, green, blue, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+        }
+
+        val width = 5
+        val height = 8
+        val reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1)
+        val glRenderer = GLRenderer()
+        glRenderer.start()
+
+        val target = glRenderer.attach(reader.surface, width, height, renderer)
+        // Issuing multiple requestRender calls to ensure each of them are
+        // executed even when a detach call is made
+        repeat(numRenders) {
+            target.requestRender {
+                renderCount.incrementAndGet()
+                latch.countDown()
+            }
+        }
+
+        target.detach(false) // RequestRender calls should still execute
+
+        assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+        assertEquals(numRenders, renderCount.get())
+        val plane = reader.acquireLatestImage().planes[0]
+        assertEquals(4, plane.pixelStride)
+
+        val targetColor = Color.argb(255, 0, 0, 255)
+        Api19Helpers.verifyPlaneContent(width, height, plane, targetColor)
+
+        glRenderer.stop(true)
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+    fun testDetachCancelsPendingRequests() {
+        val latch = CountDownLatch(1)
+        val renderer = object : GLRenderer.RenderCallback {
+            override fun onDrawFrame(eglManager: EGLManager) {
+                GLES20.glClearColor(1.0f, 0.0f, 1.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+        }
+
+        val width = 5
+        val height = 8
+        val reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1)
+        val glRenderer = GLRenderer()
+        glRenderer.start()
+
+        val target = glRenderer.attach(reader.surface, width, height, renderer)
+        target.requestRender {
+            latch.countDown()
+        }
+        target.detach(false) // RequestRender Call should be cancelled
+
+        glRenderer.stop(true)
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+    fun testMultipleAttachedSurfaces() {
+        val latch = CountDownLatch(2)
+        val renderer1 = object : GLRenderer.RenderCallback {
+
+            override fun onDrawFrame(eglManager: EGLManager) {
+                GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+        }
+
+        val renderer2 = object : GLRenderer.RenderCallback {
+            override fun onDrawFrame(eglManager: EGLManager) {
+                GLES20.glClearColor(0.0f, 0.0f, 1.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            }
+        }
+
+        val width1 = 6
+        val height1 = 7
+
+        val width2 = 11
+        val height2 = 23
+        val reader1 = ImageReader.newInstance(width1, height1, PixelFormat.RGBA_8888, 1)
+
+        val reader2 = ImageReader.newInstance(width2, height2, PixelFormat.RGBA_8888, 1)
+
+        val glRenderer = GLRenderer()
+        glRenderer.start()
+
+        val target1 = glRenderer.attach(reader1.surface, width1, height1, renderer1)
+        val target2 = glRenderer.attach(reader2.surface, width2, height2, renderer2)
+        target1.requestRender {
+            latch.countDown()
+        }
+        target2.requestRender {
+            latch.countDown()
+        }
+
+        assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+        val plane1 = reader1.acquireLatestImage().planes[0]
+        val plane2 = reader2.acquireLatestImage().planes[0]
+
+        Api19Helpers.verifyPlaneContent(width1, height1, plane1, Color.argb(255, 255, 0, 0))
+        Api19Helpers.verifyPlaneContent(width2, height2, plane2, Color.argb(255, 0, 0, 255))
+
+        target1.detach(true)
+        target2.detach(true)
+
+        val attachLatch = CountDownLatch(1)
+        glRenderer.stop(true) {
+            attachLatch.countDown()
+        }
+
+        assertTrue(attachLatch.await(3000, TimeUnit.MILLISECONDS))
+    }
+
+    /**
+     * Helper class for test methods that refer to APIs that may not exist on earlier API levels.
+     * This must be broken out into a separate class instead of being defined within the
+     * test class as the test runner will inspect all methods + parameter types in advance.
+     * If a parameter type does not exist on a particular API level, it will crash even if
+     * there are corresponding @SdkSuppress and @RequiresApi
+     * See https://b.corp.google.com/issues/221485597
+     */
+    class Api19Helpers private constructor() {
+        companion object {
+            @RequiresApi(Build.VERSION_CODES.KITKAT)
+            fun verifyPlaneContent(width: Int, height: Int, plane: Image.Plane, targetColor: Int) {
+                val rowPadding = plane.rowStride - plane.pixelStride * width
+                var offset = 0
+                for (y in 0 until height) {
+                    for (x in 0 until width) {
+                        val red = plane.buffer[offset].toInt() and 0xff
+                        val green = plane.buffer[offset + 1].toInt() and 0xff
+                        val blue = plane.buffer[offset + 2].toInt() and 0xff
+                        val alpha = plane.buffer[offset + 3].toInt() and 0xff
+                        val packedColor = Color.argb(alpha, red, green, blue)
+                        assertEquals("Index: $x, $y", targetColor, packedColor)
+                        offset += plane.pixelStride
+                    }
+                    offset += rowPadding
+                }
+            }
+        }
+    }
+
+    @Test
+    fun testNonStartedGLRendererIsNotRunning() {
+        assertFalse(GLRenderer().isRunning())
+    }
+
+    @Test
+    fun testRepeatedStartAndStopRunningState() {
+        val glRenderer = GLRenderer()
+        assertFalse(glRenderer.isRunning())
+        glRenderer.start()
+        assertTrue(glRenderer.isRunning())
+        glRenderer.stop(true)
+        assertFalse(glRenderer.isRunning())
+        glRenderer.start()
+        assertTrue(glRenderer.isRunning())
+        glRenderer.stop(true)
+        assertFalse(glRenderer.isRunning())
+    }
+
+    @Test
+    fun testMultipleSurfaceHolderDestroyCallbacks() {
+        val destroyLatch = CountDownLatch(1)
+        val renderer = GLRenderer().apply { start() }
+        val scenario = withGLTestActivity {
+            assertNotNull(surfaceView)
+
+            var renderTarget: GLRenderer.RenderTarget? = null
+            val callbacks = object : SurfaceHolder.Callback {
+                override fun surfaceCreated(p0: SurfaceHolder) {
+                    // no-op
+                }
+
+                override fun surfaceChanged(p0: SurfaceHolder, p1: Int, p2: Int, p3: Int) {
+                    // no-op
+                }
+
+                override fun surfaceDestroyed(p0: SurfaceHolder) {
+                    renderTarget?.detach(true)
+                    destroyLatch.countDown()
+                }
+            }
+            surfaceView.holder.addCallback(callbacks)
+            renderTarget = renderer.attach(surfaceView, ColorRenderCallback(Color.RED))
+        }
+
+        val tearDownLatch = CountDownLatch(1)
+        scenario.moveToState(State.DESTROYED)
+        assertTrue(destroyLatch.await(3000, TimeUnit.MILLISECONDS))
+        renderer.stop(true) {
+            tearDownLatch.countDown()
+        }
+        assertTrue(tearDownLatch.await(3000, TimeUnit.MILLISECONDS))
+    }
+
+    @Test
+    fun testMultipleTextureViewDestroyCallbacks() {
+        val destroyLatch = CountDownLatch(1)
+        val renderer = GLRenderer().apply { start() }
+        val scenario = withGLTestActivity {
+            assertNotNull(textureView)
+
+            val renderTarget = renderer.attach(textureView, ColorRenderCallback(Color.RED))
+            val listener = textureView.surfaceTextureListener
+            textureView.surfaceTextureListener = object : TextureView.SurfaceTextureListener {
+                override fun onSurfaceTextureAvailable(p0: SurfaceTexture, p1: Int, p2: Int) {
+                    listener?.onSurfaceTextureAvailable(p0, p1, p2)
+                }
+
+                override fun onSurfaceTextureSizeChanged(p0: SurfaceTexture, p1: Int, p2: Int) {
+                    listener?.onSurfaceTextureSizeChanged(p0, p1, p2)
+                }
+
+                override fun onSurfaceTextureDestroyed(p0: SurfaceTexture): Boolean {
+                    renderTarget.detach(true)
+                    listener?.onSurfaceTextureDestroyed(p0)
+                    destroyLatch.countDown()
+                    return true
+                }
+
+                override fun onSurfaceTextureUpdated(p0: SurfaceTexture) {
+                    listener?.onSurfaceTextureUpdated(p0)
+                }
+            }
+        }
+
+        val tearDownLatch = CountDownLatch(1)
+        scenario.moveToState(State.DESTROYED)
+        assertTrue(destroyLatch.await(3000, TimeUnit.MILLISECONDS))
+        renderer.stop(true) {
+            tearDownLatch.countDown()
+        }
+        assertTrue(tearDownLatch.await(3000, TimeUnit.MILLISECONDS))
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
+    fun testSurfaceViewAttach() {
+        withGLTestActivity {
+            assertNotNull(surfaceView)
+
+            val latch = CountDownLatch(1)
+            val glRenderer = GLRenderer().apply { start() }
+            val target = glRenderer.attach(surfaceView, ColorRenderCallback(Color.BLUE))
+
+            target.requestRender {
+                latch.countDown()
+            }
+
+            assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+
+            val bitmap = Bitmap.createBitmap(
+                GLTestActivity.TARGET_WIDTH,
+                GLTestActivity.TARGET_HEIGHT,
+                Bitmap.Config.ARGB_8888
+            )
+
+            blockingPixelCopy(bitmap) { surfaceView.holder.surface }
+
+            assertTrue(bitmap.isAllColor(Color.BLUE))
+
+            val stopLatch = CountDownLatch(1)
+            glRenderer.stop(true) {
+                stopLatch.countDown()
+            }
+
+            assertTrue(stopLatch.await(3000, TimeUnit.MILLISECONDS))
+            // Assert that targets are detached when the GLRenderer is stopped
+            assertFalse(target.isAttached())
+        }
+    }
+
+    @Test
+    fun testTextureViewOnResizeCalled() {
+        withGLTestActivity {
+            assertNotNull(textureView)
+            val glRenderer = GLRenderer().apply { start() }
+
+            val resizeLatch = CountDownLatch(1)
+            val target = glRenderer.attach(textureView, object : GLRenderer.RenderCallback {
+                override fun onDrawFrame(eglManager: EGLManager) {
+                    val size = eglManager.eglSpec.querySurfaceSize(eglManager.currentDrawSurface)
+                    assertTrue(size.width > 0)
+                    assertTrue(size.height > 0)
+                    resizeLatch.countDown()
+                }
+            })
+            target.requestRender()
+
+            assertTrue(resizeLatch.await(3000, TimeUnit.MILLISECONDS))
+
+            val detachLatch = CountDownLatch(1)
+            target.detach(false) {
+                detachLatch.countDown()
+            }
+            assertTrue(detachLatch.await(3000, TimeUnit.MILLISECONDS))
+            glRenderer.stop(true)
+        }
+    }
+
+    @Test
+    fun testSurfaceViewOnResizeCalled() {
+        withGLTestActivity {
+            assertNotNull(surfaceView)
+            val glRenderer = GLRenderer().apply { start() }
+
+            val resizeLatch = CountDownLatch(1)
+            val target = glRenderer.attach(surfaceView, object : GLRenderer.RenderCallback {
+                override fun onDrawFrame(eglManager: EGLManager) {
+                    val size = eglManager.eglSpec.querySurfaceSize(eglManager.currentDrawSurface)
+                    assertTrue(size.width > 0)
+                    assertTrue(size.height > 0)
+                    resizeLatch.countDown()
+                }
+            })
+            target.requestRender()
+
+            assertTrue(resizeLatch.await(3000, TimeUnit.MILLISECONDS))
+
+            val detachLatch = CountDownLatch(1)
+            target.detach(false) {
+                detachLatch.countDown()
+            }
+            assertTrue(detachLatch.await(3000, TimeUnit.MILLISECONDS))
+            glRenderer.stop(true)
+        }
+    }
+
+    data class Size(val width: Int, val height: Int)
+
+    fun EGLSpec.querySurfaceSize(eglSurface: EGLSurface): Size {
+        val result = IntArray(1)
+        eglQuerySurface(
+            eglSurface, EGL14.EGL_WIDTH, result, 0
+        )
+        val width = result[0]
+        eglQuerySurface(
+            eglSurface, EGL14.EGL_HEIGHT, result, 0
+        )
+        val height = result[0]
+        return Size(width, height)
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
+    fun testTextureViewAttach() {
+        withGLTestActivity {
+            assertNotNull(textureView)
+
+            val latch = CountDownLatch(1)
+            val glRenderer = GLRenderer().apply { start() }
+            val target = glRenderer.attach(textureView, ColorRenderCallback(Color.BLUE))
+            target.requestRender {
+                latch.countDown()
+            }
+            assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+
+            val bitmap = Bitmap.createBitmap(
+                GLTestActivity.TARGET_WIDTH,
+                GLTestActivity.TARGET_HEIGHT,
+                Bitmap.Config.ARGB_8888
+            )
+
+            blockingPixelCopy(bitmap) { Surface(textureView.surfaceTexture) }
+            assertTrue(bitmap.isAllColor(Color.BLUE))
+
+            val stopLatch = CountDownLatch(1)
+            glRenderer.stop(true) {
+                stopLatch.countDown()
+            }
+
+            assertTrue(stopLatch.await(3000, TimeUnit.MILLISECONDS))
+            // Assert that targets are detached when the GLRenderer is stopped
+            assertFalse(target.isAttached())
+        }
+    }
+
+    @Test
+    fun testEGLContextCallbackInvoked() {
+        val createdLatch = CountDownLatch(1)
+        val destroyedLatch = CountDownLatch(1)
+        val createCount = AtomicInteger()
+        val destroyCount = AtomicInteger()
+        val callback = object : GLRenderer.EGLContextCallback {
+
+            override fun onEGLContextCreated(eglManager: EGLManager) {
+                createCount.incrementAndGet()
+                createdLatch.countDown()
+            }
+
+            override fun onEGLContextDestroyed(eglManager: EGLManager) {
+                destroyCount.incrementAndGet()
+                destroyedLatch.countDown()
+            }
+        }
+
+        val glRenderer = GLRenderer().apply { start() }
+        glRenderer.registerEGLContextCallback(callback)
+
+        glRenderer.attach(
+            Surface(SurfaceTexture(12)),
+            10,
+            10,
+            ColorRenderCallback(Color.RED)
+        ).requestRender()
+
+        assertTrue(createdLatch.await(3000, TimeUnit.MILLISECONDS))
+        assertEquals(1, createCount.get())
+
+        glRenderer.stop(true)
+
+        assertTrue(destroyedLatch.await(3000, TimeUnit.MILLISECONDS))
+        assertEquals(1, destroyCount.get())
+    }
+
+    @Test
+    fun testEGLContextCallbackInvokedBeforeStart() {
+        val createdLatch = CountDownLatch(1)
+        val destroyedLatch = CountDownLatch(1)
+        val createCount = AtomicInteger()
+        val destroyCount = AtomicInteger()
+        val callback = object : GLRenderer.EGLContextCallback {
+
+            override fun onEGLContextCreated(eglManager: EGLManager) {
+                createCount.incrementAndGet()
+                createdLatch.countDown()
+            }
+
+            override fun onEGLContextDestroyed(eglManager: EGLManager) {
+                destroyCount.incrementAndGet()
+                destroyedLatch.countDown()
+            }
+        }
+
+        val glRenderer = GLRenderer()
+        // Adding a callback before the glRenderer is started should still
+        // deliver onEGLRendererCreated callbacks
+        glRenderer.registerEGLContextCallback(callback)
+        glRenderer.start()
+
+        glRenderer.attach(
+            Surface(SurfaceTexture(12)),
+            10,
+            10,
+            ColorRenderCallback(Color.CYAN)
+        ).requestRender()
+
+        assertTrue(createdLatch.await(3000, TimeUnit.MILLISECONDS))
+        assertEquals(1, createCount.get())
+
+        glRenderer.stop(true)
+
+        assertTrue(destroyedLatch.await(3000, TimeUnit.MILLISECONDS))
+        assertEquals(1, destroyCount.get())
+    }
+
+    @Test
+    fun testEGLContextCallbackRemove() {
+        val createdLatch = CountDownLatch(1)
+        val destroyedLatch = CountDownLatch(1)
+        val createCount = AtomicInteger()
+        val destroyCount = AtomicInteger()
+        val callback = object : GLRenderer.EGLContextCallback {
+
+            override fun onEGLContextCreated(eglManager: EGLManager) {
+                createCount.incrementAndGet()
+                createdLatch.countDown()
+            }
+
+            override fun onEGLContextDestroyed(eglManager: EGLManager) {
+                destroyCount.incrementAndGet()
+            }
+        }
+
+        val glRenderer = GLRenderer()
+        // Adding a callback before the glRenderer is started should still
+        // deliver onEGLRendererCreated callbacks
+        glRenderer.registerEGLContextCallback(callback)
+        glRenderer.start()
+
+        glRenderer.attach(
+            Surface(SurfaceTexture(12)),
+            10,
+            10,
+            ColorRenderCallback(Color.CYAN)
+        ).requestRender()
+
+        assertTrue(createdLatch.await(3000, TimeUnit.MILLISECONDS))
+        assertEquals(1, createCount.get())
+
+        glRenderer.unregisterEGLContextCallback(callback)
+
+        glRenderer.stop(false) {
+            destroyedLatch.countDown()
+        }
+
+        assertTrue(destroyedLatch.await(3000, TimeUnit.MILLISECONDS))
+        assertEquals(0, destroyCount.get())
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    fun testRenderBufferTarget() {
+        val width = 10
+        val height = 10
+        val renderLatch = CountDownLatch(1)
+        val teardownLatch = CountDownLatch(1)
+        val glRenderer = GLRenderer().apply { start() }
+        var renderBuffer: RenderBuffer? = null
+
+        val supportsNativeFence = AtomicBoolean(false)
+        glRenderer.createRenderTarget(width, height, object : GLRenderer.RenderCallback {
+
+            @WorkerThread
+            override fun onDrawFrame(eglManager: EGLManager) {
+                if (eglManager.supportsNativeAndroidFence()) {
+                    supportsNativeFence.set(true)
+                    var syncFenceCompat: SyncFenceCompat? = null
+                    try {
+                        val egl = eglManager.eglSpec
+                        val buffer = RenderBuffer(
+                            egl,
+                            HardwareBuffer.create(
+                                width,
+                                height,
+                                HardwareBuffer.RGBA_8888,
+                                1,
+                                HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE
+                            )
+                        ).also { renderBuffer = it }
+                        buffer.makeCurrent()
+                        GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+                        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+                        GLES20.glFlush()
+                        syncFenceCompat = SyncFenceCompat.createNativeSyncFence(egl)
+                        syncFenceCompat.await(TimeUnit.SECONDS.toNanos(3))
+                    } finally {
+                        syncFenceCompat?.close()
+                    }
+                }
+                renderLatch.countDown()
+            }
+        }).requestRender()
+
+        var hardwareBuffer: HardwareBuffer? = null
+        try {
+            assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+            if (supportsNativeFence.get()) {
+                hardwareBuffer = renderBuffer?.hardwareBuffer
+                if (hardwareBuffer != null) {
+                    val colorSpace = ColorSpace.get(ColorSpace.Named.LINEAR_SRGB)
+                    // Copy to non hardware bitmap to be able to sample pixels
+                    val bitmap = Bitmap.wrapHardwareBuffer(hardwareBuffer, colorSpace)
+                        ?.copy(Bitmap.Config.ARGB_8888, false)
+                    if (bitmap != null) {
+                        assertTrue(bitmap.isAllColor(Color.RED))
+                    } else {
+                        fail("Unable to obtain Bitmap from hardware buffer")
+                    }
+                } else {
+                    fail("Unable to obtain hardwarebuffer from RenderBuffer")
+                }
+            }
+        } finally {
+            hardwareBuffer?.close()
+            glRenderer.stop(true) {
+                teardownLatch.countDown()
+            }
+            assertTrue(teardownLatch.await(3000, TimeUnit.MILLISECONDS))
+        }
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    fun testFrontBufferedRenderer() {
+        if (!deviceSupportsNativeAndroidFence()) {
+            // If the Android device does not support the corresponding
+            // EGL Extensions to obtain native Android fence objects from EGLSync
+            // instances then skip this test as we cannot guarantee consistency
+            // for front buffered rendering
+            return
+        }
+        val width = 10
+        val height = 10
+        val renderLatch = CountDownLatch(1)
+        val teardownLatch = CountDownLatch(1)
+        val glRenderer = GLRenderer().apply { start() }
+        var renderBuffer: RenderBuffer? = null
+
+        val callbacks = object : HardwareBufferRenderer.RenderCallbacks {
+            override fun obtainRenderBuffer(egl: EGLSpec): RenderBuffer =
+                RenderBuffer(
+                    egl,
+                    HardwareBuffer.create(
+                        width,
+                        height,
+                        HardwareBuffer.RGBA_8888,
+                        1,
+                        HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE
+                    )
+                ).also { renderBuffer = it }
+
+            override fun onDraw(eglManager: EGLManager) {
+                GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+                GLES20.glFlush()
+            }
+
+            override fun onDrawComplete(renderBuffer: RenderBuffer) {
+                renderLatch.countDown()
+            }
+        }
+
+        glRenderer.createRenderTarget(
+            width,
+            height,
+            HardwareBufferRenderer(callbacks)
+        ).requestRender()
+
+        var hardwareBuffer: HardwareBuffer? = null
+        try {
+            assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+            hardwareBuffer = renderBuffer?.hardwareBuffer
+            if (hardwareBuffer != null) {
+                val colorSpace = ColorSpace.get(ColorSpace.Named.LINEAR_SRGB)
+                // Copy to non hardware bitmap to be able to sample pixels
+                val bitmap = Bitmap.wrapHardwareBuffer(hardwareBuffer, colorSpace)
+                    ?.copy(Bitmap.Config.ARGB_8888, false)
+                if (bitmap != null) {
+                    assertTrue(bitmap.isAllColor(Color.RED))
+                } else {
+                    fail("Unable to obtain Bitmap from hardware buffer")
+                }
+            } else {
+                fail("Unable to obtain hardwarebuffer from RenderBuffer")
+            }
+        } finally {
+            hardwareBuffer?.close()
+            glRenderer.stop(true) {
+                teardownLatch.countDown()
+            }
+            assertTrue(teardownLatch.await(3000, TimeUnit.MILLISECONDS))
+        }
+    }
+
+    /**
+     * Helper method to create a GLTestActivity instance and progress it through the Activity
+     * lifecycle to the resumed state so we can issue rendering commands into the corresponding
+     * SurfaceView/TextureView
+     */
+    private fun withGLTestActivity(
+        block: GLTestActivity.() -> Unit
+    ): ActivityScenario<GLTestActivity> =
+        ActivityScenario.launch(GLTestActivity::class.java).moveToState(State.RESUMED).onActivity {
+            block(it!!)
+        }
+
+    /**
+     * Helper RenderCallback that renders a solid color and invokes the provided CountdownLatch
+     * when rendering is complete
+     */
+    private class ColorRenderCallback(
+        val targetColor: Int
+    ) : GLRenderer.RenderCallback {
+
+        override fun onDrawFrame(eglManager: EGLManager) {
+            GLES20.glClearColor(
+                Color.red(targetColor) / 255f,
+                Color.green(targetColor) / 255f,
+                Color.blue(targetColor) / 255f,
+                Color.alpha(targetColor) / 255f,
+            )
+            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+        }
+    }
+
+    /**
+     * Helper method that synchronously blocks until the PixelCopy operation is complete
+     */
+    @RequiresApi(Build.VERSION_CODES.N)
+    private fun blockingPixelCopy(
+        destBitmap: Bitmap,
+        surfaceProvider: () -> Surface
+    ) {
+        val copyLatch = CountDownLatch(1)
+        val copyThread = HandlerThread("copyThread").apply { start() }
+        val copyHandler = Handler(copyThread.looper)
+        PixelCopy.request(
+            surfaceProvider.invoke(),
+            destBitmap,
+            { copyResult ->
+                assertEquals(PixelCopy.SUCCESS, copyResult)
+                copyLatch.countDown()
+                copyThread.quit()
+            },
+            copyHandler
+        )
+        assertTrue(copyLatch.await(3000, TimeUnit.MILLISECONDS))
+    }
+
+    private fun Bitmap.isAllColor(targetColor: Int): Boolean {
+        for (i in 0 until width) {
+            for (j in 0 until height) {
+                if (getPixel(i, j) != targetColor) {
+                    return false
+                }
+            }
+        }
+        return true
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLTestActivity.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLTestActivity.kt
new file mode 100644
index 0000000..103c36b
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLTestActivity.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2022 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.graphics.opengl
+
+import android.app.Activity
+import android.os.Bundle
+import android.view.SurfaceView
+import android.view.TextureView
+import android.widget.LinearLayout
+
+class GLTestActivity : Activity() {
+
+    companion object {
+        const val TARGET_WIDTH = 30
+        const val TARGET_HEIGHT = 20
+    }
+
+    lateinit var surfaceView: SurfaceView
+    lateinit var textureView: TextureView
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        surfaceView = SurfaceView(this)
+        textureView = TextureView(this)
+        val ll = LinearLayout(this).apply {
+            orientation = LinearLayout.VERTICAL
+            weightSum = 2f
+        }
+        val layoutParams = LinearLayout.LayoutParams(TARGET_WIDTH, TARGET_HEIGHT)
+
+        ll.addView(surfaceView, layoutParams)
+        ll.addView(textureView, layoutParams)
+
+        setContentView(ll)
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/SyncFenceCompatTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/SyncFenceCompatTest.kt
new file mode 100644
index 0000000..cac758d
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/SyncFenceCompatTest.kt
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2022 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.graphics.opengl
+
+import android.opengl.EGL14
+import android.opengl.GLES20
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.graphics.lowlatency.SyncFenceCompat
+import androidx.graphics.opengl.egl.EGLConfigAttributes
+import androidx.graphics.opengl.egl.EGLManager
+import androidx.graphics.opengl.egl.EGLSpec
+import androidx.graphics.opengl.egl.EGLVersion
+import androidx.graphics.opengl.egl.supportsNativeAndroidFence
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+@RequiresApi(Build.VERSION_CODES.KITKAT)
+class SyncFenceCompatTest {
+    @Test
+    fun testRenderFenceCreate() {
+        testEglManager {
+            initializeWithDefaultConfig()
+            if (supportsNativeAndroidFence()) {
+                val syncFenceCompat = SyncFenceCompat.createNativeSyncFence(this.eglSpec)
+                syncFenceCompat.close()
+            }
+        }
+    }
+
+    @Test
+    fun testRenderFenceAwait() {
+        testEglManager {
+            initializeWithDefaultConfig()
+            if (supportsNativeAndroidFence()) {
+
+                val syncFenceCompat = SyncFenceCompat.createNativeSyncFence(this.eglSpec)
+                GLES20.glFlush()
+                assertTrue(syncFenceCompat.await(1000))
+
+                syncFenceCompat.close()
+            }
+        }
+    }
+
+    @Test
+    fun testRenderFenceAwaitForever() {
+        testEglManager {
+            initializeWithDefaultConfig()
+            if (supportsNativeAndroidFence()) {
+
+                val syncFenceCompat = SyncFenceCompat.createNativeSyncFence(this.eglSpec)
+                GLES20.glFlush()
+                assertTrue(syncFenceCompat.awaitForever())
+
+                syncFenceCompat.close()
+            }
+        }
+    }
+
+    // Helper method used in testing to initialize EGL and default
+    // EGLConfig to the ARGB8888 configuration
+    private fun EGLManager.initializeWithDefaultConfig() {
+        initialize()
+        val config = loadConfig(EGLConfigAttributes.RGBA_8888)
+        if (config == null) {
+            fail("Config 8888 should be supported")
+        }
+        createContext(config!!)
+    }
+
+    /**
+     * Helper method to ensure EglManager has the corresponding release calls
+     * made to it and verifies that no exceptions were thrown as part of the test.
+     */
+    private fun testEglManager(
+        eglSpec: EGLSpec = EGLSpec.V14,
+        block: EGLManager.() -> Unit = {}
+    ) {
+        with(EGLManager(eglSpec)) {
+            assertEquals(EGLVersion.Unknown, eglVersion)
+            assertEquals(EGL14.EGL_NO_CONTEXT, eglContext)
+            block()
+            release()
+            assertEquals(EGLVersion.Unknown, eglVersion)
+            assertEquals(EGL14.EGL_NO_CONTEXT, eglContext)
+        }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLConfigAttributesJavaTest.java b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLConfigAttributesJavaTest.java
new file mode 100644
index 0000000..4cf020f
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLConfigAttributesJavaTest.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2022 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.graphics.opengl.egl;
+
+import static org.junit.Assert.assertEquals;
+
+import android.opengl.EGL14;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class EGLConfigAttributesJavaTest {
+
+    @Test
+    public void testEglConfigAttribute() {
+        EGLConfigAttributes config = new EGLConfigAttributes.Builder()
+                .setAttribute(1, 2)
+                .setAttribute(3, 4)
+                .setAttribute(5, 6)
+                .build();
+        int[] attrs = config.toArray();
+        assertEquals(7, attrs.length);
+        assertEquals(Integer.valueOf(2), findValueForKey(attrs, 1));
+        assertEquals(Integer.valueOf(4), findValueForKey(attrs, 3));
+        assertEquals(Integer.valueOf(6), findValueForKey(attrs, 5));
+        assertEquals(EGL14.EGL_NONE, attrs[6]);
+    }
+
+    /**
+     * Helper method that does a linear search of the key in an integer array and returns
+     * the corresponding value for the key.
+     * This assumes the array is structured in an alternating format of key/value pairs and ends
+     * with the value of EGL_NONE
+     * @param attrs Array of ints representing alternating key value pairs, ending with EGL_NONE
+     * @param key Key to search for the corresponding value of
+     * @return Value of the specified key or null if it was not found
+     */
+    private Integer findValueForKey(int[] attrs, int key) {
+        for (int i = 0; i < attrs.length; i++) {
+            if (attrs[i] == EGL14.EGL_NONE) {
+                break;
+            }
+            if (attrs[i] == key) {
+                if (i < attrs.length - 1) {
+                    return attrs[i + 1];
+                } else {
+                    return null;
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLConfigAttributesTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLConfigAttributesTest.kt
new file mode 100644
index 0000000..2f4a0c3
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLConfigAttributesTest.kt
@@ -0,0 +1,113 @@
+/*
+ * 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.graphics.opengl.egl
+
+import android.opengl.EGL14
+import androidx.graphics.opengl.egl.EGLConfigAttributes.Companion.EGL_COLOR_COMPONENT_TYPE_EXT
+import androidx.graphics.opengl.egl.EGLConfigAttributes.Companion.EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class EGLConfigAttributesTest {
+
+    @Test
+    fun testConfig8888() {
+        with(EGLConfigAttributes.RGBA_8888.attrs) {
+            assertTrue(find(EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT))
+            assertTrue(find(EGL14.EGL_RED_SIZE, 8))
+            assertTrue(find(EGL14.EGL_GREEN_SIZE, 8))
+            assertTrue(find(EGL14.EGL_BLUE_SIZE, 8))
+            assertTrue(find(EGL14.EGL_ALPHA_SIZE, 8))
+            assertTrue(find(EGL14.EGL_DEPTH_SIZE, 0))
+            assertTrue(find(EGL14.EGL_CONFIG_CAVEAT, EGL14.EGL_NONE))
+            assertTrue(find(EGL14.EGL_STENCIL_SIZE, 0))
+            assertTrue(find(EGL14.EGL_SURFACE_TYPE, EGL14.EGL_WINDOW_BIT))
+            assertEquals(this[size - 1], EGL14.EGL_NONE)
+            assertEquals(19, size)
+        }
+    }
+
+    @Test
+    fun testConfig1010102() {
+        with(EGLConfigAttributes.RGBA_1010102.attrs) {
+            assertTrue(find(EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT))
+            assertTrue(find(EGL14.EGL_RED_SIZE, 10))
+            assertTrue(find(EGL14.EGL_GREEN_SIZE, 10))
+            assertTrue(find(EGL14.EGL_BLUE_SIZE, 10))
+            assertTrue(find(EGL14.EGL_ALPHA_SIZE, 2))
+            assertTrue(find(EGL14.EGL_DEPTH_SIZE, 0))
+            assertTrue(find(EGL14.EGL_STENCIL_SIZE, 0))
+            assertTrue(find(EGL14.EGL_SURFACE_TYPE, EGL14.EGL_WINDOW_BIT))
+            assertEquals(this[size - 1], EGL14.EGL_NONE)
+            assertEquals(17, size)
+        }
+    }
+
+    @Test
+    fun testConfigF16() {
+        with(EGLConfigAttributes.RGBA_F16.attrs) {
+            assertTrue(find(EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT))
+            assertTrue(find(EGL_COLOR_COMPONENT_TYPE_EXT, EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT))
+            assertTrue(find(EGL14.EGL_RED_SIZE, 16))
+            assertTrue(find(EGL14.EGL_GREEN_SIZE, 16))
+            assertTrue(find(EGL14.EGL_BLUE_SIZE, 16))
+            assertTrue(find(EGL14.EGL_ALPHA_SIZE, 16))
+            assertTrue(find(EGL14.EGL_DEPTH_SIZE, 0))
+            assertTrue(find(EGL14.EGL_STENCIL_SIZE, 0))
+            assertTrue(find(EGL14.EGL_SURFACE_TYPE, EGL14.EGL_WINDOW_BIT))
+            assertEquals(this[size - 1], EGL14.EGL_NONE)
+            assertEquals(19, size)
+        }
+    }
+
+    @Test
+    fun testInclude() {
+        // Verify that custom config that uses an include initially and overwrites
+        // individual values is handled appropriately even if the config is technically invalid
+        val customConfig = EGLConfigAttributes {
+            include(EGLConfigAttributes.RGBA_8888)
+            EGL14.EGL_RED_SIZE to 27
+            EGL_COLOR_COMPONENT_TYPE_EXT to EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT
+            EGL14.EGL_STENCIL_SIZE to 32
+        }
+
+        with(customConfig.attrs) {
+            assertTrue(find(EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT))
+            assertTrue(find(EGL14.EGL_RED_SIZE, 27))
+            assertTrue(find(EGL_COLOR_COMPONENT_TYPE_EXT, EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT))
+            assertTrue(find(EGL14.EGL_STENCIL_SIZE, 32))
+            assertEquals(this[size - 1], EGL14.EGL_NONE)
+            assertEquals(21, size)
+        }
+    }
+
+    private fun IntArray.find(key: Int, value: Int): Boolean {
+        // size - 1 to skip trailing EGL_NONE
+        for (i in 0 until this.size - 1 step 2) {
+            if (this[i] == key) {
+                return this[i + 1] == value
+            }
+        }
+        return false
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLExtensionsTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLExtensionsTest.kt
new file mode 100644
index 0000000..15cb5ba
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLExtensionsTest.kt
@@ -0,0 +1,193 @@
+/*
+ * 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.graphics.opengl.egl
+
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLExt.Companion.EGL_ANDROID_NATIVE_FENCE_SYNC
+import androidx.opengl.EGLExt.Companion.EGL_EXT_BUFFER_AGE
+import androidx.opengl.EGLExt.Companion.EGL_EXT_GL_COLORSPACE_BT2020_PQ
+import androidx.opengl.EGLExt.Companion.EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH
+import androidx.opengl.EGLExt.Companion.EGL_EXT_GL_COLORSPACE_SCRGB
+import androidx.opengl.EGLExt.Companion.EGL_EXT_PIXEL_FORMAT_FLOAT
+import androidx.opengl.EGLExt.Companion.EGL_IMG_CONTEXT_PRIORITY
+import androidx.opengl.EGLExt.Companion.EGL_KHR_FENCE_SYNC
+import androidx.opengl.EGLExt.Companion.EGL_KHR_GL_COLORSPACE
+import androidx.opengl.EGLExt.Companion.EGL_KHR_NO_CONFIG_CONTEXT
+import androidx.opengl.EGLExt.Companion.EGL_KHR_PARTIAL_UPDATE
+import androidx.opengl.EGLExt.Companion.EGL_KHR_SURFACELESS_CONTEXT
+import androidx.opengl.EGLExt.Companion.EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE
+import androidx.opengl.EGLExt.Companion.EGL_KHR_WAIT_SYNC
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class EGLExtensionsTest {
+
+    @Test
+    fun testSupportsBufferAge() {
+        assertTrue(EGLExt.parseExtensions("EGL_EXT_buffer_age").contains(EGL_EXT_BUFFER_AGE))
+    }
+
+    @Test
+    fun testSupportBufferAgeFromPartialUpdate() {
+        // Buffer age can be supported from either EGL_EXT_buffer_age or EGL_KHR_partial_update
+        assertTrue(
+            EGLExt.parseExtensions("EGL_KHR_partial_update").contains(EGL_KHR_PARTIAL_UPDATE)
+        )
+    }
+
+    @Test
+    fun testSetDamage() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_KHR_partial_update")
+                .contains(EGL_KHR_PARTIAL_UPDATE)
+        )
+    }
+
+    @Test
+    fun testSwapBuffersWithDamage() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_KHR_swap_buffers_with_damage")
+                .contains(EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE)
+        )
+    }
+
+    @Test
+    fun testColorSpace() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_KHR_gl_colorspace")
+                .contains(EGL_KHR_GL_COLORSPACE)
+        )
+    }
+
+    @Test
+    fun testNoConfigContext() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_KHR_no_config_context")
+                .contains(EGL_KHR_NO_CONFIG_CONTEXT)
+        )
+    }
+
+    @Test
+    fun testPixelFormatFloat() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_EXT_pixel_format_float")
+                .contains(EGL_EXT_PIXEL_FORMAT_FLOAT)
+        )
+    }
+
+    @Test
+    fun testScRgb() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_EXT_gl_colorspace_scrgb")
+                .contains(EGL_EXT_GL_COLORSPACE_SCRGB)
+        )
+    }
+
+    @Test
+    fun testDisplayP3() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_EXT_gl_colorspace_display_p3_passthrough")
+                .contains(EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH)
+        )
+    }
+
+    @Test
+    fun testHDR() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_EXT_gl_colorspace_bt2020_pq")
+                .contains(EGL_EXT_GL_COLORSPACE_BT2020_PQ)
+        )
+    }
+
+    @Test
+    fun testContextPriority() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_IMG_context_priority")
+                .contains(EGL_IMG_CONTEXT_PRIORITY)
+        )
+    }
+
+    @Test
+    fun testSurfacelessContext() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_KHR_surfaceless_context")
+                .contains(EGL_KHR_SURFACELESS_CONTEXT)
+        )
+    }
+
+    @Test
+    fun testFenceSync() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_KHR_fence_sync")
+                .contains(EGL_KHR_FENCE_SYNC)
+        )
+    }
+
+    @Test
+    fun testWaitSync() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_KHR_wait_sync")
+            .contains(EGL_KHR_WAIT_SYNC))
+    }
+
+    @Test
+    fun testNativeFenceSync() {
+        assertTrue(
+            EGLExt.parseExtensions("EGL_ANDROID_native_fence_sync")
+                .contains(EGL_ANDROID_NATIVE_FENCE_SYNC)
+        )
+    }
+
+    @Test
+    fun testExtensionsQueryStringParsing() {
+        val extensionQuery = "EGL_EXT_buffer_age " +
+            "EGL_KHR_partial_update " +
+            "EGL_KHR_swap_buffers_with_damage " +
+            "EGL_KHR_gl_colorspace " +
+            "EGL_KHR_no_config_context " +
+            "EGL_EXT_pixel_format_float " +
+            "EGL_EXT_gl_colorspace_scrgb " +
+            "EGL_EXT_gl_colorspace_display_p3_passthrough " +
+            "EGL_EXT_gl_colorspace_bt2020_pq " +
+            "EGL_IMG_context_priority " +
+            "EGL_KHR_surfaceless_context " +
+            "EGL_KHR_fence_sync " +
+            "EGL_KHR_wait_sync " +
+            "EGL_ANDROID_native_fence_sync "
+        with(EGLExt.parseExtensions(extensionQuery)) {
+            assertTrue(contains(EGL_EXT_BUFFER_AGE))
+            assertTrue(contains(EGL_KHR_PARTIAL_UPDATE))
+            assertTrue(contains(EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE))
+            assertTrue(contains(EGL_KHR_GL_COLORSPACE))
+            assertTrue(contains(EGL_KHR_NO_CONFIG_CONTEXT))
+            assertTrue(contains(EGL_EXT_PIXEL_FORMAT_FLOAT))
+            assertTrue(contains(EGL_EXT_GL_COLORSPACE_SCRGB))
+            assertTrue(contains(EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH))
+            assertTrue(contains(EGL_EXT_GL_COLORSPACE_BT2020_PQ))
+            assertTrue(contains(EGL_IMG_CONTEXT_PRIORITY))
+            assertTrue(contains(EGL_KHR_SURFACELESS_CONTEXT))
+            assertTrue(contains(EGL_KHR_FENCE_SYNC))
+            assertTrue(contains(EGL_KHR_WAIT_SYNC))
+            assertTrue(contains(EGL_ANDROID_NATIVE_FENCE_SYNC))
+        }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLManagerTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLManagerTest.kt
new file mode 100644
index 0000000..7542d8a7
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLManagerTest.kt
@@ -0,0 +1,698 @@
+/*
+ * 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.graphics.opengl.egl
+
+import android.graphics.Color
+import android.graphics.PixelFormat
+import android.graphics.SurfaceTexture
+import android.hardware.HardwareBuffer
+import android.hardware.SyncFence
+import android.media.ImageReader
+import android.opengl.EGL14
+import android.opengl.EGLSurface
+import android.opengl.GLES20
+import android.os.Build
+import android.view.Surface
+import androidx.annotation.RequiresApi
+import androidx.opengl.EGLBindings
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_CONDITION_KHR
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_FENCE_KHR
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_NATIVE_FENCE_ANDROID
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_TYPE_KHR
+import androidx.opengl.EGLExt.Companion.EGL_ANDROID_IMAGE_NATIVE_BUFFER
+import androidx.opengl.EGLExt.Companion.EGL_ANDROID_NATIVE_FENCE_SYNC
+import androidx.opengl.EGLExt.Companion.EGL_KHR_FENCE_SYNC
+import androidx.opengl.EGLExt.Companion.EGL_KHR_IMAGE
+import androidx.opengl.EGLExt.Companion.EGL_KHR_IMAGE_BASE
+import androidx.opengl.EGLExt.Companion.EGL_KHR_SURFACELESS_CONTEXT
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.TimeUnit
+import kotlin.concurrent.thread
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+@Suppress("AcronymName")
+class EGLManagerTest {
+
+    @Test
+    fun testInitializeAndRelease() {
+        testEGLManager {
+            initialize()
+            val config = loadConfig(EGLConfigAttributes.RGBA_8888)?.also {
+                createContext(it)
+            }
+            if (config == null) {
+                fail("Config 8888 should be supported")
+            }
+            // Even though EGL v 1.5 was introduced in API level 29 not all devices will advertise
+            // support for it. However, all devices should at least support EGL v 1.4
+            assertTrue(
+                "Unexpected EGL version, received $eglVersion",
+                eglVersion == EGLVersion.V14 || eglVersion == EGLVersion.V15
+            )
+            assertNotNull(eglContext)
+            assertNotNull(eglConfig)
+        }
+    }
+
+    @Test
+    fun testMultipleInitializeCallsIgnored() {
+        testEGLManager {
+            initialize()
+            loadConfig(EGLConfigAttributes.RGBA_8888)?.also {
+                createContext(it)
+            }
+            val currentContext = eglContext
+            val currentConfig = eglConfig
+            assertNotEquals(EGL14.EGL_NO_CONTEXT, currentContext)
+            // Subsequent calls to initialize should be ignored
+            // and the current EglContext should be the same as the previous call
+            initialize()
+            assertTrue(currentContext === eglContext)
+            assertTrue(currentConfig === eglConfig)
+        }
+    }
+
+    @Test
+    fun testMultipleReleaseCallsIgnored() {
+        testEGLManager {
+            initialize()
+            loadConfig(EGLConfigAttributes.RGBA_8888)?.also {
+                createContext(it)
+            }
+            // Multiple attempts to release should act as no-ops, i.e. we should not crash
+            // and the corresponding context should be nulled out
+            release()
+            assertEquals(EGL14.EGL_NO_CONTEXT, eglContext)
+
+            release()
+            assertEquals(EGL14.EGL_NO_CONTEXT, eglContext)
+        }
+    }
+
+    @Test
+    fun testDefaultSurface() {
+        testEGLManager {
+            initialize()
+
+            assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+            assertEquals(currentDrawSurface, EGL14.EGL_NO_SURFACE)
+            assertEquals(currentReadSurface, EGL14.EGL_NO_SURFACE)
+
+            val config = loadConfig(EGLConfigAttributes.RGBA_8888)
+
+            if (config == null) {
+                fail("Config 8888 should be supported")
+            }
+
+            createContext(config!!)
+
+            if (isExtensionSupported(EGL_KHR_SURFACELESS_CONTEXT)) {
+                assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+            } else {
+                assertNotEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+            }
+
+            assertEquals(currentDrawSurface, defaultSurface)
+            assertEquals(currentReadSurface, defaultSurface)
+
+            release()
+
+            assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+            assertEquals(currentDrawSurface, EGL14.EGL_NO_SURFACE)
+            assertEquals(currentReadSurface, EGL14.EGL_NO_SURFACE)
+        }
+    }
+
+    @Test
+    fun testDefaultSurfaceWithoutSurfacelessContext() {
+        // Create a new EGL Spec instance that does not support the
+        // EglKhrSurfacelessContext extension in order to verify
+        // the fallback support of initializing the current surface
+        // to a PBuffer instead of EGL14.EGL_NO_SURFACE
+        val wrappedEglSpec = object : EGLSpec by EGLSpec.V14 {
+            override fun eglQueryString(nameId: Int): String {
+                val queryString = EGLSpec.V14.eglQueryString(nameId)
+                return if (nameId == EGL14.EGL_EXTENSIONS) {
+                    // Parse the space separated string of EGL extensions into a set
+                    val set = HashSet<String>().apply {
+                        addAll(queryString.split(' '))
+                    }
+                    // Remove EglKhrSurfacelessContext if it exists
+                    // and repack the set into a space separated string
+                    set.remove(EGL_KHR_SURFACELESS_CONTEXT)
+                    StringBuilder().let {
+                        for (entry in set) {
+                            it.append(entry)
+                            it.append(' ')
+                        }
+                        it.toString()
+                    }
+                } else {
+                    queryString
+                }
+            }
+        }
+
+        testEGLManager(wrappedEglSpec) {
+            initialize()
+
+            // Verify that the wrapped EGL spec implementation in fact does not
+            // advertise support for EglKhrSurfacelessContext
+            assertFalse(isExtensionSupported(EGL_KHR_SURFACELESS_CONTEXT))
+
+            assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+            assertEquals(currentDrawSurface, EGL14.EGL_NO_SURFACE)
+            assertEquals(currentReadSurface, EGL14.EGL_NO_SURFACE)
+
+            val config = loadConfig(EGLConfigAttributes.RGBA_8888)
+
+            if (config == null) {
+                fail("Config 8888 should be supported")
+            }
+
+            // Create context at this point should fallback of eglCreatePBufferSurface
+            // instead of EGL_NO_SURFACE as a result of no longer advertising support
+            // for EglKhrSurfacelessContext
+            createContext(config!!)
+
+            assertNotEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+            assertEquals(currentDrawSurface, defaultSurface)
+            assertEquals(currentReadSurface, defaultSurface)
+
+            release()
+
+            assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+            assertEquals(currentDrawSurface, EGL14.EGL_NO_SURFACE)
+            assertEquals(currentReadSurface, EGL14.EGL_NO_SURFACE)
+        }
+    }
+
+    @Test
+    fun testCreatePBufferSurface() {
+        testEGLManager {
+            initialize()
+
+            assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+            assertEquals(currentDrawSurface, EGL14.EGL_NO_SURFACE)
+            assertEquals(currentReadSurface, EGL14.EGL_NO_SURFACE)
+
+            val config = loadConfig(EGLConfigAttributes.RGBA_8888)
+
+            if (config == null) {
+                fail("Config 8888 should be supported")
+            }
+            createContext(config!!)
+
+            val pBuffer = eglSpec.eglCreatePBufferSurface(
+                config,
+                EGLConfigAttributes {
+                    EGL14.EGL_WIDTH to 1
+                    EGL14.EGL_HEIGHT to 1
+                })
+
+            makeCurrent(pBuffer)
+
+            assertNotEquals(EGL14.EGL_NO_SURFACE, currentReadSurface)
+            assertNotEquals(EGL14.EGL_NO_SURFACE, currentDrawSurface)
+            assertNotEquals(EGL14.EGL_NO_SURFACE, pBuffer)
+
+            assertEquals(pBuffer, currentReadSurface)
+            assertEquals(pBuffer, currentDrawSurface)
+
+            eglSpec.eglDestroySurface(pBuffer)
+            release()
+        }
+    }
+
+    @Test
+    fun testCreateWindowSurfaceDefault() {
+        testEGLManager {
+            initialize()
+
+            val config = loadConfig(EGLConfigAttributes.RGBA_8888)
+            if (config == null) {
+                fail("Config 8888 should be supported")
+            }
+
+            createContext(config!!)
+
+            val surface = Surface(SurfaceTexture(42))
+            // Create a window surface with the default attributes
+            val eglSurface = eglSpec.eglCreateWindowSurface(config, surface, null)
+            assertNotEquals(EGL14.EGL_NO_SURFACE, eglSurface)
+            eglSpec.eglDestroySurface(eglSurface)
+
+            release()
+        }
+    }
+
+    private fun EGLSpec.isSingleBufferedSurface(surface: EGLSurface): Boolean {
+        return if (surface == EGL14.EGL_NO_SURFACE) {
+            false
+        } else {
+            val result = IntArray(1)
+            val queryResult = eglQuerySurface(
+                surface, EGL14.EGL_RENDER_BUFFER, result, 0)
+            queryResult && result[0] == EGL14.EGL_SINGLE_BUFFER
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+    @Test
+    fun testSurfaceContentsWithBackBuffer() {
+        verifySurfaceContentsWithWindowConfig()
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+    @Test
+    fun testSurfaceContentsWithFrontBuffer() {
+        verifySurfaceContentsWithWindowConfig(true)
+    }
+
+    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+    private fun verifySurfaceContentsWithWindowConfig(
+        singleBuffered: Boolean = false
+    ) {
+        testEGLManager {
+            initialize()
+            val config = loadConfig(EGLConfigAttributes.RGBA_8888)
+            if (config == null) {
+                fail("Config 8888 should be supported")
+            }
+            createContext(config!!)
+
+            val width = 8
+            val height = 5
+            val targetColor = Color.RED
+            val imageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1)
+            var canRender = false
+
+            thread {
+                canRender = drawSurface(imageReader.surface, targetColor, singleBuffered)
+            }.join()
+
+            try {
+                if (canRender) {
+                    val image = imageReader.acquireLatestImage()
+                    val plane = image.planes[0]
+                    assertEquals(4, plane.pixelStride)
+
+                    val pixelStride = plane.pixelStride
+                    val rowStride = plane.rowStride
+                    val rowPadding = rowStride - pixelStride * width
+                    var offset = 0
+                    for (y in 0 until height) {
+                        for (x in 0 until width) {
+                            val red = plane.buffer[offset].toInt() and 0xff
+                            val green = plane.buffer[offset + 1].toInt() and 0xff
+                            val blue = plane.buffer[offset + 2].toInt() and 0xff
+                            val alpha = plane.buffer[offset + 3].toInt() and 0xff
+                            val packedColor = Color.argb(alpha, red, green, blue)
+                            assertEquals("Index: " + x + ", " + y, targetColor, packedColor)
+                            offset += pixelStride
+                        }
+                        offset += rowPadding
+                    }
+                }
+            } finally {
+                imageReader.close()
+                release()
+            }
+        }
+    }
+
+    private fun drawSurface(
+        surface: Surface,
+        color: Int,
+        singleBuffered: Boolean
+    ): Boolean {
+        var canRender = false
+        testEGLManager {
+            initialize()
+            val config = loadConfig(EGLConfigAttributes.RGBA_8888)
+            if (config == null) {
+                fail("Config 8888 should be supported")
+            }
+            createContext(config!!)
+            val configAttributes = if (singleBuffered) {
+                EGLConfigAttributes {
+                    EGL14.EGL_RENDER_BUFFER to EGL14.EGL_SINGLE_BUFFER
+                }
+            } else {
+                null
+            }
+            val eglSurface = eglSpec.eglCreateWindowSurface(config, surface, configAttributes)
+            // Skip tests of the device does not support EGL_SINGLE_BUFFER
+            canRender = !singleBuffered || eglSpec.isSingleBufferedSurface(eglSurface)
+            if (canRender) {
+                makeCurrent(eglSurface)
+                assertEquals("Make current failed", EGL14.EGL_SUCCESS, eglSpec.eglGetError())
+                GLES20.glClearColor(
+                    Color.red(color) / 255f,
+                    Color.green(color) / 255f,
+                    Color.blue(color) / 255f,
+                    Color.alpha(color) / 255f
+                )
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+                swapAndFlushBuffers()
+                assertEquals("Swapbuffers failed", EGL14.EGL_SUCCESS, eglSpec.eglGetError())
+            }
+
+            eglSpec.eglDestroySurface(eglSurface)
+            release()
+        }
+        return canRender
+    }
+
+    @Test
+    fun testEGLGetNativeClientBufferANDROIDSupported() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            val khrImageBaseSupported =
+                isExtensionSupported(EGL_KHR_IMAGE_BASE)
+            val androidImageNativeBufferSupported =
+                isExtensionSupported(EGL_ANDROID_IMAGE_NATIVE_BUFFER)
+            // According to EGL spec both these extensions are required in order to support
+            // eglGetNativeClientBufferAndroid
+            if (khrImageBaseSupported && androidImageNativeBufferSupported) {
+                assertTrue(EGLBindings.nSupportsEglGetNativeClientBufferAndroid())
+            }
+        }
+    }
+
+    @Test
+    fun testEglFenceAPIsSupported() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            if (isExtensionSupported(EGL_KHR_IMAGE_BASE)) {
+                assertTrue(EGLBindings.nSupportsEglCreateImageKHR())
+                assertTrue(EGLBindings.nSupportsEglClientWaitSyncKHR())
+                assertTrue(EGLBindings.nSupportsEglGetSyncAttribKHR())
+                assertTrue(EGLBindings.nSupportsEglDestroyImageKHR())
+            }
+        }
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    fun testEglCreateAndDestroyImageKHR() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            if (isExtensionSupported(EGL_KHR_IMAGE_BASE) && isExtensionSupported(
+                    EGL_ANDROID_IMAGE_NATIVE_BUFFER)) {
+                val hardwareBuffer = HardwareBuffer.create(
+                    10,
+                    10,
+                    PixelFormat.RGBA_8888,
+                    1,
+                    HardwareBuffer.USAGE_GPU_COLOR_OUTPUT
+                )
+                val image = eglSpec.eglCreateImageFromHardwareBuffer(hardwareBuffer)
+                assertNotNull(image)
+                assertTrue(eglSpec.eglDestroyImageKHR(image!!))
+            }
+        }
+    }
+
+    @Test
+    fun testGlImageTargetTexture2DOESSupported() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            // According to EGL spec *EITHER* EGL_KHR_image_base or EGL_KHR_image
+            // indicate that the eglImageTargetTexture2DOES method is supported on this device
+            if (isExtensionSupported(EGL_KHR_IMAGE_BASE) || isExtensionSupported(EGL_KHR_IMAGE)) {
+                assertTrue(EGLBindings.nSupportsGlImageTargetTexture2DOES())
+            }
+        }
+    }
+
+    @Test
+    fun testEglCreateAndDestroySyncKHRSupported() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            if (isExtensionSupported(EGL_KHR_FENCE_SYNC)) {
+                assertTrue(EGLBindings.nSupportsEglCreateSyncKHR())
+                assertTrue(EGLBindings.nSupportsEglDestroySyncKHR())
+            }
+        }
+    }
+
+    /**
+     * Helper method to determine if both EGLSync fences are supported
+     * along with Android platform specific EGLSync fence types
+     */
+    private fun EGLManager.supportsNativeAndroidFence(): Boolean =
+        isExtensionSupported(EGL_KHR_FENCE_SYNC) &&
+            isExtensionSupported(EGL_ANDROID_NATIVE_FENCE_SYNC)
+
+    @Test
+    fun testEglCreateAndDestroyAndroidFenceSyncKHR() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            if (supportsNativeAndroidFence()) {
+                val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_NATIVE_FENCE_ANDROID, null)
+                assertNotNull(sync)
+                val syncAttr = IntArray(1)
+                assertTrue(
+                    eglSpec.eglGetSyncAttribKHR(sync!!, EGL_SYNC_TYPE_KHR, syncAttr, 0))
+                assertEquals(EGL_SYNC_NATIVE_FENCE_ANDROID, syncAttr[0])
+                assertTrue(eglSpec.eglDestroySyncKHR(sync))
+            }
+        }
+    }
+
+    @Test
+    fun testEglDupNativeFenceFDANDROIDSupported() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            if (supportsNativeAndroidFence()) {
+                assertTrue(EGLBindings.nSupportsDupNativeFenceFDANDROID())
+            }
+        }
+    }
+
+    @Test
+    fun testEglCreateAndDestroyFenceSyncKHR() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            if (isExtensionSupported(EGL_KHR_FENCE_SYNC)) {
+                val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_FENCE_KHR, null)
+                assertNotNull(sync)
+                val syncAttr = IntArray(1)
+                assertTrue(
+                    eglSpec.eglGetSyncAttribKHR(sync!!, EGL_SYNC_TYPE_KHR, syncAttr, 0))
+                assertEquals(EGL_SYNC_FENCE_KHR, syncAttr[0])
+                assertTrue(
+                    eglSpec.eglGetSyncAttribKHR(
+                        sync,
+                        EGL_SYNC_CONDITION_KHR,
+                        syncAttr,
+                        0
+                    )
+                )
+                assertEquals(EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR, syncAttr[0])
+                assertTrue(eglSpec.eglDestroySyncKHR(sync))
+            }
+        }
+    }
+
+    @Test
+    fun testEglGetSyncAttribKHROutOfBounds() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            if (isExtensionSupported(EGL_KHR_FENCE_SYNC)) {
+                val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_FENCE_KHR, null)
+                assertNotNull(sync)
+                val syncAttr = IntArray(1)
+                try {
+                    assertFalse(
+                        eglSpec.eglGetSyncAttribKHR(
+                            sync!!,
+                            EGL_SYNC_TYPE_KHR,
+                            syncAttr,
+                            1
+                        )
+                    )
+                    fail("Should have thrown for array out of bounds exception")
+                } catch (_: IllegalArgumentException) {
+                    // NO-OP
+                }
+
+                if (sync != null) {
+                    assertTrue(eglSpec.eglDestroySyncKHR(sync))
+                }
+            }
+        }
+    }
+
+    @Test
+    fun testEglGetSyncAttribKHRNegativeOffset() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            if (isExtensionSupported(EGL_KHR_FENCE_SYNC)) {
+                val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_FENCE_KHR, null)
+                assertNotNull(sync)
+                val syncAttr = IntArray(1)
+                try {
+                    assertFalse(
+                        eglSpec.eglGetSyncAttribKHR(
+                            sync!!,
+                            EGL_SYNC_TYPE_KHR,
+                            syncAttr,
+                            -1
+                        )
+                    )
+                    fail("Should have thrown for negative offset into attributes array")
+                } catch (_: IllegalArgumentException) {
+                    // NO-OP
+                }
+
+                if (sync != null) {
+                    assertTrue(eglSpec.eglDestroySyncKHR(sync))
+                }
+            }
+        }
+    }
+
+    @Test
+    fun testEglClientWaitSyncKHR() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            if (isExtensionSupported(EGL_KHR_FENCE_SYNC)) {
+                val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_FENCE_KHR, null)
+                assertNotNull(sync)
+
+                assertEquals("eglCreateSync failed", EGL14.EGL_SUCCESS, eglSpec.eglGetError())
+
+                GLES20.glFlush()
+                assertEquals("glFlush failed", GLES20.GL_NO_ERROR, GLES20.glGetError())
+
+                val status = eglSpec.eglClientWaitSyncKHR(
+                    sync!!,
+                    0,
+                    EGLExt.EGL_FOREVER_KHR
+                )
+                assertEquals("eglClientWaitSync failed",
+                    EGLExt.EGL_CONDITION_SATISFIED_KHR, status)
+                assertEquals("eglClientWaitSyncKHR failed", EGL14.EGL_SUCCESS, EGL14.eglGetError())
+                assertTrue(eglSpec.eglDestroySyncKHR(sync))
+                assertEquals("eglDestroySyncKHR failed", EGL14.EGL_SUCCESS, EGL14.eglGetError())
+            }
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+    @Test
+    fun testEglDupNativeFenceFDANDROID() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            if (supportsNativeAndroidFence()) {
+                val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_NATIVE_FENCE_ANDROID, null)
+                assertNotNull(sync)
+
+                assertEquals("eglCreateSyncFailed", EGL14.EGL_SUCCESS, eglSpec.eglGetError())
+
+                GLES20.glFlush()
+                assertEquals("glFlush failed", GLES20.GL_NO_ERROR, GLES20.glGetError())
+
+                val syncFence = eglSpec.eglDupNativeFenceFDANDROID(sync!!)
+                assertTrue(syncFence.isValid())
+                assertTrue(syncFence.await(TimeUnit.MILLISECONDS.toNanos(3000)))
+
+                assertTrue(eglSpec.eglDestroySyncKHR(sync))
+                assertEquals("eglDestroySyncKHR failed", EGL14.EGL_SUCCESS, EGL14.eglGetError())
+                syncFence.close()
+                assertFalse(syncFence.isValid())
+            }
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+    @Test
+    fun testEglDupNativeFenceFDANDROIDawaitForever() {
+        testEGLManager {
+            initializeWithDefaultConfig()
+            if (supportsNativeAndroidFence()) {
+                val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_NATIVE_FENCE_ANDROID, null)
+                assertNotNull(sync)
+
+                assertEquals("eglCreateSync failed", EGL14.EGL_SUCCESS, eglSpec.eglGetError())
+
+                GLES20.glFlush()
+                assertEquals("glFlush failed", GLES20.GL_NO_ERROR, GLES20.glGetError())
+
+                val syncFence = eglSpec.eglDupNativeFenceFDANDROID(sync!!)
+                assertTrue(syncFence.isValid())
+                assertNotEquals(SyncFence.SIGNAL_TIME_INVALID, syncFence.getSignalTime())
+                assertTrue(syncFence.awaitForever())
+
+                assertTrue(eglSpec.eglDestroySyncKHR(sync))
+                assertEquals("eglDestroySyncKHR failed", EGL14.EGL_SUCCESS, EGL14.eglGetError())
+                syncFence.close()
+                assertFalse(syncFence.isValid())
+                assertEquals(SyncFence.SIGNAL_TIME_INVALID, syncFence.getSignalTime())
+            }
+        }
+    }
+
+    @Test
+    fun testSignedForeverConstantMatchesNDK() {
+        assertTrue(EGLBindings.nEqualToNativeForeverTimeout(EGLExt.EGL_FOREVER_KHR))
+    }
+
+    // Helper method used in testing to initialize EGL and default
+    // EGLConfig to the ARGB8888 configuration
+    private fun EGLManager.initializeWithDefaultConfig() {
+        initialize()
+        val config = loadConfig(EGLConfigAttributes.RGBA_8888)
+        if (config == null) {
+            fail("Config 8888 should be supported")
+        }
+        createContext(config!!)
+    }
+
+    /**
+     * Helper method to ensure EglManager has the corresponding release calls
+     * made to it and verifies that no exceptions were thrown as part of the test.
+     */
+    private fun testEGLManager(
+        eglSpec: EGLSpec = EGLSpec.V14,
+        block: EGLManager.() -> Unit = {}
+    ) {
+        with(EGLManager(eglSpec)) {
+            assertEquals(EGLVersion.Unknown, eglVersion)
+            assertEquals(EGL14.EGL_NO_CONTEXT, eglContext)
+            block()
+            release()
+            assertEquals(EGLVersion.Unknown, eglVersion)
+            assertEquals(EGL14.EGL_NO_CONTEXT, eglContext)
+        }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLTestActivity.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLTestActivity.kt
new file mode 100644
index 0000000..ddbdf2d
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLTestActivity.kt
@@ -0,0 +1,135 @@
+/*
+ * 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.graphics.opengl.egl
+
+import android.animation.ValueAnimator
+import android.app.Activity
+import android.opengl.EGL14
+import android.opengl.EGLConfig
+import android.opengl.EGLSurface
+import android.opengl.GLES20
+import android.os.Bundle
+import android.view.Surface
+import android.view.SurfaceView
+import android.view.TextureView
+import android.widget.LinearLayout
+import androidx.graphics.opengl.GLRenderer
+import androidx.graphics.opengl.GLRenderer.RenderTarget
+import java.util.concurrent.atomic.AtomicInteger
+
+const val TAG: String = "EGLTestActivity"
+
+@Suppress("AcronymName")
+class EGLTestActivity : Activity() {
+
+    private val mGLRenderer = GLRenderer()
+    private val mParam = AtomicInteger()
+    private val mRenderer1 = object : GLRenderer.RenderCallback {
+        override fun onSurfaceCreated(
+            spec: EGLSpec,
+            config: EGLConfig,
+            surface: Surface,
+            width: Int,
+            height: Int
+        ): EGLSurface {
+            val attrs = EGLConfigAttributes {
+                EGL14.EGL_RENDER_BUFFER to EGL14.EGL_SINGLE_BUFFER
+            }
+            return spec.eglCreateWindowSurface(config, surface, attrs)
+        }
+
+        override fun onDrawFrame(eglManager: EGLManager) {
+            val red = mParam.toFloat() / 100f
+            GLES20.glClearColor(red, 0.0f, 0.0f, 1.0f)
+            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+        }
+    }
+
+    private val mRenderer2 = object : GLRenderer.RenderCallback {
+        override fun onDrawFrame(eglManager: EGLManager) {
+            val blue = mParam.toFloat() / 100f
+            GLES20.glClearColor(0.0f, 0.0f, blue, 1.0f)
+            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+        }
+    }
+
+    private lateinit var mSurfaceView: SurfaceView
+    private lateinit var mTextureView: TextureView
+    private lateinit var mRenderTarget1: RenderTarget
+    private lateinit var mRenderTarget2: RenderTarget
+
+    private var mAnimator: ValueAnimator? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        mGLRenderer.start()
+
+        val container = LinearLayout(this).apply {
+            orientation = LinearLayout.VERTICAL
+            weightSum = 2f
+        }
+        mSurfaceView = SurfaceView(this)
+        mTextureView = TextureView(this)
+
+        val params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0).apply {
+            weight = 1f
+        }
+
+        mRenderTarget1 = mGLRenderer.attach(mSurfaceView, mRenderer1)
+        mRenderTarget2 = mGLRenderer.attach(mTextureView, mRenderer2)
+
+        container.addView(mSurfaceView, params)
+        container.addView(mTextureView, params)
+
+        setContentView(container)
+
+        mAnimator = ValueAnimator.ofFloat(0.0f, 1.0f).apply {
+            duration = 3000
+            repeatCount = ValueAnimator.INFINITE
+            repeatMode = ValueAnimator.REVERSE
+            addUpdateListener {
+                mParam.set(((it.animatedValue as Float) * 100).toInt())
+                mRenderTarget1.requestRender()
+                mRenderTarget2.requestRender()
+            }
+            start()
+        }
+    }
+
+    override fun onResume() {
+        super.onResume()
+        if (!mRenderTarget1.isAttached()) {
+            mRenderTarget1 = mGLRenderer.attach(mSurfaceView, mRenderer1)
+        }
+
+        if (!mRenderTarget2.isAttached()) {
+            mRenderTarget2 = mGLRenderer.attach(mTextureView, mRenderer2)
+        }
+    }
+
+    override fun onPause() {
+        super.onPause()
+        mRenderTarget1.detach(true)
+        mRenderTarget2.detach(true)
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        mAnimator?.cancel()
+        mGLRenderer.stop(true)
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLTestUtils.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLTestUtils.kt
new file mode 100644
index 0000000..5098b90
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLTestUtils.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2022 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.graphics.opengl.egl
+
+import androidx.opengl.EGLExt
+
+/**
+ * Helper method to determine if the Android device supports creation of native file descriptors
+ * from EGLSync objects
+ */
+fun deviceSupportsNativeAndroidFence(): Boolean {
+    val eglManager = EGLManager().apply { initialize() }
+    val supportsAndroidFence = eglManager.supportsNativeAndroidFence()
+    eglManager.release()
+    return supportsAndroidFence
+}
+
+/**
+ * Queries the corresponding EGL fence extensions from an initialized [EGLManager] instance
+ */
+fun EGLManager.supportsNativeAndroidFence(): Boolean =
+    isExtensionSupported(EGLExt.EGL_KHR_FENCE_SYNC) &&
+        isExtensionSupported(EGLExt.EGL_ANDROID_NATIVE_FENCE_SYNC)
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLVersionTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLVersionTest.kt
new file mode 100644
index 0000000..83cdf96
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLVersionTest.kt
@@ -0,0 +1,51 @@
+/*
+ * 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.graphics.opengl.egl
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class EGLVersionTest {
+
+    @Test
+    fun testDestructuringComponents() {
+        val (major, minor) = EGLVersion(8, 3)
+        assertEquals(8, major)
+        assertEquals(3, minor)
+    }
+
+    @Test
+    fun testEquals() {
+        assertEquals(EGLVersion(2, 9), EGLVersion(2, 9))
+    }
+
+    @Test
+    fun testToString() {
+        assertEquals("EGL version 5.9", EGLVersion(5, 9).toString())
+    }
+
+    @Test
+    fun testHashCode() {
+        val hashCode = 31 * 8 + 4
+        assertEquals(hashCode, EGLVersion(8, 4).hashCode())
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt
new file mode 100644
index 0000000..8f7fec9
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt
@@ -0,0 +1,1256 @@
+/*
+ * Copyright 2022 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.graphics.surface
+
+import android.graphics.Color
+import android.graphics.ColorSpace
+import android.graphics.Region
+import android.opengl.EGL14
+import android.os.Build
+import android.os.SystemClock
+import android.view.SurfaceHolder
+import androidx.graphics.lowlatency.SyncFenceCompat
+import androidx.graphics.opengl.egl.EGLConfigAttributes
+import androidx.graphics.opengl.egl.EGLManager
+import androidx.graphics.opengl.egl.EGLSpec
+import androidx.graphics.opengl.egl.EGLVersion
+import androidx.graphics.opengl.egl.supportsNativeAndroidFence
+import androidx.hardware.SyncFence
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executor
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+@SdkSuppress(minSdkVersion = 29)
+class SurfaceControlCompatTest {
+    var executor: Executor? = null
+
+    @Before
+    fun setup() {
+        executor = Executors.newSingleThreadExecutor(Executors.defaultThreadFactory())
+    }
+
+    private abstract class SurfaceHolderCallback : SurfaceHolder.Callback {
+        override fun surfaceChanged(p0: SurfaceHolder, p1: Int, p2: Int, p3: Int) {
+        }
+
+        override fun surfaceDestroyed(p0: SurfaceHolder) {
+        }
+    }
+
+    @Test
+    fun testSurfaceControlCompatBuilder_parent() {
+        val callbackLatch = CountDownLatch(1)
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(Lifecycle.State.CREATED)
+
+        try {
+            scenario.onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        SurfaceControlCompat.Builder()
+                            .setParent(it.mSurfaceView)
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        callbackLatch.countDown()
+                    }
+                }
+
+                it.addSurface(it.getSurfaceView(), callback)
+            }
+            scenario.moveToState(Lifecycle.State.RESUMED)
+            assertTrue(callbackLatch.await(3000, TimeUnit.MILLISECONDS))
+        } catch (e: java.lang.IllegalArgumentException) {
+            fail()
+        } finally {
+            // ensure activity is destroyed after any failures
+            scenario.moveToState(Lifecycle.State.DESTROYED)
+        }
+    }
+
+    @Test
+    fun testSurfaceTransactionCreate() {
+        try {
+            SurfaceControlCompat.Transaction()
+        } catch (e: java.lang.IllegalArgumentException) {
+            fail()
+        }
+    }
+
+    class TransactionOnCommitListener : SurfaceControlCompat.TransactionCommittedListener {
+        var mCallbackTime = -1L
+        var mLatch = CountDownLatch(1)
+
+        override fun onTransactionCommitted() {
+            mCallbackTime = SystemClock.elapsedRealtime()
+            mLatch.countDown()
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+    @Test
+    fun testSurfaceTransactionOnCommitCallback() {
+        val listener = TransactionOnCommitListener()
+
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(Lifecycle.State.CREATED)
+
+        try {
+            scenario.onActivity {
+                SurfaceControlCompat.Transaction()
+                    .addTransactionCommittedListener(executor!!, listener)
+                    .commit()
+            }
+            scenario.moveToState(Lifecycle.State.RESUMED)
+
+            listener.mLatch.await(3, TimeUnit.SECONDS)
+            assertEquals(0, listener.mLatch.count)
+            assertTrue(listener.mCallbackTime > 0)
+        } finally {
+            // ensure activity is destroyed after any failures
+            scenario.moveToState(Lifecycle.State.DESTROYED)
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+    @Test
+    fun testSurfaceTransactionOnCommitCallback_multiple() {
+        val listener = TransactionOnCommitListener()
+        val listener2 = TransactionOnCommitListener()
+
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(Lifecycle.State.CREATED)
+
+        try {
+            scenario.onActivity {
+                SurfaceControlCompat.Transaction()
+                    .addTransactionCommittedListener(executor!!, listener)
+                    .addTransactionCommittedListener(executor!!, listener2)
+                    .commit()
+            }
+
+            scenario.moveToState(Lifecycle.State.RESUMED)
+
+            listener.mLatch.await(3, TimeUnit.SECONDS)
+            listener2.mLatch.await(3, TimeUnit.SECONDS)
+
+            assertEquals(0, listener.mLatch.count)
+            assertEquals(0, listener2.mLatch.count)
+
+            assertTrue(listener.mCallbackTime > 0)
+            assertTrue(listener2.mCallbackTime > 0)
+        } finally {
+            // ensure activity is destroyed after any failures
+            scenario.moveToState(Lifecycle.State.DESTROYED)
+        }
+    }
+
+    @Test
+    fun testSurfaceControlIsValid_valid() {
+        val callbackLatch = CountDownLatch(1)
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(Lifecycle.State.CREATED)
+        try {
+            scenario.onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat.Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        assertTrue(scCompat.isValid())
+                        callbackLatch.countDown()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+            scenario.moveToState(Lifecycle.State.RESUMED)
+            assertTrue(callbackLatch.await(3000, TimeUnit.MILLISECONDS))
+        } catch (e: java.lang.IllegalArgumentException) {
+            fail()
+        } finally {
+            // ensure activity is destroyed after any failures
+            scenario.moveToState(Lifecycle.State.DESTROYED)
+        }
+    }
+
+    @Test
+    fun testSurfaceControlIsValid_validNotValid() {
+        val callbackLatch = CountDownLatch(1)
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(Lifecycle.State.CREATED)
+        try {
+            scenario.onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat.Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        assertTrue(scCompat.isValid())
+                        scCompat.release()
+                        assertFalse(scCompat.isValid())
+
+                        callbackLatch.countDown()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+            scenario.moveToState(Lifecycle.State.RESUMED)
+            assertTrue(callbackLatch.await(3000, TimeUnit.MILLISECONDS))
+        } catch (e: java.lang.IllegalArgumentException) {
+            fail()
+        } finally {
+            // ensure activity is destroyed after any failures
+            scenario.moveToState(Lifecycle.State.DESTROYED)
+        }
+    }
+
+    @Test
+    fun testSurfaceControlIsValid_multipleReleases() {
+        val callbackLatch = CountDownLatch(1)
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(Lifecycle.State.CREATED)
+        try {
+            scenario.onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat.Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        assertTrue(scCompat.isValid())
+                        scCompat.release()
+                        scCompat.release()
+                        assertFalse(scCompat.isValid())
+
+                        callbackLatch.countDown()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+            scenario.moveToState(Lifecycle.State.RESUMED)
+            assertTrue(callbackLatch.await(3000, TimeUnit.MILLISECONDS))
+        } catch (e: java.lang.IllegalArgumentException) {
+            fail()
+        } finally {
+            // ensure activity is destroyed after any failures
+            scenario.moveToState(Lifecycle.State.DESTROYED)
+        }
+    }
+
+    @Test
+    fun testTransactionReparent_null() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.BLUE
+                            )
+                        assertNotNull(buffer)
+
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(scCompat, true)
+                            .reparent(scCompat, null)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionReparent_childOfSibling() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+                        val scCompat2 = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.BLUE
+                            )
+                        assertNotNull(buffer)
+
+                        val buffer2 =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.GREEN
+                            )
+                        assertNotNull(buffer2)
+
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer)
+                            .setBuffer(scCompat2, buffer2)
+                            .setVisibility(scCompat, true)
+                            .setVisibility(scCompat2, true)
+                            .reparent(scCompat, scCompat2)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testExtractSyncFenceFd() {
+        val fileDescriptor = 7
+        val syncFence = SyncFence(7)
+        assertEquals(fileDescriptor, JniBindings.nExtractFenceFd(syncFence))
+    }
+
+    @Test
+    fun testTransactionSetBuffer_nullCallback() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.BLUE
+                            )
+                        assertNotNull(buffer)
+
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(
+                                scCompat,
+                                true
+                            ).commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetBuffer_singleReleaseCallback() {
+        val releaseLatch = CountDownLatch(1)
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        val buffer =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.GREEN
+                            )
+                        assertNotNull(buffer)
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer2 =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.BLUE
+                            )
+                        assertNotNull(buffer2)
+
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer) {
+                                releaseLatch.countDown()
+                            }
+                            .setVisibility(scCompat, true)
+                            .commit()
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer2)
+                            .setVisibility(scCompat, true)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assertTrue(releaseLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetBuffer_multipleReleaseCallbacksAndOverwrite() {
+        val releaseLatch = CountDownLatch(1)
+        val releaseLatch2 = CountDownLatch(1)
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        val buffer =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.GREEN
+                            )
+                        assertNotNull(buffer)
+
+                        val buffer2 =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.GREEN
+                            )
+                        assertNotNull(buffer2)
+
+                        val buffer3 =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.BLUE
+                            )
+                        assertNotNull(buffer3)
+
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer) {
+                                releaseLatch.countDown()
+                            }
+                            .setBuffer(scCompat, buffer2) {
+                                releaseLatch2.countDown()
+                            }
+                            .setVisibility(
+                                scCompat,
+                                true
+                            ).commit()
+
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer3)
+                            .setVisibility(scCompat, true)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assertTrue(releaseLatch.await(3000, TimeUnit.MILLISECONDS))
+            assertTrue(releaseLatch2.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetBuffer_withSyncFence() {
+        val releaseLatch = CountDownLatch(1)
+        val egl = createAndSetupEGLManager(EGLSpec.V14)
+        if (egl.supportsNativeAndroidFence()) {
+            val syncFenceCompat = SyncFenceCompat.createNativeSyncFence(egl.eglSpec)
+            val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+                .moveToState(
+                    Lifecycle.State.CREATED
+                ).onActivity {
+                    val callback = object : SurfaceHolderCallback() {
+                        override fun surfaceCreated(sh: SurfaceHolder) {
+                            val scCompat = SurfaceControlCompat
+                                .Builder()
+                                .setParent(it.getSurfaceView())
+                                .setName("SurfaceControlCompatTest")
+                                .build()
+
+                            val buffer =
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.GREEN
+                                )
+                            assertNotNull(buffer)
+
+                            // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                            val buffer2 =
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            assertNotNull(buffer2)
+
+                            SurfaceControlCompat.Transaction()
+                                .setBuffer(
+                                    scCompat,
+                                    buffer,
+                                    syncFenceCompat,
+                                ) {
+                                    releaseLatch.countDown()
+                                }
+                                .setVisibility(scCompat, true)
+                                .commit()
+                            SurfaceControlCompat.Transaction()
+                                .setBuffer(scCompat, buffer2)
+                                .setVisibility(scCompat, true)
+                                .commit()
+                        }
+                    }
+
+                    it.addSurface(it.mSurfaceView, callback)
+                }
+
+            scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+                assertTrue(releaseLatch.await(3000, TimeUnit.MILLISECONDS))
+                assertTrue(syncFenceCompat.await(3000))
+                SurfaceControlUtils.validateOutput { bitmap ->
+                    val coord = intArrayOf(0, 0)
+                    it.mSurfaceView.getLocationOnScreen(coord)
+                    Color.RED == bitmap.getPixel(coord[0], coord[1])
+                }
+
+                releaseEGLManager(egl)
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetVisibility_show() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.BLUE
+                            )
+                        assertNotNull(buffer)
+
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(
+                                scCompat,
+                                true
+                            ).commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetVisibility_hide() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.BLUE
+                            )
+                        assertNotNull(buffer)
+
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(
+                                scCompat,
+                                false
+                            ).commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetLayer_zero() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat1 = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+                        val scCompat2 = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        SurfaceControlCompat.Transaction()
+                            .setLayer(scCompat1, 1)
+                            .setBuffer(
+                                scCompat1,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            )
+                            .setVisibility(scCompat1, true)
+                            .setLayer(scCompat2, 0)
+                            .setBuffer(
+                                scCompat2,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.GREEN
+                                )
+                            )
+                            .setVisibility(scCompat2, true)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetLayer_positive() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat1 = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+                        val scCompat2 = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        SurfaceControlCompat.Transaction()
+                            .setLayer(scCompat1, 1)
+                            .setBuffer(
+                                scCompat1,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.GREEN
+                                )
+                            )
+                            .setVisibility(scCompat1, true)
+                            .setLayer(scCompat2, 24)
+                            .setBuffer(
+                                scCompat2,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            )
+                            .setVisibility(scCompat2, true)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetLayer_negative() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat1 = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+                        val scCompat2 = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        SurfaceControlCompat.Transaction()
+                            .setLayer(scCompat1, 1)
+                            .setBuffer(
+                                scCompat1,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            )
+                            .setVisibility(scCompat1, true)
+                            .setLayer(scCompat2, -7)
+                            .setBuffer(
+                                scCompat2,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.GREEN
+                                )
+                            )
+                            .setVisibility(scCompat2, true)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetDamageRegion_all() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        SurfaceControlCompat.Transaction()
+                            .setDamageRegion(
+                                scCompat,
+                                Region(0, 0, it.DEFAULT_WIDTH, it.DEFAULT_HEIGHT)
+                            )
+                            .setBuffer(
+                                scCompat,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            )
+                            .setVisibility(scCompat, true)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetDamageRegion_null() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        SurfaceControlCompat.Transaction()
+                            .setDamageRegion(
+                                scCompat,
+                                null
+                            )
+                            .setBuffer(
+                                scCompat,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            )
+                            .setVisibility(scCompat, true)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetBufferTransparency_opaque() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer = SurfaceControlUtils.getSolidBuffer(
+                            it.DEFAULT_WIDTH,
+                            it.DEFAULT_HEIGHT,
+                            Color.BLUE
+                        )
+
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(scCompat, true)
+                            .setOpaque(
+                                scCompat,
+                                true
+                            )
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetAlpha_0_0() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer = SurfaceControlUtils.getSolidBuffer(
+                            it.DEFAULT_WIDTH,
+                            it.DEFAULT_HEIGHT,
+                            Color.BLUE
+                        )
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer)
+                            .setOpaque(
+                                scCompat,
+                                false
+                            )
+                            .setAlpha(scCompat, 0.0f)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetAlpha_0_5() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer = SurfaceControlUtils.getSolidBuffer(
+                            it.DEFAULT_WIDTH,
+                            it.DEFAULT_HEIGHT,
+                            Color.BLUE
+                        )
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(scCompat, true)
+                            .setAlpha(scCompat, 0.5f)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+
+                val fConnector: ColorSpace.Connector = ColorSpace.connect(
+                    ColorSpace.get(ColorSpace.Named.SRGB),
+                    bitmap.colorSpace!!
+                )
+
+                val red = fConnector.transform(1.0f, 0.0f, 0.0f)
+                val black = fConnector.transform(0.0f, 0.0f, 0.0f)
+                val expectedResult = Color.valueOf(red[0], red[1], red[2], 0.5f)
+                    .compositeOver(Color.valueOf(black[0], black[1], black[2], 1.0f))
+
+                (Math.abs(
+                    expectedResult.red() - bitmap.getColor(coord[0], coord[1]).red()
+                ) < 2.5e-3f) &&
+                    (Math.abs(
+                        expectedResult.green() - bitmap.getColor(coord[0], coord[1]).green()
+                    ) < 2.5e-3f) &&
+                    (Math.abs(
+                        expectedResult.blue() - bitmap.getColor(coord[0], coord[1]).blue()
+                    ) < 2.5e-3f)
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetAlpha_1_0() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer = SurfaceControlUtils.getSolidBuffer(
+                            it.DEFAULT_WIDTH,
+                            it.DEFAULT_HEIGHT,
+                            Color.BLUE
+                        )
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(scCompat, true)
+                            .setAlpha(scCompat, 1.0f)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+    @Test
+    fun testSurfaceTransactionCommitOnDraw() {
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlCompat
+                            .Builder()
+                            .setParent(it.getSurfaceView())
+                            .setName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer = SurfaceControlUtils.getSolidBuffer(
+                            it.DEFAULT_WIDTH,
+                            it.DEFAULT_HEIGHT,
+                            Color.BLUE
+                        )
+
+                        SurfaceControlCompat.Transaction()
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(scCompat, true)
+                            .setAlpha(scCompat, 1.0f)
+                            .commitTransactionOnDraw(it.mSurfaceView.rootSurfaceControl!!)
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    fun Color.compositeOver(background: Color): Color {
+        val fg = this.convert(background.colorSpace)
+
+        val bgA = background.alpha()
+        val fgA = fg.alpha()
+        val a = fgA + (bgA * (1f - fgA))
+
+        val r = compositeComponent(fg.red(), background.red(), fgA, bgA, a)
+        val g = compositeComponent(fg.green(), background.green(), fgA, bgA, a)
+        val b = compositeComponent(fg.blue(), background.blue(), fgA, bgA, a)
+
+        return Color.valueOf(r, g, b, a, background.colorSpace)
+    }
+
+    @Suppress("NOTHING_TO_INLINE")
+    private inline fun compositeComponent(
+        fgC: Float,
+        bgC: Float,
+        fgA: Float,
+        bgA: Float,
+        a: Float
+    ) = if (a == 0f) 0f else ((fgC * fgA) + ((bgC * bgA) * (1f - fgA))) / a
+
+    // Helper method to create and initialize an EGLManager
+    fun createAndSetupEGLManager(eglSpec: EGLSpec = EGLSpec.V14): EGLManager {
+        val egl = EGLManager(eglSpec)
+        assertEquals(EGLVersion.Unknown, egl.eglVersion)
+        assertEquals(EGL14.EGL_NO_CONTEXT, egl.eglContext)
+
+        egl.initialize()
+
+        val config = egl.loadConfig(EGLConfigAttributes.RGBA_8888)
+        if (config == null) {
+            fail("Config 888 should be supported")
+        }
+
+        egl.createContext(config!!)
+        return egl
+    }
+
+    // Helper method to release EGLManager
+    fun releaseEGLManager(egl: EGLManager) {
+        egl.release()
+        assertEquals(EGLVersion.Unknown, egl.eglVersion)
+        assertEquals(EGL14.EGL_NO_CONTEXT, egl.eglContext)
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlUtils.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlUtils.kt
new file mode 100644
index 0000000..fd29ac8
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlUtils.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2022 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.graphics.surface
+
+import android.app.Instrumentation
+import android.graphics.Bitmap
+import android.hardware.HardwareBuffer
+import android.os.SystemClock
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import org.junit.Assert
+
+@SdkSuppress(minSdkVersion = 29)
+internal class SurfaceControlUtils {
+    companion object {
+        fun validateOutput(block: (bitmap: Bitmap) -> Boolean) {
+            var sleepDurationMillis = 1000L
+            var success = false
+            for (i in 0..3) {
+                val bitmap = getScreenshot(InstrumentationRegistry.getInstrumentation())
+                success = block(bitmap)
+                if (!success) {
+                    SystemClock.sleep(sleepDurationMillis)
+                    sleepDurationMillis *= 2
+                } else {
+                    break
+                }
+            }
+            Assert.assertTrue(success)
+        }
+
+        fun getScreenshot(instrumentation: Instrumentation): Bitmap {
+            val uiAutomation = instrumentation.uiAutomation
+            val screenshot = uiAutomation.takeScreenshot()
+            return screenshot
+        }
+
+        fun getSolidBuffer(width: Int, height: Int, color: Int): HardwareBuffer {
+            return nGetSolidBuffer(width, height, color)
+        }
+
+        private external fun nGetSolidBuffer(width: Int, height: Int, color: Int): HardwareBuffer
+
+        init {
+            System.loadLibrary("sc-compat-test")
+        }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest.kt
new file mode 100644
index 0000000..2bafbee
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest.kt
@@ -0,0 +1,1041 @@
+/*
+ * 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.graphics.surface
+
+import android.graphics.Color
+import android.graphics.ColorSpace
+import android.graphics.Region
+import android.os.Build
+import android.os.SystemClock
+import android.view.Surface
+import android.view.SurfaceControl
+import android.view.SurfaceHolder
+import androidx.hardware.SyncFence
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executor
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+@SdkSuppress(minSdkVersion = 29)
+class SurfaceControlWrapperTest {
+    var executor: Executor? = null
+
+    @Before
+    fun setup() {
+        executor = Executors.newSingleThreadExecutor(Executors.defaultThreadFactory())
+    }
+
+    private abstract class SurfaceHolderCallback : SurfaceHolder.Callback {
+        override fun surfaceChanged(p0: SurfaceHolder, p1: Int, p2: Int, p3: Int) {
+        }
+
+        override fun surfaceDestroyed(p0: SurfaceHolder) {
+        }
+    }
+
+    @Test
+    fun testCreateFromWindow() {
+        var surfaceControl = SurfaceControl.Builder()
+            .setName("SurfaceControlCompact_createFromWindow")
+            .build()
+        try {
+            SurfaceControlWrapper.Builder()
+                .setParent(Surface(surfaceControl))
+                .setDebugName("SurfaceControlWrapperTest")
+                .build()
+        } catch (e: IllegalArgumentException) {
+            fail()
+        }
+    }
+
+    @Test
+    fun testSurfaceControlWrapperBuilder_surfaceParent() {
+        val surfaceControl = SurfaceControl.Builder()
+            .setName("SurfaceControlCompact_createFromWindow")
+            .build()
+        try {
+            SurfaceControlWrapper.Builder()
+                .setParent(Surface(surfaceControl))
+                .setDebugName("SurfaceControlWrapperTest")
+                .build()
+        } catch (e: IllegalArgumentException) {
+            fail()
+        }
+    }
+
+    @Test
+    fun testSurfaceTransactionCreate() {
+        try {
+            SurfaceControlWrapper.Transaction()
+        } catch (e: java.lang.IllegalArgumentException) {
+            fail()
+        }
+    }
+
+    class TransactionOnCompleteListener : SurfaceControlCompat.TransactionCompletedListener {
+        var mCallbackTime = -1L
+        var mLatch = CountDownLatch(1)
+
+        override fun onTransactionCompleted() {
+            mCallbackTime = SystemClock.elapsedRealtime()
+            mLatch.countDown()
+        }
+    }
+
+    class TransactionOnCommitListener : SurfaceControlCompat.TransactionCommittedListener {
+        var mCallbackTime = -1L
+        var mLatch = CountDownLatch(1)
+
+        override fun onTransactionCommitted() {
+            mCallbackTime = SystemClock.elapsedRealtime()
+            mLatch.countDown()
+        }
+    }
+
+    @Test
+    fun testSurfaceTransactionOnCompleteCallback() {
+        val listener = TransactionOnCompleteListener()
+
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(Lifecycle.State.CREATED)
+
+        try {
+            scenario.onActivity {
+                SurfaceControlWrapper.Transaction()
+                    .addTransactionCompletedListener(listener)
+                    .commit()
+            }
+
+            scenario.moveToState(Lifecycle.State.RESUMED)
+
+            listener.mLatch.await(3, TimeUnit.SECONDS)
+            assertEquals(0, listener.mLatch.count)
+            assertTrue(listener.mCallbackTime > 0)
+        } finally {
+            // ensure activity is destroyed after any failures
+            scenario.moveToState(Lifecycle.State.DESTROYED)
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+    @Test
+    fun testSurfaceTransactionOnCommitCallback() {
+        val listener = TransactionOnCommitListener()
+
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(Lifecycle.State.CREATED)
+
+        try {
+            scenario.onActivity {
+                SurfaceControlWrapper.Transaction()
+                    .addTransactionCommittedListener(executor!!, listener)
+                    .commit()
+            }
+            scenario.moveToState(Lifecycle.State.RESUMED)
+
+            listener.mLatch.await(3, TimeUnit.SECONDS)
+            assertEquals(0, listener.mLatch.count)
+            assertTrue(listener.mCallbackTime > 0)
+        } finally {
+            // ensure activity is destroyed after any failures
+            scenario.moveToState(Lifecycle.State.DESTROYED)
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+    @Test
+    fun testSurfaceTransactionOnCommitCallback_multiple() {
+        val listener = TransactionOnCommitListener()
+        val listener2 = TransactionOnCommitListener()
+
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(Lifecycle.State.CREATED)
+
+        try {
+            scenario.onActivity {
+                SurfaceControlWrapper.Transaction()
+                    .addTransactionCommittedListener(executor!!, listener)
+                    .addTransactionCommittedListener(executor!!, listener2)
+                    .commit()
+            }
+
+            scenario.moveToState(Lifecycle.State.RESUMED)
+
+            listener.mLatch.await(3, TimeUnit.SECONDS)
+            listener2.mLatch.await(3, TimeUnit.SECONDS)
+
+            assertEquals(0, listener.mLatch.count)
+            assertEquals(0, listener2.mLatch.count)
+
+            assertTrue(listener.mCallbackTime > 0)
+            assertTrue(listener2.mCallbackTime > 0)
+        } finally {
+            // ensure activity is destroyed after any failures
+            scenario.moveToState(Lifecycle.State.DESTROYED)
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+    @Test
+    fun testSurfaceTransactionOnCommitCallbackAndOnCompleteCallback() {
+        val listener1 = TransactionOnCommitListener()
+        val listener2 = TransactionOnCompleteListener()
+
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(Lifecycle.State.CREATED)
+
+        try {
+            scenario.onActivity {
+                SurfaceControlWrapper.Transaction()
+                    .addTransactionCommittedListener(executor!!, listener1)
+                    .addTransactionCompletedListener(listener2)
+                    .commit()
+            }
+
+            scenario.moveToState(Lifecycle.State.RESUMED)
+
+            listener1.mLatch.await(3, TimeUnit.SECONDS)
+            listener2.mLatch.await(3, TimeUnit.SECONDS)
+
+            assertEquals(0, listener1.mLatch.count)
+            assertEquals(0, listener2.mLatch.count)
+            assertTrue(listener1.mCallbackTime > 0)
+            assertTrue(listener2.mCallbackTime > 0)
+        } finally {
+            // ensure activity is destroyed after any failures
+            scenario.moveToState(Lifecycle.State.DESTROYED)
+        }
+    }
+
+    @Test
+    fun testSurfaceControlIsValid_valid() {
+        var surfaceControl = SurfaceControl.Builder()
+            .setName("SurfaceControlCompact_createFromWindow")
+            .build()
+        var scCompat: SurfaceControlWrapper? = null
+        try {
+            scCompat = SurfaceControlWrapper.Builder()
+                .setParent(Surface(surfaceControl))
+                .setDebugName("SurfaceControlWrapperTest")
+                .build()
+        } catch (e: IllegalArgumentException) {
+            fail()
+        }
+
+        assertTrue(scCompat!!.isValid())
+    }
+
+    @Test
+    fun testSurfaceControlIsValid_validNotValid() {
+        var surfaceControl = SurfaceControl.Builder()
+            .setName("SurfaceControlCompact_createFromWindow")
+            .build()
+        var scCompat: SurfaceControlWrapper? = null
+
+        try {
+            scCompat = SurfaceControlWrapper.Builder()
+                .setParent(Surface(surfaceControl))
+                .setDebugName("SurfaceControlWrapperTest")
+                .build()
+        } catch (e: IllegalArgumentException) {
+            fail()
+        }
+
+        assertTrue(scCompat!!.isValid())
+        scCompat.release()
+        assertFalse(scCompat.isValid())
+    }
+
+    @Test
+    fun testSurfaceControlIsValid_multipleRelease() {
+        var surfaceControl = SurfaceControl.Builder()
+            .setName("SurfaceControlCompact_createFromWindow")
+            .build()
+        var scCompat: SurfaceControlWrapper? = null
+
+        try {
+            scCompat = SurfaceControlWrapper.Builder()
+                .setParent(Surface(surfaceControl))
+                .setDebugName("SurfaceControlWrapperTest")
+                .build()
+        } catch (e: IllegalArgumentException) {
+            fail()
+        }
+
+        assertTrue(scCompat!!.isValid())
+        scCompat.release()
+        scCompat.release()
+        assertFalse(scCompat.isValid())
+    }
+
+    @Test
+    fun testTransactionReparent_null() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.BLUE
+                            )
+                        assertNotNull(buffer)
+
+                        SurfaceControlWrapper.Transaction()
+                            .setBuffer(scCompat, buffer)
+                            .reparent(scCompat, null)
+                            .commit()
+
+                        // Trying to set a callback with a transaction of a null reparent doesn't
+                        // get called, so lets set a listener for a 2nd transaction instead. This
+                        // should be placed in the queue where this will be executed after the
+                        // reparent transaction
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assertTrue(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionReparent_childOfSibling() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+                        val scCompat2 = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapper")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.BLUE
+                            )
+                        assertNotNull(buffer)
+
+                        val buffer2 =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.GREEN
+                            )
+                        assertNotNull(buffer2)
+
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setBuffer(scCompat, buffer)
+                            .setBuffer(scCompat2, buffer2)
+                            .reparent(scCompat, scCompat2)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assertTrue(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testExtractSyncFenceFd() {
+        val fileDescriptor = 7
+        val syncFence = SyncFence(7)
+        assertEquals(fileDescriptor, JniBindings.nExtractFenceFd(syncFence))
+    }
+
+    @Test
+    fun testTransactionSetVisibility_show() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.BLUE
+                            )
+                        assertNotNull(buffer)
+
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(
+                                scCompat,
+                                true
+                            ).commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assertTrue(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetVisibility_hide() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer =
+                            SurfaceControlUtils.getSolidBuffer(
+                                it.DEFAULT_WIDTH,
+                                it.DEFAULT_HEIGHT,
+                                Color.BLUE
+                            )
+                        assertNotNull(buffer)
+
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(
+                                scCompat,
+                                false
+                            ).commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assertTrue(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetLayer_zero() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat1 = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+                        val scCompat2 = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setLayer(scCompat1, 1)
+                            .setBuffer(
+                                scCompat1,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            )
+                            .setLayer(scCompat2, 0)
+                            .setBuffer(
+                                scCompat2,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.GREEN
+                                )
+                            )
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetLayer_positive() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat1 = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+                        val scCompat2 = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setLayer(scCompat1, 1)
+                            .setBuffer(
+                                scCompat1,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.GREEN
+                                )
+                            )
+                            .setLayer(scCompat2, 24)
+                            .setBuffer(
+                                scCompat2,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            )
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetLayer_negative() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat1 = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+                        val scCompat2 = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setLayer(scCompat1, 1)
+                            .setBuffer(
+                                scCompat1,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            )
+                            .setLayer(scCompat2, -7)
+                            .setBuffer(
+                                scCompat2,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.GREEN
+                                )
+                            )
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetDamageRegion_all() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setDamageRegion(
+                                scCompat,
+                                Region(0, 0, it.DEFAULT_WIDTH, it.DEFAULT_HEIGHT)
+                            )
+                            .setBuffer(
+                                scCompat,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            )
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetDamageRegion_null() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setDamageRegion(
+                                scCompat,
+                                null
+                            )
+                            .setBuffer(
+                                scCompat,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            )
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetDesiredPresentTime_now() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setBuffer(
+                                scCompat,
+                                SurfaceControlUtils.getSolidBuffer(
+                                    it.DEFAULT_WIDTH,
+                                    it.DEFAULT_HEIGHT,
+                                    Color.BLUE
+                                )
+                            )
+                            .setDesiredPresentTime(0)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetBufferTransparency_opaque() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer = SurfaceControlUtils.getSolidBuffer(
+                            it.DEFAULT_WIDTH,
+                            it.DEFAULT_HEIGHT,
+                            Color.BLUE
+                        )
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setBuffer(scCompat, buffer)
+                            .setOpaque(
+                                scCompat,
+                                true
+                            )
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetAlpha_0_0() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer = SurfaceControlUtils.getSolidBuffer(
+                            it.DEFAULT_WIDTH,
+                            it.DEFAULT_HEIGHT,
+                            Color.BLUE
+                        )
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setBuffer(scCompat, buffer)
+                            .setOpaque(
+                                scCompat,
+                                false
+                            )
+                            .setAlpha(scCompat, 0.0f)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetAlpha_0_5() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer = SurfaceControlUtils.getSolidBuffer(
+                            it.DEFAULT_WIDTH,
+                            it.DEFAULT_HEIGHT,
+                            Color.BLUE
+                        )
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setBuffer(scCompat, buffer)
+                            .setAlpha(scCompat, 0.5f)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+
+                val fConnector: ColorSpace.Connector = ColorSpace.connect(
+                    ColorSpace.get(ColorSpace.Named.SRGB),
+                    bitmap.colorSpace!!
+                )
+
+                val red = fConnector.transform(1.0f, 0.0f, 0.0f)
+                val black = fConnector.transform(0.0f, 0.0f, 0.0f)
+                val expectedResult = Color.valueOf(red[0], red[1], red[2], 0.5f)
+                    .compositeOver(Color.valueOf(black[0], black[1], black[2], 1.0f))
+
+                (Math.abs(
+                    expectedResult.red() - bitmap.getColor(coord[0], coord[1]).red()
+                ) < 2.5e-3f) &&
+                    (Math.abs(
+                        expectedResult.green() - bitmap.getColor(coord[0], coord[1]).green()
+                    ) < 2.5e-3f) &&
+                    (Math.abs(
+                        expectedResult.blue() - bitmap.getColor(coord[0], coord[1]).blue()
+                    ) < 2.5e-3f)
+            }
+        }
+    }
+
+    @Test
+    fun testTransactionSetAlpha_1_0() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlWrapperTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer = SurfaceControlUtils.getSolidBuffer(
+                            it.DEFAULT_WIDTH,
+                            it.DEFAULT_HEIGHT,
+                            Color.BLUE
+                        )
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setBuffer(scCompat, buffer)
+                            .setAlpha(scCompat, 1.0f)
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                Color.RED == bitmap.getPixel(coord[0], coord[1])
+            }
+        }
+    }
+
+    fun Color.compositeOver(background: Color): Color {
+        val fg = this.convert(background.colorSpace)
+
+        val bgA = background.alpha()
+        val fgA = fg.alpha()
+        val a = fgA + (bgA * (1f - fgA))
+
+        val r = compositeComponent(fg.red(), background.red(), fgA, bgA, a)
+        val g = compositeComponent(fg.green(), background.green(), fgA, bgA, a)
+        val b = compositeComponent(fg.blue(), background.blue(), fgA, bgA, a)
+
+        return Color.valueOf(r, g, b, a, background.colorSpace)
+    }
+
+    @Suppress("NOTHING_TO_INLINE")
+    private inline fun compositeComponent(
+        fgC: Float,
+        bgC: Float,
+        fgA: Float,
+        bgA: Float,
+        a: Float
+    ) = if (a == 0f) 0f else ((fgC * fgA) + ((bgC * bgA) * (1f - fgA))) / a
+}
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTestActivity.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTestActivity.kt
new file mode 100644
index 0000000..962cce7
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTestActivity.kt
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2022 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.graphics.surface
+
+import android.app.Activity
+import android.os.Bundle
+import android.view.Gravity
+import android.view.SurfaceHolder
+import android.view.SurfaceView
+import android.widget.FrameLayout
+
+class SurfaceControlWrapperTestActivity : Activity() {
+    lateinit var mSurfaceView: SurfaceView
+    lateinit var mFrameLayout: FrameLayout
+    lateinit var mLayoutParams: FrameLayout.LayoutParams
+    var DEFAULT_WIDTH = 100
+    var DEFAULT_HEIGHT = 100
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+        mLayoutParams = FrameLayout.LayoutParams(
+            DEFAULT_WIDTH, DEFAULT_HEIGHT,
+            Gravity.LEFT or Gravity.TOP
+        )
+        mLayoutParams.topMargin = 100
+        mLayoutParams.leftMargin = 100
+
+        mFrameLayout = FrameLayout(this)
+        mSurfaceView = SurfaceView(this)
+        mSurfaceView.holder.setFixedSize(DEFAULT_WIDTH, DEFAULT_HEIGHT)
+        setContentView(mFrameLayout)
+    }
+
+    fun addSurface(surfaceView: SurfaceView, callback: SurfaceHolder.Callback) {
+        surfaceView.holder.addCallback(callback)
+        mFrameLayout.addView(surfaceView, mLayoutParams)
+    }
+
+    fun getSurfaceView(): SurfaceView {
+        return mSurfaceView
+    }
+}
diff --git a/graphics/graphics-core/src/main/androidx/graphics/androidx-graphics-graphics-core-documentation.md b/graphics/graphics-core/src/main/androidx/graphics/androidx-graphics-graphics-core-documentation.md
new file mode 100644
index 0000000..ffaf9e0
--- /dev/null
+++ b/graphics/graphics-core/src/main/androidx/graphics/androidx-graphics-graphics-core-documentation.md
@@ -0,0 +1,5 @@
+# Module root
+
+AndroidX Graphics Core
+
+# Support classes for building applications that leverage more advanced graphics facilities
diff --git a/graphics/graphics-core/src/main/cpp/CMakeLists.txt b/graphics/graphics-core/src/main/cpp/CMakeLists.txt
new file mode 100644
index 0000000..b1fb8f4
--- /dev/null
+++ b/graphics/graphics-core/src/main/cpp/CMakeLists.txt
@@ -0,0 +1,75 @@
+
+# For more information about using CMake with Android Studio, read the
+# documentation: https://d.android.com/studio/projects/add-native-code.html
+
+# Sets the minimum version of CMake required to build the native library.
+
+cmake_minimum_required(VERSION 3.18.1)
+
+# Declares and names the project.
+
+project("graphics-core")
+
+add_definitions(-D__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__)
+
+# Creates and names a library, sets it as either STATIC
+# or SHARED, and provides the relative paths to its source code.
+# You can define multiple libraries, and CMake builds them for you.
+# Gradle automatically packages shared libraries with your APK.
+
+add_library( # Sets the name of the library.
+             graphics-core
+
+             # Sets the library as a shared library.
+             SHARED
+
+             # Provides a relative path to your source file(s).
+             graphics-core.cpp
+             egl_utils.cpp)
+
+add_library(
+            sync-fence
+            SHARED
+            sync_fence.cpp)
+
+add_library(
+        sc-compat-test
+        SHARED
+        sc_test_utils.cpp)
+
+# Searches for a specified prebuilt library and stores the path as a
+# variable. Because CMake includes system libraries in the search path by
+# default, you only need to specify the name of the public NDK library
+# you want to add. CMake verifies that the library exists before
+# completing its build.
+
+find_library( # Sets the name of the path variable.
+              log-lib
+
+              # Specifies the name of the NDK library that
+              # you want CMake to locate.
+              log )
+
+# Specifies libraries CMake should link to your target library. You
+# can link multiple libraries, such as libraries you define in this
+# build script, prebuilt third-party libraries, or system libraries.
+
+target_link_libraries( # Specifies the target library.
+                       graphics-core
+
+                       # Links the target library to the log library
+                       # included in the NDK.
+                       ${log-lib}
+                       EGL
+                       GLESv2
+                       android)
+
+target_link_libraries(
+                    sync-fence
+                    ${log-lib}
+                    android)
+
+target_link_libraries(
+        sc-compat-test
+        ${log-lib}
+        android)
diff --git a/graphics/graphics-core/src/main/cpp/egl_utils.cpp b/graphics/graphics-core/src/main/cpp/egl_utils.cpp
new file mode 100644
index 0000000..e04afa4
--- /dev/null
+++ b/graphics/graphics-core/src/main/cpp/egl_utils.cpp
@@ -0,0 +1,555 @@
+/*
+ * Copyright 2022 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.
+ */
+#include <jni.h>
+#include <string>
+#include <poll.h>
+#include <unistd.h>
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <android/log.h>
+#include <EGL/eglplatform.h>
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+#include <android/sync.h>
+#include <android/hardware_buffer_jni.h>
+#include <mutex>
+
+#define EGL_UTILS "EglUtils"
+#define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR, EGL_UTILS, __VA_ARGS__)
+
+/**
+ * Cached reference to the eglGetNativeClientBufferANDROID egl extension method
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC eglGetNativeClientBufferANDROID = nullptr;
+
+/**
+ * Cached reference to the eglImageTargetTexture2DOES egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES = nullptr;
+
+/**
+ * Cached reference to the eglCreateImageKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR = nullptr;
+
+/**
+ * Cached reference to the eglDestroyImageKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR = nullptr;
+
+/**
+ * Cached reference to the eglCreateSyncKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLCREATESYNCKHRPROC eglCreateSyncKHR = nullptr;
+
+/**
+ * Cached reference to the eglGetSyncAttribKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLGETSYNCATTRIBKHRPROC eglGetSyncAttribKHR = nullptr;
+
+/**
+ * Cached reference to the eglClientWaitSyncKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLCLIENTWAITSYNCKHRPROC eglClientWaitSyncKHR = nullptr;
+
+/**
+ * Cached reference to the eglDestroySyncKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLDESTROYSYNCKHRPROC eglDestroySyncKHR = nullptr;
+
+/**
+ * Cached reference to the eglDupNativeFenceFDANDROID egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLDUPNATIVEFENCEFDANDROIDPROC eglDupNativeFenceFDANDROID = nullptr;
+
+/**
+ * Helper method for querying the EGL extension method eglGetNativeClientBufferANDROID.
+ * This is used in initial invocations of the corresponding JNI method to obtain
+ * an EGLClientBuffer instance from a HardwareBuffer as well as for testing purposes
+ * to guarantee that Android devices that advertise support for the corresponding
+ * extensions actually expose this API.
+ */
+static PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC obtainEglGetNativeClientBufferANDROID() {
+    return reinterpret_cast<PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC>(
+            eglGetProcAddress("eglGetNativeClientBufferANDROID"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglCreateImageKHR.
+ * This is used in initial invocations of the corresponding JNI method to obtain
+ * an EGLImage from an EGLClientBuffer as well as for testing purposes
+ * to guarantee that Android devices that advertise support for the corresponding
+ * extensions actually expose this API.
+ */
+static PFNEGLCREATEIMAGEKHRPROC obtainEglCreateImageKHR() {
+    return reinterpret_cast<PFNEGLCREATEIMAGEKHRPROC>(
+            eglGetProcAddress("eglCreateImageKHR"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglDestroyImageKHR.
+ * This is used in initial invocations of the corresponding JNI method to destroy
+ * an EGLImage as well as for testing purposes to guarantee that Android devices
+ * that advertise support for the corresponding extensions actually expose this API.
+ */
+static PFNEGLDESTROYIMAGEKHRPROC obtainEglDestroyImageKHR() {
+    return reinterpret_cast<PFNEGLDESTROYIMAGEKHRPROC>(
+            eglGetProcAddress("eglDestroyImageKHR"));
+}
+
+/**
+ * Helper method for querying the EGL extension method glImageTargetTexture2DOES.
+ * This is used in initial invocations of the corresponding JNI method to load
+ * an EGLImage instance into a caller defined GL Texture as well as for testing
+ * purposes to guarantee that Android devices that advertise support for the
+ * corresponding extensions actually expose this API.
+ */
+static PFNGLEGLIMAGETARGETTEXTURE2DOESPROC obtainGlImageTargetTexture2DOES() {
+    return reinterpret_cast<PFNGLEGLIMAGETARGETTEXTURE2DOESPROC>(
+            eglGetProcAddress("glEGLImageTargetTexture2DOES"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglDupNativeFenceFDANDROID.
+ * This is used in initial invocations of the corresponding JNI method to to create EGL  fence sync
+ * objects that are associated with a native synchronization fence object that are referenced using
+ * a file descriptor. Additionally this is used for testing purposes to guarantee that Android
+ * devices that advertise support for the corresponding extensions actually expose this API.
+ */
+static PFNEGLDUPNATIVEFENCEFDANDROIDPROC obtainEglDupNativeFenceFDANDROID() {
+    return reinterpret_cast<PFNEGLDUPNATIVEFENCEFDANDROIDPROC>(
+            eglGetProcAddress("eglDupNativeFenceFDANDROID"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglCreateSyncKHR.
+ * This is used in initial invocations of the corresponding JNI method to to create EGL fence sync
+ * object. Additionally this is used for testing purposes to guarantee that Android
+ * devices that advertise support for the corresponding extensions actually expose this API.
+ */
+static PFNEGLCREATESYNCKHRPROC obtainEglCreateSyncKHR() {
+    return reinterpret_cast<PFNEGLCREATESYNCKHRPROC>(
+            eglGetProcAddress("eglCreateSyncKHR"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglGetSyncAttribKHR.
+ * This is used in initial invocations of the corresponding JNI method to query
+ * properties of an EGLSync object returned by eglCreateSyncKHR as well as for
+ * testing purposes to guarantee that Android devices that advertise support for
+ * the corresponding extensions actually expose this API.
+ */
+static PFNEGLGETSYNCATTRIBKHRPROC obtainEglGetSyncAttribKHR() {
+    return reinterpret_cast<PFNEGLGETSYNCATTRIBKHRPROC>(
+            eglGetProcAddress("eglGetSyncAttribKHR"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglClientWaitSyncKHR.
+ * This is used in initial invocations of the corresponding JNI method to block
+ * the current thread until the specified sync object is signalled or until a timeout
+ * has passed. Additionally this is used for testing purposes to guarantee that Android devices
+ * that advertise support for the corresponding extensions actually expose this API.
+ */
+static PFNEGLCLIENTWAITSYNCKHRPROC obtainEglClientWaitSyncKHR() {
+    return reinterpret_cast<PFNEGLCLIENTWAITSYNCKHRPROC>(
+            eglGetProcAddress("eglClientWaitSyncKHR"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglDestroySyncKHR.
+ * This is used in initial invocations of the corresponding JNI method to destroy an EGL fence sync
+ * object. Additionally this is used for testing purposes to guarantee that Android devices that
+ * advertise support for corresponding extensions actually expose this API.
+ */
+static PFNEGLDESTROYSYNCKHRPROC obtainEglDestroySyncKHR() {
+    return reinterpret_cast<PFNEGLDESTROYSYNCKHRPROC>(
+            eglGetProcAddress("eglDestroySyncKHR"));
+}
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nCreateImageFromHardwareBuffer(
+        JNIEnv *env, jobject thiz, jlong egl_display_ptr, jobject hardware_buffer) {
+    static std::once_flag eglGetNativeClientBufferANDROIDFlag;
+    static std::once_flag eglCreateImageKHRFlag;
+    std::call_once(eglGetNativeClientBufferANDROIDFlag, [](){
+        eglGetNativeClientBufferANDROID = obtainEglGetNativeClientBufferANDROID();
+    });
+    if (!eglGetNativeClientBufferANDROID) {
+        ALOGE("Unable to resolve eglGetNativeClientBufferANDROID");
+        return 0;
+    }
+
+    std::call_once(eglCreateImageKHRFlag, [](){
+        eglCreateImageKHR = obtainEglCreateImageKHR();
+    });
+    if (!eglCreateImageKHR) {
+        ALOGE("Unable to resolve eglCreateImageKHR");
+        return 0;
+    }
+
+    AHardwareBuffer *buffer =
+            AHardwareBuffer_fromHardwareBuffer(env, hardware_buffer);
+    EGLClientBuffer eglClientBuffer = eglGetNativeClientBufferANDROID(buffer);
+
+    EGLint imageAttrs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};
+    auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+    EGLImage image = eglCreateImageKHR(
+            display,
+            EGL_NO_CONTEXT,
+            EGL_NATIVE_BUFFER_ANDROID,
+            eglClientBuffer,
+            imageAttrs
+    );
+
+    return reinterpret_cast<jlong>(image);
+}
+
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nDestroyImageKHR(
+        JNIEnv *env, jobject thiz, jlong egl_display_ptr, jlong egl_image_ptr) {
+    static std::once_flag eglDestroyImageKHRFlag;
+    std::call_once(eglDestroyImageKHRFlag, [](){
+        eglDestroyImageKHR = obtainEglDestroyImageKHR();
+    });
+    if (!eglDestroyImageKHR) {
+        ALOGE("Unable to resolve eglDestroyImageKHR");
+        return static_cast<jboolean>(false);
+    }
+
+    auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+    auto eglImage = reinterpret_cast<EGLImage>(egl_image_ptr);
+    return static_cast<jboolean>(eglDestroyImageKHR(display, eglImage));
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nImageTargetTexture2DOES(
+        JNIEnv *env, jobject thiz, jint target, jlong egl_image_ptr) {
+    static std::once_flag glEGLImageTargetTexture2DOESFlag;
+    std::call_once(glEGLImageTargetTexture2DOESFlag, [](){
+        glEGLImageTargetTexture2DOES = obtainGlImageTargetTexture2DOES();
+    });
+    if (!glEGLImageTargetTexture2DOES) {
+        ALOGE("Unable to resolve glEGLImageTargetTexture2DOES");
+        return;
+    }
+
+    glEGLImageTargetTexture2DOES(target, reinterpret_cast<EGLImage>(egl_image_ptr));
+}
+
+extern "C"
+JNIEXPORT jint JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nDupNativeFenceFDANDROID(
+        JNIEnv *env, jobject thiz, jlong egl_display_ptr, jlong sync_ptr) {
+    static std::once_flag eglDupNativeFenceFDANDROIDflag;
+    std::call_once(eglDupNativeFenceFDANDROIDflag, [](){
+        eglDupNativeFenceFDANDROID = obtainEglDupNativeFenceFDANDROID();
+    });
+    if (!eglDupNativeFenceFDANDROID) {
+        ALOGE("Unable to resolve eglDupNativeFenceFDAndroid");
+        return EGL_NO_NATIVE_FENCE_FD_ANDROID;
+    }
+
+    auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+    auto sync = reinterpret_cast<EGLSync>(sync_ptr);
+    return (jint)eglDupNativeFenceFDANDROID(display, sync);
+}
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nCreateSyncKHR(
+        JNIEnv *env, jobject thiz, jlong egl_display_ptr, jint type,
+        jintArray attrs) {
+    static std::once_flag eglCreateSyncKHRFlag;
+    std::call_once(eglCreateSyncKHRFlag, [](){
+        eglCreateSyncKHR = obtainEglCreateSyncKHR();
+    });
+    if (!eglCreateSyncKHR) {
+        ALOGE("Unable to resolve eglCreateSyncKHR");
+        return 0;
+    }
+
+    auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+    auto attrib_list = reinterpret_cast<EGLint *>(attrs);
+    return reinterpret_cast<jlong>(eglCreateSyncKHR(display, type, attrib_list));
+}
+
+static jobject createIllegalArgumentException(JNIEnv* env, jstring message) {
+    jclass exceptionClass = env->FindClass("java/lang/IllegalArgumentException");
+    if (exceptionClass != nullptr) {
+        jmethodID init = env->GetMethodID(exceptionClass, "<init>", "(Ljava/lang/String;)V");
+        jobject instance;
+        if (init != nullptr) {
+            instance = env->NewObject(exceptionClass, init, message);
+        } else {
+            ALOGE("Unable to find constructor for IllegalArgumentException");
+            instance = nullptr;
+        }
+        env->DeleteLocalRef(exceptionClass);
+        return instance;
+    } else {
+        ALOGE("Unable to find IllegalArgumentException class");
+        return nullptr;
+    }
+}
+
+static int jniThrowIllegalArgumentException(JNIEnv* env, const char* msg) {
+    jstring message = env->NewStringUTF(msg);
+    if (message != nullptr) {
+        jobject exception = createIllegalArgumentException(env, message);
+        int status = 0;
+        if (exception != nullptr) {
+            if (env->Throw((jthrowable) exception) != JNI_OK) {
+                ALOGE("Unable to throw IllegalArgumentException");
+                status = -1;
+            }
+        } else {
+            status = -1;
+        }
+        env->DeleteLocalRef(message);
+        return status;
+    } else {
+        env->ExceptionClear();
+        return -1;
+    }
+}
+
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nGetSyncAttribKHR(
+        JNIEnv *env,
+        jobject thiz,
+        jlong egl_display_ptr,
+        jlong sync_ptr,
+        jint attrib,
+        jintArray result_ref,
+        jint offset
+        ) {
+    static std::once_flag eglGetSyncAttribKHRFlag;
+    std::call_once(eglGetSyncAttribKHRFlag, []() {
+        eglGetSyncAttribKHR = obtainEglGetSyncAttribKHR();
+    });
+    if (!eglGetSyncAttribKHR) {
+        ALOGE("Unable to resolve eglGetSyncAttribKHR");
+        return static_cast<jboolean>(false);
+    }
+
+    if (!result_ref) {
+        jniThrowIllegalArgumentException(env,
+            "Null pointer received, invalid array provided to store eglGetSyncAttribKHR result");
+        return static_cast<jboolean>(false);
+    }
+
+    if (offset < 0) {
+        jniThrowIllegalArgumentException(env,
+            "Invalid offset provided, must be greater than or equal to 0");
+        return static_cast<jboolean>(false);
+    }
+
+    jint remaining = env->GetArrayLength(result_ref) - offset;
+    if (remaining < 1) {
+        jniThrowIllegalArgumentException(env, "length - offset is out of bounds");
+        return static_cast<jboolean>(false);
+    }
+
+    auto result_base = (GLint *)env->GetIntArrayElements(result_ref, (jboolean *)nullptr);
+    auto result = (GLint *)(result_base + offset);
+    auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+    auto sync = reinterpret_cast<EGLSync>(sync_ptr);
+    auto success = static_cast<jboolean>(eglGetSyncAttribKHR(display, sync, attrib, result));
+    env->ReleaseIntArrayElements(result_ref, (jint*) result_base, 0);
+    return success;
+}
+
+extern "C"
+JNIEXPORT jint JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nClientWaitSyncKHR(
+        JNIEnv *env,
+        jobject thiz,
+        jlong egl_display_ptr,
+        jlong sync_ptr,
+        jint flags,
+        jlong timeout
+) {
+    static std::once_flag eglClientWaitKRFlag;
+    std::call_once(eglClientWaitKRFlag, []() {
+        eglClientWaitSyncKHR = obtainEglClientWaitSyncKHR();
+    });
+
+    auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+    auto sync = reinterpret_cast<EGLSync>(sync_ptr);
+    auto wait_flags = static_cast<EGLint>(flags);
+    auto wait_timeout = static_cast<EGLTimeKHR>(timeout);
+    return static_cast<jint>(eglClientWaitSyncKHR(display, sync, wait_flags, wait_timeout));
+}
+
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nDestroySyncKHR(
+        JNIEnv *env, jobject thiz, jlong egl_display_ptr, jlong sync_ptr) {
+    static std::once_flag eglDestroySyncKHRFlag;
+    std::call_once(eglDestroySyncKHRFlag, [](){
+        eglDestroySyncKHR = obtainEglDestroySyncKHR();
+    });
+    if (!eglDestroySyncKHR) {
+        ALOGE("Unable to resolve eglDestroySyncKHR");
+        return static_cast<jboolean>(false);
+    }
+
+    auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+    auto sync = reinterpret_cast<EGLSync>(sync_ptr);
+    return static_cast<jboolean>(eglDestroySyncKHR(display, sync));
+}
+
+/**
+ * Helper method used in testing to verify if the eglGetNativeClientBufferANDROID method
+ * is actually supported on the Android device.
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglGetNativeClientBufferAndroid(
+        JNIEnv *env, jobject thiz) {
+    return obtainEglGetNativeClientBufferANDROID() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglCreateImageKHR method
+ * is actually supported on the Android device.
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglCreateImageKHR(
+        JNIEnv *env, jobject thiz) {
+    return obtainEglCreateImageKHR() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglDestroyImageKHR method
+ * is actually supported on the Android device.
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglDestroyImageKHR(
+        JNIEnv *env, jobject thiz) {
+    return obtainEglDestroyImageKHR() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the glImageTargetTexture2DOES method
+ * is actually supported on the Android device.
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsGlImageTargetTexture2DOES(
+        JNIEnv *env, jobject thiz) {
+    return obtainGlImageTargetTexture2DOES() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglCreateSyncKHR method is actually supported
+ * on the Android device
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglCreateSyncKHR(
+        JNIEnv *env, jobject thiz) {
+    return obtainEglCreateSyncKHR() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglDestroySyncKHR method is actually supported
+ * on the Android device
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglDestroySyncKHR(
+        JNIEnv *env, jobject thiz) {
+    return obtainEglDestroySyncKHR() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglDupNativeFenceFDAndroid methid is actually
+ * supported on the Android device
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsDupNativeFenceFDANDROID(
+        JNIEnv *env, jobject thiz) {
+    return obtainEglDupNativeFenceFDANDROID() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglGetSyncAttribKHR method is actually supported
+ * on the Android device
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglGetSyncAttribKHR(
+        JNIEnv *env, jobject thiz) {
+    return obtainEglGetSyncAttribKHR() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglClientWaitSyncKHR method is actually supported
+ * on the Android device
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglClientWaitSyncKHR(
+        JNIEnv *env, jobject thiz) {
+    return obtainEglClientWaitSyncKHR() != nullptr;
+}
+
+/**
+ * Java does not support unsigned long types. Ensure that our casting of Java types the native
+ * equivalent matches.
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nEqualToNativeForeverTimeout(
+        JNIEnv *env, jobject thiz, jlong timeout_nanos) {
+    return static_cast<EGLTimeKHR>(timeout_nanos) == EGL_FOREVER_KHR;
+}
diff --git a/graphics/graphics-core/src/main/cpp/graphics-core.cpp b/graphics/graphics-core/src/main/cpp/graphics-core.cpp
new file mode 100644
index 0000000..6ee16eb
--- /dev/null
+++ b/graphics/graphics-core/src/main/cpp/graphics-core.cpp
@@ -0,0 +1,407 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "ASurfaceControlTest"
+
+#include <jni.h>
+#include <string>
+#include <poll.h>
+#include <unistd.h>
+#include <ctime>
+#include <unistd.h>
+#include <android/native_activity.h>
+#include <android/surface_control.h>
+#include <android/api-level.h>
+#include <android/log.h>
+#include <android/native_window_jni.h>
+#include <android/hardware_buffer_jni.h>
+#include <android/log.h>
+#include <android/sync.h>
+
+#define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nCreate(JNIEnv *env, jobject thiz,
+                                                                  jlong surfaceControl,
+                                                                  jstring debug_name) {
+    if (android_get_device_api_level() >= 29) {
+        auto aSurfaceControl = reinterpret_cast<ASurfaceControl *>(surfaceControl);
+        auto debugName = env->GetStringUTFChars(debug_name, nullptr);
+        return reinterpret_cast<jlong>(ASurfaceControl_create(aSurfaceControl,
+                                                              debugName));
+    } else {
+        return 0;
+    }
+}
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nCreateFromSurface(JNIEnv *env,
+                                                                             jobject thiz,
+                                                                             jobject surface,
+                                                                             jstring debug_name) {
+    if (android_get_device_api_level() >= 29) {
+        auto AWindow = ANativeWindow_fromSurface(env, surface);
+        auto debugName = env->GetStringUTFChars(debug_name, nullptr);
+        auto surfaceControl = reinterpret_cast<jlong>(ASurfaceControl_createFromWindow(AWindow,
+                                                                                       debugName));
+        ANativeWindow_release(AWindow);
+        return surfaceControl;
+    } else {
+        return 0;
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nRelease(JNIEnv *env,
+                                                                   jobject thiz,
+                                                                   jlong surfaceControl) {
+    if (android_get_device_api_level() >= 29) {
+        ASurfaceControl_release(reinterpret_cast<ASurfaceControl *>(surfaceControl));
+    } else {
+        return;
+    }
+}
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionCreate(
+        JNIEnv *env, jobject thiz) {
+    if (android_get_device_api_level() >= 29) {
+        return reinterpret_cast<jlong>(ASurfaceTransaction_create());
+    } else {
+        return 0;
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionDelete(
+        JNIEnv *env, jobject thiz,
+        jlong surfaceTransaction) {
+    if (android_get_device_api_level() >= 29) {
+        ASurfaceTransaction_delete(reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction));
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionApply(
+        JNIEnv *env, jobject thiz,
+        jlong surfaceTransaction) {
+    if (android_get_device_api_level() >= 29) {
+        ASurfaceTransaction_apply(reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction));
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionReparent(
+        JNIEnv *env, jobject thiz,
+        jlong surfaceTransaction, jlong surfaceControl, jlong newParent) {
+    if (android_get_device_api_level() >= 29) {
+        auto parent = (newParent!=0L) ? reinterpret_cast<ASurfaceControl *>(newParent) : nullptr;
+        ASurfaceTransaction_reparent(reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+                                     reinterpret_cast<ASurfaceControl *>(surfaceControl),
+                                     parent);
+    }
+}
+
+static struct {
+    bool CLASS_INFO_INITIALIZED = false;
+    jclass clazz{};
+    jmethodID onComplete{};
+
+} gTransactionCompletedListenerClassInfo;
+
+static struct {
+    bool CLASS_INFO_INITIALIZED = false;
+    jclass clazz{};
+    jmethodID onCommit{};
+} gTransactionCommittedListenerClassInfo;
+
+#define NANO_SECONDS 1000000000LL
+
+int64_t getSystemTime() {
+    struct timespec time;
+    int result = clock_gettime(CLOCK_MONOTONIC, &time);
+    if (result < 0) {
+        return -errno;
+    }
+    return (time.tv_sec * NANO_SECONDS) + time.tv_nsec;
+}
+
+/**
+ * This wrapper class mimics the one found in CTS tests, specifcally
+ * android_view_cts_ASurfaceControlTest.cpp and serves
+ * to allow us to set a callback for Transaction onComplete.
+ */
+class CallbackWrapper {
+public:
+    virtual ~CallbackWrapper() = default;
+
+    virtual void callback(ASurfaceTransactionStats *stats) = 0;
+
+    static void transactionCallbackThunk(void *context, ASurfaceTransactionStats *stats) {
+        CallbackWrapper *listener = reinterpret_cast<CallbackWrapper *>(context);
+        listener->callback(stats);
+        delete listener;
+    }
+
+protected:
+    JavaVM *mVm{};
+    jobject mCallbackObject{};
+
+    JNIEnv *getEnv() {
+        JNIEnv *env;
+        mVm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_6);
+        return env;
+    }
+};
+
+class OnCompleteCallbackWrapper : public CallbackWrapper {
+public:
+    explicit OnCompleteCallbackWrapper(JNIEnv *env, jobject object) {
+        env->GetJavaVM(&mVm);
+        mCallbackObject = env->NewGlobalRef(object);
+    }
+
+    ~OnCompleteCallbackWrapper() override {
+        getEnv()->DeleteGlobalRef(mCallbackObject);
+    }
+
+    void callback(ASurfaceTransactionStats *stats) override {
+        JNIEnv *env = getEnv();
+        env->CallVoidMethod(mCallbackObject,
+                            gTransactionCompletedListenerClassInfo.onComplete);
+    }
+};
+
+class OnCommitCallbackWrapper : public CallbackWrapper {
+public:
+    explicit OnCommitCallbackWrapper(JNIEnv *env, jobject object) {
+        env->GetJavaVM(&mVm);
+        mCallbackObject = env->NewGlobalRef(object);
+    }
+
+    ~OnCommitCallbackWrapper() override {
+        getEnv()->DeleteGlobalRef(mCallbackObject);
+    }
+
+    void callback(ASurfaceTransactionStats *stats) override {
+        JNIEnv *env = getEnv();
+        env->CallVoidMethod(mCallbackObject,
+                            gTransactionCommittedListenerClassInfo.onCommit);
+    }
+};
+
+void setupTransactionCompletedListenerClassInfo(JNIEnv *env) {
+    //ensure we only ever initialize class info once
+    if (!gTransactionCompletedListenerClassInfo.CLASS_INFO_INITIALIZED) {
+        //setup transactionCompleteListenerClassInfo for test usage
+        jclass transactionCompletedListenerClazz =
+                env->FindClass(
+                "androidx/graphics/surface/SurfaceControlCompat$TransactionCompletedListener");
+        gTransactionCompletedListenerClassInfo.clazz =
+                static_cast<jclass>(env->NewGlobalRef(transactionCompletedListenerClazz));
+        gTransactionCompletedListenerClassInfo.onComplete =
+                env->GetMethodID(transactionCompletedListenerClazz, "onTransactionCompleted",
+                                 "()V");
+
+        gTransactionCompletedListenerClassInfo.CLASS_INFO_INITIALIZED = true;
+    }
+
+}
+
+void setupTransactionCommittedListenerClassInfo(JNIEnv *env) {
+    //ensure we only ever initialize class info once
+    if (!gTransactionCommittedListenerClassInfo.CLASS_INFO_INITIALIZED) {
+        //setup transactionCommittedListenerClassInfo for test usage
+        jclass transactionCommittedListenerClazz =
+                env->FindClass(
+                "androidx/graphics/surface/SurfaceControlCompat$TransactionCommittedListener");
+        gTransactionCommittedListenerClassInfo.clazz =
+                static_cast<jclass>(env->NewGlobalRef(transactionCommittedListenerClazz));
+        gTransactionCommittedListenerClassInfo.onCommit =
+                env->GetMethodID(transactionCommittedListenerClazz, "onTransactionCommitted",
+                                 "()V");
+
+        gTransactionCommittedListenerClassInfo.CLASS_INFO_INITIALIZED = true;
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionSetOnComplete(
+        JNIEnv *env,
+        jobject thiz,
+        jlong surfaceTransaction, jobject callback) {
+    if (android_get_device_api_level() >= 29) {
+        setupTransactionCompletedListenerClassInfo(env);
+        void *context = new OnCompleteCallbackWrapper(env, callback);
+        ASurfaceTransaction_setOnComplete(
+                reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+                reinterpret_cast<void *>(context),
+                CallbackWrapper::transactionCallbackThunk);
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionSetOnCommit(
+        JNIEnv *env, jobject thiz, jlong surfaceTransaction, jobject listener) {
+    if (android_get_device_api_level() >= 31) {
+        setupTransactionCommittedListenerClassInfo(env);
+        void *context = new OnCommitCallbackWrapper(env, listener);
+        ASurfaceTransaction_setOnCommit(
+                reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+                reinterpret_cast<void *>(context),
+                CallbackWrapper::transactionCallbackThunk);
+    }
+}
+
+int extract_fence_fd(JNIEnv *env, jobject syncFence) {
+    jclass sfClass = env->GetObjectClass(syncFence);
+    jfieldID fid = env->GetFieldID(sfClass, "fd", "I");
+    return env->GetIntField(syncFence, fid);
+}
+
+/* Helper method to extract the SyncFence file descriptor
+ */
+extern "C"
+JNIEXPORT jint JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nExtractFenceFd(JNIEnv *env,
+                                                                          jobject thiz,
+                                                                          jobject syncFence) {
+    return extract_fence_fd(env, syncFence);
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetBuffer(JNIEnv *env,
+                                                                     jobject thiz,
+                                                                     jlong surfaceTransaction,
+                                                                     jlong surfaceControl,
+                                                                     jobject hBuffer,
+                                                                     jobject syncFence) {
+    if (android_get_device_api_level() >= 29) {
+        auto transaction = reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction);
+        auto sc = reinterpret_cast<ASurfaceControl *>(surfaceControl);
+        auto hardwareBuffer = AHardwareBuffer_fromHardwareBuffer(env, hBuffer);
+        auto fence_fd = extract_fence_fd(env, syncFence);
+        ASurfaceTransaction_setBuffer(transaction, sc, hardwareBuffer, fence_fd);
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetVisibility(
+        JNIEnv *env, jobject thiz,
+        jlong surfaceTransaction, jlong surfaceControl, jbyte jVisibility) {
+    if (android_get_device_api_level() >= 29) {
+        auto st = reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction);
+        auto sc = reinterpret_cast<ASurfaceControl *>(surfaceControl);
+        ASurfaceTransaction_setVisibility(st, sc, jVisibility);
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetZOrder(
+        JNIEnv *env, jobject thiz,
+        jlong surfaceTransaction, jlong surfaceControl, jint z_order)  {
+    if (android_get_device_api_level() >= 29) {
+        auto st = reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction);
+        auto sc = reinterpret_cast<ASurfaceControl *>(surfaceControl);
+        ASurfaceTransaction_setZOrder(st, sc, z_order);
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetDamageRegion(
+        JNIEnv *env, jobject thiz,
+        jlong surfaceTransaction, jlong surfaceControl,
+        jobject rect)  {
+    if (android_get_device_api_level() >= 29) {
+        auto st = reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction);
+        auto sc = reinterpret_cast<ASurfaceControl *>(surfaceControl);
+
+        if(rect == nullptr) {
+            ASurfaceTransaction_setDamageRegion(st, sc, nullptr, 0);
+            return;
+        }
+
+        jclass cls = env->GetObjectClass(rect);
+
+        jfieldID left = env->GetFieldID(cls, "left", "I");
+        jint leftVal = env->GetIntField(rect, left);
+
+        jfieldID top = env->GetFieldID(cls, "top", "I");
+        jint topVal = env->GetIntField(rect, top);
+
+        jfieldID right = env->GetFieldID(cls, "right", "I");
+        jint rightVal = env->GetIntField(rect, right);
+
+        jfieldID bottom = env->GetFieldID(cls, "bottom", "I");
+        jint bottomVal = env->GetIntField(rect, bottom);
+
+        ARect rectArray[1];
+        rectArray[0] = (ARect){ leftVal, topVal, rightVal, bottomVal};
+
+        ASurfaceTransaction_setDamageRegion(st, sc, rectArray, 1);
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetDesiredPresentTime(
+        JNIEnv *env, jobject thiz,
+        jlong surfaceTransaction, int64_t desiredPresentTimeNano)  {
+    if (android_get_device_api_level() >= 29) {
+        ASurfaceTransaction_setDesiredPresentTime(
+                reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+                desiredPresentTimeNano);
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetBufferTransparency(
+        JNIEnv *env, jobject thiz,
+        jlong surfaceTransaction, jlong surfaceControl, jbyte transparency)  {
+    if (android_get_device_api_level() >= 29) {
+        ASurfaceTransaction_setBufferTransparency(
+                reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+                reinterpret_cast<ASurfaceControl *>(surfaceControl),
+                transparency);
+    }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetBufferAlpha(
+        JNIEnv *env, jobject thiz,
+        jlong surfaceTransaction, jlong surfaceControl, jfloat alpha)  {
+    if (android_get_device_api_level() >= 29) {
+        ASurfaceTransaction_setBufferAlpha(
+                reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+                reinterpret_cast<ASurfaceControl *>(surfaceControl),
+                alpha);
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/cpp/sc_test_utils.cpp b/graphics/graphics-core/src/main/cpp/sc_test_utils.cpp
new file mode 100644
index 0000000..1842825
--- /dev/null
+++ b/graphics/graphics-core/src/main/cpp/sc_test_utils.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2022 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.
+ */
+
+#include <jni.h>
+#include <android/api-level.h>
+#include <android/native_window_jni.h>
+#include <android/hardware_buffer_jni.h>
+
+void colorBufferRegion(void *data, int32_t left, int32_t top, int32_t right, int32_t bottom,
+                       uint32_t color, uint32_t stride) {
+    auto *ptr = static_cast<uint32_t *>(data);
+    ptr += stride * top;
+
+    for (uint32_t y = top; y < bottom; y++) {
+        for (uint32_t x = left; x < right; x++) {
+            ptr[x] = color;
+        }
+        ptr += stride;
+    }
+}
+
+bool createSolidBuffer(JNIEnv *env, jobject thiz, int32_t width, int32_t height, uint32_t color,
+                       AHardwareBuffer **outBuffer, int *fence) {
+    AHardwareBuffer *buffer = nullptr;
+    AHardwareBuffer_Desc tempDesc = {};
+    tempDesc.width = width;
+    tempDesc.height = height;
+    tempDesc.layers = 1;
+    tempDesc.usage = AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN |
+                     AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE;
+    tempDesc.format = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM;
+
+    AHardwareBuffer_allocate(&tempDesc, &buffer);
+
+    AHardwareBuffer_Desc desc = {};
+    AHardwareBuffer_describe(buffer, &desc);
+
+    if (!buffer) {
+        return true;
+    }
+
+    const ARect rect{0, 0, width, height};
+    void *data = nullptr;
+    AHardwareBuffer_lock(buffer, AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN, -1, &rect, &data);
+
+    if (!data) {
+        AHardwareBuffer_release(buffer);
+        return true;
+    }
+
+    colorBufferRegion(data, 0, 0, width, height, color, desc.stride);
+    AHardwareBuffer_unlock(buffer, fence);
+    *outBuffer = buffer;
+    return false;
+}
+
+extern "C"
+JNIEXPORT jobject JNICALL
+Java_androidx_graphics_surface_SurfaceControlUtils_00024Companion_nGetSolidBuffer(JNIEnv *env,
+                                                                                        jobject thiz,
+                                                                                        jint width,
+                                                                                        jint height,
+                                                                                        jint color) {
+    AHardwareBuffer *tempBuffer;
+    if (createSolidBuffer(env, thiz, width, height, static_cast<uint32_t>(color), &tempBuffer,
+                          nullptr)) {
+        return nullptr;
+    }
+    jobject hardwareBuffer = AHardwareBuffer_toHardwareBuffer(env, tempBuffer);
+    AHardwareBuffer_release(tempBuffer);
+    return hardwareBuffer;
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/cpp/sync_fence.cpp b/graphics/graphics-core/src/main/cpp/sync_fence.cpp
new file mode 100644
index 0000000..aae752c
--- /dev/null
+++ b/graphics/graphics-core/src/main/cpp/sync_fence.cpp
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2022 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.
+ */
+#include <jni.h>
+#include <android/sync.h>
+#include <android/log.h>
+#include <cstdint>
+#include <poll.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <android/file_descriptor_jni.h>
+#include <errno.h>
+
+static constexpr int64_t SIGNAL_TIME_INVALID = -1;
+static constexpr int64_t SIGNAL_TIME_PENDING = INT64_MAX;
+
+#define SYNC_FENCE "SYNC_FENCE"
+#define ALOGE(msg, ...) \
+    __android_log_print(ANDROID_LOG_ERROR, SYNC_FENCE, (msg), __VA_ARGS__)
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_hardware_SyncFence_nClose(JNIEnv *env, jobject thiz, jint fd) {
+    close(fd);
+}
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_hardware_SyncFence_nGetSignalTime(JNIEnv *env, jobject thiz,
+                                                jint fd) {
+    // Implementation sampled from Fence::getSignalTime in the framework
+    if (fd == -1) {
+        return SIGNAL_TIME_INVALID;
+    }
+
+    struct sync_file_info* finfo = sync_file_info(fd);
+    if (finfo == nullptr) {
+        ALOGE("sync_file_info returned NULL for fd %d", fd);
+        return SIGNAL_TIME_INVALID;
+    }
+
+    if (finfo->status != 1) {
+        const auto status = finfo->status;
+        if (status < 0) {
+            ALOGE("nGetSignalTime: sync_file_info contains an error: <%d> for fd: <%d>", status,
+                  fd);
+        }
+        sync_file_info_free(finfo);
+        return status < 0 ? SIGNAL_TIME_INVALID : SIGNAL_TIME_PENDING;
+    }
+
+    uint64_t timestamp = 0;
+    struct sync_fence_info* pinfo = sync_get_fence_info(finfo);
+    for (size_t i = 0; i < finfo->num_fences; i++) {
+        if (pinfo[i].timestamp_ns > timestamp) {
+            timestamp = pinfo[i].timestamp_ns;
+        }
+    }
+
+    sync_file_info_free(finfo);
+    return static_cast<int64_t>(timestamp);
+}
+
+// Implementation of sync_wait obtained from libsync/sync.c in the framework
+static int sync_wait(int fd, int timeout)
+{
+    struct pollfd fds{};
+    int ret;
+
+    if (fd < 0) {
+        errno = EINVAL;
+        return -1;
+    }
+
+    fds.fd = fd;
+    fds.events = POLLIN;
+
+    do {
+        ret = poll(&fds, 1, timeout);
+        if (ret > 0) {
+            if (fds.revents & (POLLERR | POLLNVAL)) {
+                errno = EINVAL;
+                return -1;
+            }
+            return 0;
+        } else if (ret == 0) {
+            errno = ETIME;
+            return -1;
+        }
+    } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+
+    return ret;
+}
+
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_hardware_SyncFence_nWait(JNIEnv *env, jobject thiz, jint fd,
+                                       jint timeout_millis) {
+    if (fd == -1) {
+        return static_cast<jboolean>(true);
+    }
+
+    // SyncFence#wait takes a timeout as a long in nanoseconds, however, the poll
+    // API appears to consume an int. Also the documentation in Fence.cpp seems to indicate
+    // that the timeout is consumed as an int in milliseconds
+    int err = sync_wait(fd, timeout_millis);
+    return static_cast<jboolean>(err == JNI_OK);
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt
new file mode 100644
index 0000000..e623c73
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt
@@ -0,0 +1,636 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import android.annotation.SuppressLint
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.util.Log
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import androidx.annotation.WorkerThread
+import androidx.graphics.opengl.GLRenderer
+import androidx.graphics.opengl.egl.EGLManager
+import androidx.graphics.opengl.egl.EGLSpec
+import androidx.graphics.surface.SurfaceControlCompat
+import java.util.Collections
+import java.util.concurrent.ConcurrentLinkedQueue
+
+/**
+ * Class responsible for supporting a "front buffered" rendering system. This allows for lower
+ * latency graphics by leveraging a combination of front buffered and double buffered content
+ * layers.
+ * Active content is rendered first into the front buffered layer which is simultaneously being
+ * presented to the display. Periodically content is rendered into the double buffered layer which
+ * will have more traditional latency guarantees, however, minimize the impact of visual artifacts
+ * due to graphical tearing.
+ *
+ * @param surfaceView Target SurfaceView to act as the parent rendering layer for double buffered
+ *  content
+ * @param callback Callbacks used to render into front and double buffered layers as well as
+ *  configuring [SurfaceControlCompat.Transaction]s for controlling these layers in addition to
+ *  other [SurfaceControlCompat] instances that must be updated atomically within the user
+ *  interface. These callbacks are invoked on the backing GL Thread.
+ * @param glRenderer Optional [GLRenderer] instance that this [GLFrontBufferedRenderer] should use
+ *  for coordinating requests to render content. If this parameter is specified, the caller
+ *  of this API is responsible for releasing resources on [GLRenderer] by calling
+ *  [GLRenderer.stop]. Otherwise [GLFrontBufferedRenderer] will create and manage its own
+ *  [GLRenderer] internally and will automatically release its resources within
+ *  [GLFrontBufferedRenderer.release]
+ */
+@RequiresApi(Build.VERSION_CODES.Q)
+@Suppress("AcronymName")
+class GLFrontBufferedRenderer<T> @JvmOverloads constructor(
+    surfaceView: SurfaceView,
+    callback: Callback<T>,
+    @Suppress("ListenerLast")
+    glRenderer: GLRenderer? = null,
+) {
+    /**
+     * [ParentRenderLayer] used to contain both the front and double buffered layers
+     */
+    private val mParentRenderLayer: ParentRenderLayer<T> = SurfaceViewRenderLayer(surfaceView)
+
+    /**
+     * Callbacks invoked to render into the front and double buffered layers in addition to
+     * providing consumers an opportunity to specify any potential additional interactions that must
+     * be synchronized with the [SurfaceControlCompat.Transaction] to show/hide visibility of the
+     * front buffered layer as well as updating double buffered layers
+     */
+    private val mCallback = callback
+
+    /**
+     * [GLRenderer.EGLContextCallback]s used to release the corresponding [RenderBufferPool]
+     * if the [GLRenderer] is torn down.
+     * This is especially helpful if a [GLRenderer] is being provided and shared across other
+     * [GLRenderer.RenderTarget] instances in which case it can be released externally from
+     * [GLFrontBufferedRenderer]
+     */
+    private val mContextCallbacks = object : GLRenderer.EGLContextCallback {
+        override fun onEGLContextCreated(eglManager: EGLManager) {
+            // no-op
+        }
+
+        override fun onEGLContextDestroyed(eglManager: EGLManager) {
+            mBufferPool?.let { releaseBuffers(it) }
+        }
+    }
+
+    /**
+     * [ParentRenderLayer] callbacks used to be alerted of changes to the size of the parent
+     * render layer which acts as a signal to teardown some internal resources and recreate them
+     * with the updated dimensions
+     */
+    private val mParentLayerCallback = object :
+        ParentRenderLayer.Callback<T> {
+        override fun onSizeChanged(width: Int, height: Int) {
+            update(width, height)
+        }
+
+        override fun onLayerDestroyed() {
+            release(true)
+        }
+
+        override fun obtainDoubleBufferedLayerParams(): MutableCollection<T> =
+            mParentBufferParamQueue
+
+        override fun getFrontBufferedLayerSurfaceControl(): SurfaceControlCompat? =
+            mFrontBufferedLayerSurfaceControl
+
+        override fun getRenderBufferPool(): RenderBufferPool? =
+            mBufferPool
+    }
+
+    /**
+     * Queue of parameters to be consumed in [Callback.onDrawFrontBufferedLayer] with the parameter
+     * provided in [renderFrontBufferedLayer]
+     */
+    private val mFrontBufferQueueParams = ConcurrentLinkedQueue<T>()
+
+    /**
+     * Collection of parameters to be consumed in [Callback.onDoubleBufferedLayerRenderComplete]
+     * with the parameters defined in consecutive calls to [renderFrontBufferedLayer].
+     * Once the corresponding [Callback.onDoubleBufferedLayerRenderComplete] callback is invoked,
+     * this collection is cleared and new parameters are added to it with consecutive calls to
+     * [renderFrontBufferedLayer].
+     */
+    private val mParentBufferParamQueue = Collections.synchronizedList(ArrayList<T>())
+
+    /**
+     * [RenderBuffer] used for rendering into the front buffered layer. This buffer is persisted
+     * across frames as part of front buffered rendering and is not expected to be released again
+     * after the corresponding [SurfaceControlCompat.Transaction] that submits this buffer is
+     * applied as per the implementation of "scan line racing" that is done for front buffered
+     * rendering
+     */
+    private var mFrontLayerBuffer: RenderBuffer? = null
+
+    /**
+     * [RenderBufferPool] used to cycle through [RenderBuffer] instances that are released when
+     * the [HardwareBuffer] within the [RenderBuffer] is already displayed by the hardware
+     * compositor
+     */
+    private var mBufferPool: RenderBufferPool? = null
+
+    /**
+     * [GLRenderer.RenderCallback] used for drawing into the front buffered layer
+     */
+    private var mFrontBufferedLayerRenderer: HardwareBufferRenderer? = null
+
+    /**
+     * [SurfaceControlCompat] used to configure buffers and visibility of the front buffered layer
+     */
+    private var mFrontBufferedLayerSurfaceControl: SurfaceControlCompat? = null
+
+    /**
+     * Width of the layers to render. Only if the size changes to we re-initialize the internal
+     * state of the [GLFrontBufferedRenderer]
+     */
+    private var mWidth = -1
+
+    /**
+     * Height of the layers to render. Only if the size changes do we re-initialize the internal
+     * state of the [GLFrontBufferedRenderer]
+     */
+    private var mHeight = -1
+
+    /**
+     * [GLRenderer] used to issue requests to render into front/double buffered layers
+     */
+    private val mGLRenderer: GLRenderer
+
+    /**
+     * Flag indicating if the [GLRenderer] being used was created internally within
+     * [GLFrontBufferedRenderer] as opposed to being provided by the consumer.
+     * If the former, then the [GLFrontBufferedRenderer] is responsible for stopping/releasing this
+     * [GLRenderer] in the [release] method. If this is being provided, then we should not be
+     * releasing this [GLRenderer] as it maybe used by other consumers.
+     * In this case, only the front/double buffered [GLRenderer.RenderTarget]s are detached.
+     */
+    private val mIsManagingGLRenderer: Boolean
+
+    /**
+     * [GLRenderer.RenderTarget] used to issue requests to render into the front buffered layer
+     */
+    private var mFrontBufferedRenderTarget: GLRenderer.RenderTarget? = null
+
+    /**
+     * [GLRenderer.RenderTarget] used to issue requests to render into the double buffered layer
+     */
+    private var mDoubleBufferedLayerRenderTarget: GLRenderer.RenderTarget? = null
+
+    /**
+     * Flag to determine if the [GLFrontBufferedRenderer] has previously been released. If this flag
+     * is true, then subsequent requests to [renderFrontBufferedLayer], [commit], and [release] are
+     * ignored.
+     */
+    private var mIsReleased = false
+
+    init {
+        mParentRenderLayer.setParentLayerCallbacks(mParentLayerCallback)
+        val renderer = if (glRenderer == null) {
+            // If we have not been provided a [GLRenderer] then we should create/start one ourselves
+            mIsManagingGLRenderer = true
+            GLRenderer().apply { start() }
+        } else {
+            // ... otherwise use the [GLRenderer] that is being provided for us
+            mIsManagingGLRenderer = false
+            glRenderer
+        }
+        renderer.registerEGLContextCallback(mContextCallbacks)
+
+        mDoubleBufferedLayerRenderTarget =
+            mParentRenderLayer.createRenderTarget(renderer, mCallback)
+        mGLRenderer = renderer
+    }
+
+    internal fun update(width: Int, height: Int) {
+        if (mWidth != width || mHeight != height) {
+            mFrontBufferedLayerSurfaceControl?.release()
+
+            val frontBufferedSurfaceControl = SurfaceControlCompat.Builder()
+                .setName("FrontBufferedSurfaceControl")
+                .apply {
+                    mParentRenderLayer.setParent(this)
+                }
+                .build()
+
+            val bufferPool = RenderBufferPool(
+                width,
+                height,
+                format = HardwareBuffer.RGBA_8888,
+                usage = obtainHardwareBufferUsageFlags(),
+                maxPoolSize = 5
+            )
+
+            val previousBufferPool = mBufferPool
+            mFrontBufferedRenderTarget?.detach(true) {
+                if (previousBufferPool != null) {
+                    releaseBuffers(previousBufferPool)
+                }
+            }
+
+            val frontBufferedLayerRenderer =
+                createFrontBufferedLayerRenderer(frontBufferedSurfaceControl)
+            mFrontBufferedRenderTarget = mGLRenderer.createRenderTarget(
+                width,
+                height,
+                frontBufferedLayerRenderer
+            )
+
+            mFrontBufferedLayerRenderer = frontBufferedLayerRenderer
+            mFrontBufferedLayerSurfaceControl = frontBufferedSurfaceControl
+            mBufferPool = bufferPool
+            mWidth = width
+            mHeight = height
+        }
+    }
+
+    /**
+     * Determines whether or not the [GLFrontBufferedRenderer] is in a valid state. That is the
+     * [release] method has not been called.
+     * If this returns false, then subsequent calls to [renderFrontBufferedLayer], [commit], and
+     * [release] are ignored
+     *
+     * @return `true` if this [GLFrontBufferedRenderer] has been released, `false` otherwise
+     */
+    fun isValid(): Boolean = !mIsReleased
+
+    /**
+     * Render content to the front buffered layer providing optional parameters to be consumed in
+     * [Callback.onDrawFrontBufferedLayer].
+     * Additionally the parameter provided here will also be consumed in
+     * [Callback.onDrawDoubleBufferedLayer]
+     * when the corresponding [commit] method is invoked, which will include all [param]s in each
+     * call made to this method up to the corresponding [commit] call.
+     *
+     * If this [GLFrontBufferedRenderer] has been released, that is [isValid] returns `false`, this
+     * call is ignored.
+     *
+     * @param param Optional parameter to be consumed when rendering content into the commit layer
+     */
+    fun renderFrontBufferedLayer(param: T) {
+        if (isValid()) {
+            mFrontBufferQueueParams.add(param)
+            mParentBufferParamQueue.add(param)
+            mFrontBufferedRenderTarget?.requestRender()
+        } else {
+            Log.w(TAG, "Attempt to render to front buffered layer when " +
+                "GLFrontBufferedRenderer has been released")
+        }
+    }
+
+    /**
+     * Clears the contents of both the front and double buffered layers. This triggers a call to
+     * [Callback.onDoubleBufferedLayerRenderComplete] and hides the front buffered layer.
+     */
+    fun clear() {
+        clearParamQueues()
+        mFrontBufferedLayerRenderer?.clear()
+        mParentRenderLayer.clear()
+    }
+
+    /**
+     * Requests to render the entire scene to the double buffered layer and schedules a call to
+     * [Callback.onDoubleBufferedLayerRenderComplete]. The parameters provided to
+     * [Callback.onDoubleBufferedLayerRenderComplete] will include each argument provided to every
+     * [renderFrontBufferedLayer] call since the last call to [commit] has been made.
+     *
+     * If this [GLFrontBufferedRenderer] has been released, that is [isValid] returns `false`,
+     * this call is ignored.
+     */
+    fun commit() {
+        if (isValid()) {
+            mDoubleBufferedLayerRenderTarget?.requestRender()
+            mFrontBufferedLayerRenderer?.clear()
+        } else {
+            Log.w(TAG, "Attempt to render to the double buffered layer when " +
+                "GLFrontBufferedRenderer has been released")
+        }
+    }
+
+    /**
+     * Releases the [GLFrontBufferedRenderer] and provides an optional callback that is invoked when
+     * the [GLFrontBufferedRenderer] is fully torn down. If the [cancelPending] flag is true, all
+     * pending requests to render into the front or double buffered layers will be processed before
+     * the [GLFrontBufferedRenderer] is torn down. Otherwise all in process requests are ignored.
+     * If the [GLFrontBufferedRenderer] is already released, that is [isValid] returns `false`, this
+     * method does nothing.
+     *
+     * @param cancelPending Flag indicating that requests to render should be processed before
+     * the [GLFrontBufferedRenderer] is released
+     * @param onReleaseComplete Optional callback invoked when the [GLFrontBufferedRenderer] has
+     * been released. This callback is invoked on the backing GLThread
+     */
+    @JvmOverloads
+    fun release(cancelPending: Boolean, onReleaseComplete: (() -> Unit)? = null) {
+        if (!isValid()) {
+            Log.w(TAG, "Attempt to release GLFrontbufferedRenderer that is already released")
+            return
+        }
+        // Wrap the callback into a separate lambda to ensure it is invoked only after
+        // both the front and double buffered layer target renderers are detached
+        var callbackCount = 0
+        var expectedCount = 0
+        if (mFrontBufferedRenderTarget?.isAttached() == true) {
+            expectedCount++
+        }
+
+        if (mDoubleBufferedLayerRenderTarget?.isAttached() == true) {
+            expectedCount++
+        }
+        val frontBufferedLayerSurfaceControl = mFrontBufferedLayerSurfaceControl
+        val wrappedCallback: (GLRenderer.RenderTarget) -> Unit = {
+            callbackCount++
+            if (callbackCount >= expectedCount) {
+                mBufferPool?.let { releaseBuffers(it) }
+                clearParamQueues()
+
+                frontBufferedLayerSurfaceControl?.let {
+                    val transaction = SurfaceControlCompat.Transaction()
+                        .reparent(it, null)
+                    mParentRenderLayer.release(transaction)
+                    transaction.commit()
+                    it.release()
+                }
+
+                onReleaseComplete?.invoke()
+            }
+        }
+        mFrontBufferedRenderTarget?.detach(cancelPending, wrappedCallback)
+        mDoubleBufferedLayerRenderTarget?.detach(cancelPending, wrappedCallback)
+        mFrontBufferedRenderTarget = null
+        mDoubleBufferedLayerRenderTarget = null
+
+        mGLRenderer.unregisterEGLContextCallback(mContextCallbacks)
+        if (mIsManagingGLRenderer) {
+            // If we are managing the GLRenderer that we created ourselves
+            // do not cancel pending operations as we will miss callbacks that we are
+            // expecting above to properly teardown resources
+            // Instead rely on the cancel pending flags for detaching the front/double buffered
+            // render targets instead
+            mGLRenderer.stop(false)
+        }
+
+        mFrontBufferedLayerSurfaceControl = null
+        mParentRenderLayer.setParentLayerCallbacks(null)
+        mIsReleased = true
+    }
+
+    private fun createFrontBufferedLayerRenderer(
+        frontBufferedLayerSurfaceControl: SurfaceControlCompat
+    ) = HardwareBufferRenderer(
+        object : HardwareBufferRenderer.RenderCallbacks {
+
+            @WorkerThread
+            override fun obtainRenderBuffer(egl: EGLSpec): RenderBuffer {
+                var buffer = mFrontLayerBuffer
+                if (buffer == null) {
+                    // Allocate and persist a RenderBuffer instance across frames
+                    buffer = mBufferPool?.obtain(egl).also { mFrontLayerBuffer = it }
+                       ?: throw IllegalArgumentException("Unable to obtain RenderBuffer")
+                }
+                return buffer
+            }
+
+            @WorkerThread
+            override fun onDraw(eglManager: EGLManager) {
+                try {
+                    // Explicitly call remove in order to delineate between scenarios where
+                    // no parameters are provided and the consumer explicitly supports nullable
+                    // parameters.
+                    // If poll was used instead, we would not be able to determine if the nullable
+                    // parameter was because there were no items in the queue or the consumer
+                    // explicitly provided null as a placeholder
+                    mCallback.onDrawFrontBufferedLayer(eglManager, mFrontBufferQueueParams.remove())
+                } catch (_: NoSuchElementException) {
+                    // Skip rendering if we have been told to render but we do not have parameters
+                    // Because the call to render to the front buffer takes in a parameter we should
+                    // not run into this scenario.
+                }
+            }
+
+            @WorkerThread
+            override fun onDrawComplete(renderBuffer: RenderBuffer) {
+                val transaction = SurfaceControlCompat.Transaction()
+                    // Make this layer the top most layer
+                    .setLayer(frontBufferedLayerSurfaceControl, Integer.MAX_VALUE)
+                    .setBuffer(
+                        frontBufferedLayerSurfaceControl,
+                        renderBuffer.hardwareBuffer,
+                        null
+                    )
+                    .setVisibility(frontBufferedLayerSurfaceControl, true)
+                mParentRenderLayer.buildReparentTransaction(
+                    frontBufferedLayerSurfaceControl, transaction)
+                mCallback.onFrontBufferedLayerRenderComplete(
+                    frontBufferedLayerSurfaceControl,
+                    transaction
+                )
+                transaction.commit()
+            }
+        }
+    )
+
+    private fun clearParamQueues() {
+        mFrontBufferQueueParams.clear()
+        mParentBufferParamQueue.clear()
+    }
+
+    /**
+     * Release the buffers associated with the front buffered layer as well as the
+     * [RenderBufferPool]
+     */
+    internal fun releaseBuffers(pool: RenderBufferPool) {
+        mFrontLayerBuffer?.let {
+            pool.release(it)
+            mFrontLayerBuffer = null
+        }
+        pool.close()
+    }
+
+    companion object {
+
+        internal const val TAG = "GLFrontBufferedRenderer"
+
+        // Leverage the same value as HardwareBuffer.USAGE_COMPOSER_OVERLAY.
+        // While this constant was introduced in the SDK in the Android T release, it has
+        // been available within the NDK as part of
+        // AHardwareBuffer_UsageFlags#AHARDWAREBUFFER_USAGE_COMPOSER_OVERLAY for quite some time.
+        // This flag is required for usage of ASurfaceTransaction#setBuffer
+        // Use a separate constant with the same value to avoid SDK warnings of accessing the
+        // newly added constant in the SDK.
+        // See:
+        // developer.android.com/ndk/reference/group/a-hardware-buffer#ahardwarebuffer_usageflags
+        private const val USAGE_COMPOSER_OVERLAY: Long = 2048L
+
+        /**
+         * Flags that are expected to be supported on all [HardwareBuffer] instances
+         */
+        internal const val BaseFlags =
+            HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE or
+                HardwareBuffer.USAGE_GPU_COLOR_OUTPUT or
+                USAGE_COMPOSER_OVERLAY
+
+        internal fun obtainHardwareBufferUsageFlags(): Long =
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+                UsageFlagsVerificationHelper.obtainUsageFlagsV33()
+            } else {
+                BaseFlags
+            }
+    }
+
+    /**
+     * Provides callbacks for consumers to draw into the front and double buffered layers as well as
+     * provide opportunities to synchronize [SurfaceControlCompat.Transaction]s to submit the layers
+     * to the hardware compositor.
+     */
+    interface Callback<T> {
+
+        /**
+         * Callback invoked to render content into the front buffered layer with the specified
+         * parameters.
+         * @param eglManager [EGLManager] useful in configuring EGL objects to be used when issuing
+         * OpenGL commands to render into the front buffered layer
+         * @param param optional parameter provided the corresponding
+         * [GLFrontBufferedRenderer.renderFrontBufferedLayer] method that triggered this request to render
+         * into the front buffered layer
+         */
+        @WorkerThread
+        fun onDrawFrontBufferedLayer(eglManager: EGLManager, param: T)
+
+        /**
+         * Callback invoked to render content into the doubled buffered layer with the specified
+         * parameters.
+         * @param eglManager [EGLManager] useful in configuring EGL objects to be used when issuing
+         * OpenGL commands to render into the double buffered layer
+         * @param params optional parameter provided to render the entire scene into the double
+         * buffered layer.
+         * This is a collection of all parameters provided in consecutive invocations to
+         * [GLFrontBufferedRenderer.renderFrontBufferedLayer] since the last call to
+         * [GLFrontBufferedRenderer.commit] has been made. After [GLFrontBufferedRenderer.commit]
+         * is invoked, this collection is cleared and new
+         * parameters are added on each subsequent call to
+         * [GLFrontBufferedRenderer.renderFrontBufferedLayer].
+         *
+         * Consider the following example:
+         *
+         * myFrontBufferedRenderer.renderFrontBufferedLayer(1)
+         * myFrontBufferedRenderer.renderFrontBufferedLayer(2)
+         * myFrontBufferedRenderer.renderFrontBufferedLayer(3)
+         * myFrontBufferedRenderer.commit()
+         *
+         * This will generate a callback to this method with the params collection containing values
+         * [1, 2, 3]
+         *
+         * myFrontBufferedRenderer.renderFrontBufferedLayer(4)
+         * myFrontBufferedRenderer.renderFrontBufferedLayer(5)
+         * myFrontBufferedRenderer.commit()
+         *
+         * This will generate a callback to this method with the params collection containing values
+         * [4, 5]
+         */
+        @WorkerThread
+        fun onDrawDoubleBufferedLayer(eglManager: EGLManager, params: Collection<T>)
+
+        /**
+         * Optional callback invoked when rendering to the front buffered layer is complete but
+         * before the buffers are submitted to the hardware compositor.
+         * This provides consumers a mechanism for synchronizing the transaction with other
+         * [SurfaceControlCompat] objects that maybe rendered within the scene.
+         *
+         * @param frontBufferedLayerSurfaceControl Handle to the [SurfaceControlCompat] where the
+         * front buffered layer content is drawn. This can be used to configure various properties
+         * of the [SurfaceControlCompat] like z-ordering or visibility with the corresponding
+         * [SurfaceControlCompat.Transaction].
+         * @param transaction Current [SurfaceControlCompat.Transaction] to apply updated buffered
+         * content to the front buffered layer.
+         */
+        @WorkerThread
+        fun onFrontBufferedLayerRenderComplete(
+            frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+            transaction: SurfaceControlCompat.Transaction
+        ) {
+            // Default implementation is a no-op
+        }
+
+        /**
+         * Optional callback invoked when rendering to the double buffered layer is complete but
+         * before the buffers are submitted to the hardware compositor.
+         * This provides consumers a mechanism for synchronizing the transaction with other
+         * [SurfaceControlCompat] objects that maybe rendered within the scene.
+         *
+         * @param frontBufferedLayerSurfaceControl Handle to the [SurfaceControlCompat] where the
+         * front buffered layer content is drawn. This can be used to configure various properties
+         * of the [SurfaceControlCompat] like z-ordering or visibility with the corresponding
+         * [SurfaceControlCompat.Transaction].
+         * @param transaction Current [SurfaceControlCompat.Transaction] to apply updated buffered
+         * content to the double buffered layer.
+         */
+        @WorkerThread
+        fun onDoubleBufferedLayerRenderComplete(
+            frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+            transaction: SurfaceControlCompat.Transaction
+        ) {
+            // Default implementation is a no-op
+        }
+    }
+}
+
+/**
+ * Helper class to avoid class verification failures
+ */
+@RequiresApi(Build.VERSION_CODES.Q)
+internal class UsageFlagsVerificationHelper private constructor() {
+    companion object {
+
+        /**
+         * Helper method to determine if a particular HardwareBuffer usage flag is supported.
+         * Even though the FRONT_BUFFER_USAGE and COMPOSER_OVERLAY flags are introduced in
+         * Android T, not all devices may support this flag. So we conduct a capability query
+         * with a sample 1x1 HardwareBuffer with the provided flag to see if it is compatible
+         */
+        // Suppressing WrongConstant warnings as we are leveraging a constant with the same value
+        // as HardwareBuffer.USAGE_COMPOSER_OVERLAY to avoid SDK checks as the constant has been
+        // supported in the NDK for several platform releases.
+        // See:
+        // developer.android.com/ndk/reference/group/a-hardware-buffer#ahardwarebuffer_usageflags
+        @SuppressLint("WrongConstant")
+        @RequiresApi(Build.VERSION_CODES.Q)
+        @androidx.annotation.DoNotInline
+        internal fun isSupported(flag: Long): Boolean =
+            HardwareBuffer.isSupported(
+                1, // width
+                1, // height
+                HardwareBuffer.RGBA_8888, // format
+                1, // layers
+                GLFrontBufferedRenderer.BaseFlags or flag
+            )
+
+        @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+        @androidx.annotation.DoNotInline
+        fun obtainUsageFlagsV33(): Long {
+            // First verify if the front buffer usage flag is supported along with the
+            // "usage composer overlay" flag that was introduced in API level
+            return if (isSupported(HardwareBuffer.USAGE_FRONT_BUFFER)) {
+                GLFrontBufferedRenderer.BaseFlags or HardwareBuffer.USAGE_FRONT_BUFFER
+            } else {
+                GLFrontBufferedRenderer.BaseFlags
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/HardwareBufferRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/HardwareBufferRenderer.kt
new file mode 100644
index 0000000..288c3e6
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/HardwareBufferRenderer.kt
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import android.hardware.HardwareBuffer
+import android.opengl.EGLConfig
+import android.opengl.EGLSurface
+import android.opengl.GLES20
+import android.os.Build
+import android.view.Surface
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.GLRenderer
+import androidx.graphics.opengl.egl.EGLManager
+import androidx.graphics.opengl.egl.EGLSpec
+import java.util.concurrent.atomic.AtomicBoolean
+
+/**
+ * [GLRenderer.RenderCallback] implementation that renders content into a frame buffer object
+ * backed by a [HardwareBuffer] object
+ */
+@RequiresApi(Build.VERSION_CODES.O)
+internal class HardwareBufferRenderer(
+    private val hardwareBufferRendererCallbacks: RenderCallbacks
+) : GLRenderer.RenderCallback {
+
+    private val mClear = AtomicBoolean(false)
+
+    override fun onSurfaceCreated(
+        spec: EGLSpec,
+        config: EGLConfig,
+        surface: Surface,
+        width: Int,
+        height: Int
+    ): EGLSurface? = null
+
+    fun clear() {
+        mClear.set(true)
+    }
+
+    override fun onDrawFrame(eglManager: EGLManager) {
+        val egl = eglManager.eglSpec
+        val buffer = hardwareBufferRendererCallbacks.obtainRenderBuffer(egl)
+        var syncFenceCompat: SyncFenceCompat? = null
+        try {
+            buffer.makeCurrent()
+            if (mClear.getAndSet(false)) {
+                GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f)
+                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+            } else {
+                hardwareBufferRendererCallbacks.onDraw(eglManager)
+            }
+            GLES20.glFlush()
+            syncFenceCompat = egl.createNativeSyncFence()
+
+            syncFenceCompat.awaitForever()
+            // At this point the HardwareBuffer has the contents of the GL rendering
+            // Create a surface Control transaction to dispatch this request
+            hardwareBufferRendererCallbacks.onDrawComplete(buffer)
+        } finally {
+            syncFenceCompat?.close()
+        }
+    }
+
+    /**
+     * Callbacks invoked to render content leveraging a [HardwareBufferRenderer]
+     */
+    interface RenderCallbacks {
+
+        /**
+         * Obtain a [RenderBuffer] to render content into. The [RenderBuffer] obtained here
+         * is expected to be managed by the consumer of [HardwareBufferRenderer]. That is
+         * callers of this API are expected to be maintaining a reference to the returned
+         * [RenderBuffer] here and calling [RenderBuffer.close] where appropriate as this will
+         * these instances will not be released by [HardwareBufferRenderer]
+         */
+        fun obtainRenderBuffer(egl: EGLSpec): RenderBuffer
+
+        /**
+         * Draw contents into the [HardwareBuffer]
+         */
+        fun onDraw(eglManager: EGLManager)
+
+        /**
+         * Callback when [onDraw] is complete and the contents of the draw
+         * are reflected in the corresponding [HardwareBuffer]
+         */
+        fun onDrawComplete(renderBuffer: RenderBuffer)
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/ParentRenderLayer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/ParentRenderLayer.kt
new file mode 100644
index 0000000..1ef449d
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/ParentRenderLayer.kt
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import androidx.graphics.opengl.GLRenderer
+import androidx.graphics.surface.SurfaceControlCompat
+
+/**
+ * Interface used to define a parent for rendering front and double buffered layers.
+ * This provides the following facilities:
+ *
+ * 1) Specifying a parent [SurfaceControlCompat] for a front buffered layer
+ * 2) Creating a [GLRenderer.RenderTarget] for rendering double buffered layer
+ * 3) Providing callbacks for consumers to know when to recreate dependencies based on
+ * the size/state of the parent, as well as allowing consumers to provide parameters
+ * to implementations of front/double buffered layers
+ */
+internal interface ParentRenderLayer<T> {
+    /**
+     * Modify the provided [SurfaceControlCompat.Transaction] to reparent the provided
+     * child [SurfaceControlCompat] to a [SurfaceControlCompat] provided by the parent rendering
+     * layer
+     */
+    fun buildReparentTransaction(
+        child: SurfaceControlCompat,
+        transaction: SurfaceControlCompat.Transaction,
+    )
+
+    /**
+     * Configure the parent of the [SurfaceControlCompat] to be created
+     * with the specified builder
+     */
+    fun setParent(builder: SurfaceControlCompat.Builder)
+
+    /**
+     * Create a [GLRenderer.RenderTarget] instance for the parent rendering layer given
+     * a [GLRenderer] and corresponding [GLRenderer.RenderCallback]
+     */
+    fun createRenderTarget(
+        renderer: GLRenderer,
+        renderLayerCallback: GLFrontBufferedRenderer.Callback<T>
+    ): GLRenderer.RenderTarget
+
+    /**
+     * Configure the callbacks on this [ParentRenderLayer] instance
+     * @param callback [Callback] specified on [ParentRenderLayer]. This can be null to remove
+     * the previously set [Callback]
+     */
+    fun setParentLayerCallbacks(callback: Callback<T>?)
+
+    /**
+     * Clear the contents of the parent buffer. This triggers a call to
+     * [GLFrontBufferedRenderer.Callback.onDoubleBufferedLayerRenderComplete] to update the
+     * buffer shown for the dry layer as well as hides the front buffered layer.
+     */
+    fun clear()
+
+    /**
+     * Release all resources associated with this [ParentRenderLayer] instance
+     */
+    fun release(transaction: SurfaceControlCompat.Transaction)
+
+    /**
+     * Callbacks to be implemented by the consumer of [ParentRenderLayer] to be alerted
+     * of size changes or if the [ParentRenderLayer] is destroyed as well as providing a mechanism
+     * to expose parameters for rendering front/double buffered layers
+     */
+    interface Callback<T> {
+        /**
+         * Callback invoked whenever the size of the [ParentRenderLayer] changes.
+         * Consumers can leverage this to initialize appropriate buffer sizes and
+         * [SurfaceControlCompat] instances
+         */
+        fun onSizeChanged(width: Int, height: Int)
+
+        /**
+         * Callback invoked when the [ParentRenderLayer] is destroyed. This can be in response
+         * to the corresponding View backing the [ParentRenderLayer] is being detached/removed
+         * from the View hierarchy
+         */
+        fun onLayerDestroyed()
+
+        /**
+         * Callback invoked by the [ParentRenderLayer] to query the parameters since the last
+         * render to the dry layer. This includes all parameters to each request to render content
+         * to the front buffered layer since the last time the dry layer was re-rendered.
+         * This is useful for recreating the entire scene when front buffered layer contents are to
+         * be committed, that is the entire scene is re-rendered into the double buffered layer.
+         */
+        fun obtainDoubleBufferedLayerParams(): MutableCollection<T>
+
+        /**
+         * Obtain a handle to the front buffered layer [SurfaceControlCompat] to be used in
+         * transactions to atomically update double buffered layer content as well as hiding the
+         * visibility of the front buffered layer
+         */
+        fun getFrontBufferedLayerSurfaceControl(): SurfaceControlCompat?
+
+        /**
+         * Obtain a handle to the [RenderBufferPool] to get [RenderBuffer] instances for
+         * rendering to front and double buffered layers
+         */
+        fun getRenderBufferPool(): RenderBufferPool?
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBuffer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBuffer.kt
new file mode 100644
index 0000000..9f4e0a5
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBuffer.kt
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import android.hardware.HardwareBuffer
+import android.opengl.GLES20
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EGLSpec
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLImageKHR
+
+/**
+ * Object that enables rendering into a [HardwareBuffer] by
+ * creating a frame buffer object from it by leveraging Android
+ * specific EGL extensions to create an [EGLImageKHR] object
+ * that is loaded as a texture.
+ */
+@RequiresApi(Build.VERSION_CODES.O)
+internal class RenderBuffer(
+    private val egl: EGLSpec,
+    val hardwareBuffer: HardwareBuffer,
+) {
+
+    private var eglImage: EGLImageKHR?
+    private var texture: Int = -1
+    private var frameBuffer: Int = -1
+    var isClosed = false
+        private set
+
+    // Int array used for creation of fbos/textures
+    private val buffer = IntArray(1)
+
+    init {
+        val image: EGLImageKHR = egl.eglCreateImageFromHardwareBuffer(hardwareBuffer)
+            ?: throw IllegalArgumentException("Unable to create EGLImage from HardwareBuffer")
+        eglImage = image
+
+        GLES20.glGenTextures(1, buffer, 0)
+        texture = buffer[0]
+
+        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture)
+        EGLExt.glEGLImageTargetTexture2DOES(GLES20.GL_TEXTURE_2D, image)
+
+        GLES20.glGenFramebuffers(1, buffer, 0)
+        frameBuffer = buffer[0]
+    }
+
+    fun makeCurrent() {
+        if (!isClosed) {
+            GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frameBuffer)
+            GLES20.glFramebufferTexture2D(
+                GLES20.GL_FRAMEBUFFER,
+                GLES20.GL_COLOR_ATTACHMENT0,
+                GLES20.GL_TEXTURE_2D,
+                texture,
+                0
+            )
+        }
+    }
+
+    fun close() {
+        buffer[0] = frameBuffer
+        GLES20.glDeleteBuffers(1, buffer, 0)
+        frameBuffer = -1
+
+        buffer[0] = texture
+        GLES20.glDeleteTextures(1, buffer, 0)
+        texture = -1
+
+        eglImage?.let { egl.eglDestroyImageKHR(it) }
+        eglImage = null
+        hardwareBuffer.close()
+        isClosed = true
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBufferPool.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBufferPool.kt
new file mode 100644
index 0000000..67579f4
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBufferPool.kt
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.util.Log
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EGLSpec
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
+
+/**
+ * Allocation pool used for the creation and reuse of [RenderBuffer] instances.
+ * This class is thread safe.
+ */
+@RequiresApi(Build.VERSION_CODES.O)
+internal class RenderBufferPool(
+    /**
+     * Width of the [HardwareBuffer] objects to allocate if none are available in the pool
+     */
+    private val width: Int,
+
+    /**
+     * Height of the [HardwareBuffer] objects to allocate if none are available in the pool
+     */
+    private val height: Int,
+
+    /**
+     * Format of the [HardwareBuffer] objects to allocate if none are available in the pool
+     */
+    private val format: Int,
+
+    /**
+     * Usage hint flag of the [HardwareBuffer] objects to allocate if none are available in the pool
+     */
+    private val usage: Long,
+
+    /**
+     * Maximum size that the pool before additional requests to allocate buffers blocks until
+     * another [RenderBuffer] is released. Must be greater than 0.
+     */
+    private val maxPoolSize: Int
+) {
+
+    private val mPool = ArrayList<RenderBuffer>()
+    private var mNumAllocated = 0
+    private val mLock = ReentrantLock()
+    private val mCondition = mLock.newCondition()
+
+    init {
+        if (maxPoolSize <= 0) {
+            throw IllegalArgumentException("Pool size must be at least 1")
+        }
+    }
+
+    /**
+     * Obtains a [RenderBuffer] instance. This will either return a [RenderBuffer] if one is
+     * available within the pool, or creates a new [RenderBuffer] instance if the number of
+     * outstanding [RenderBuffer] instances is less than [maxPoolSize]
+     */
+    fun obtain(eglSpec: EGLSpec): RenderBuffer {
+        mLock.withLock {
+            while (mPool.isEmpty() && mNumAllocated >= maxPoolSize) {
+                Log.w(
+                    TAG,
+                    "Waiting for RenderBuffer to become available, current allocation " +
+                        "count: $mNumAllocated"
+                )
+                mCondition.await()
+            }
+            return if (mPool.isNotEmpty()) {
+                val renderBuffer = mPool[mPool.size - 1]
+                mPool.removeAt(mPool.size - 1)
+                renderBuffer
+            } else {
+                mNumAllocated++
+                RenderBuffer(
+                    eglSpec,
+                    HardwareBuffer.create(
+                        width,
+                        height,
+                        format,
+                        1,
+                        usage
+                    )
+                )
+            }
+        }
+    }
+
+    /**
+     * Releases the given [RenderBuffer] back to the pool and signals all
+     * consumers that are currently waiting for a buffer to become available
+     * via [RenderBufferPool.obtain]
+     * This method is thread safe.
+     */
+    fun release(renderBuffer: RenderBuffer) {
+        mLock.withLock {
+            mPool.add(renderBuffer)
+            mCondition.signal()
+        }
+    }
+
+    /**
+     * Invokes [RenderBuffer.close] on all [RenderBuffer] instances currently available within
+     * the pool and clears the pool.
+     * This method is thread safe.
+     */
+    fun close() {
+        mLock.withLock {
+            for (renderBuffer in mPool) {
+                renderBuffer.close()
+            }
+            mPool.clear()
+            mNumAllocated = 0
+        }
+    }
+
+    private companion object {
+        private const val TAG = "RenderBufferPool"
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SurfaceViewRenderLayer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SurfaceViewRenderLayer.kt
new file mode 100644
index 0000000..3d71b07
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SurfaceViewRenderLayer.kt
@@ -0,0 +1,168 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import android.opengl.GLES20
+import android.os.Build
+import android.util.Log
+import android.view.SurfaceHolder
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.GLRenderer
+import androidx.graphics.opengl.egl.EGLManager
+import androidx.graphics.opengl.egl.EGLSpec
+import androidx.graphics.surface.SurfaceControlCompat
+import java.util.Collections
+
+/**
+ * [ParentRenderLayer] instance that leverages a [SurfaceView]'s [SurfaceControlCompat] as the
+ * parent [SurfaceControlCompat] for the front and double buffered layers
+ */
+@RequiresApi(Build.VERSION_CODES.Q)
+internal class SurfaceViewRenderLayer<T>(
+    private val surfaceView: SurfaceView
+) : ParentRenderLayer<T> {
+
+    private var mLayerCallback: ParentRenderLayer.Callback<T>? = null
+    private var mHardwareBufferRenderer: HardwareBufferRenderer? = null
+    private var mRenderTarget: GLRenderer.RenderTarget? = null
+    private var mParentSurfaceControl: SurfaceControlCompat? = null
+
+    override fun buildReparentTransaction(
+        child: SurfaceControlCompat,
+        transaction: SurfaceControlCompat.Transaction
+    ) {
+        transaction.reparent(child, surfaceView)
+    }
+
+    override fun setParent(builder: SurfaceControlCompat.Builder) {
+        builder.setParent(surfaceView)
+    }
+
+    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+    override fun createRenderTarget(
+        renderer: GLRenderer,
+        renderLayerCallback: GLFrontBufferedRenderer.Callback<T>
+    ): GLRenderer.RenderTarget {
+        val hardwareBufferRenderer = HardwareBufferRenderer(
+            object : HardwareBufferRenderer.RenderCallbacks {
+
+                override fun obtainRenderBuffer(egl: EGLSpec): RenderBuffer =
+                    mLayerCallback?.getRenderBufferPool()?.obtain(egl)
+                        ?: throw IllegalArgumentException("No RenderBufferPool available")
+
+                override fun onDraw(eglManager: EGLManager) {
+                    GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f)
+                    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+                    val params = mLayerCallback?.obtainDoubleBufferedLayerParams()
+                    if (params != null) {
+                        renderLayerCallback.onDrawDoubleBufferedLayer(eglManager, params)
+                        params.clear()
+                    } else {
+                        renderLayerCallback.onDrawDoubleBufferedLayer(
+                            eglManager,
+                            Collections.emptyList()
+                        )
+                    }
+                }
+
+                @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+                override fun onDrawComplete(renderBuffer: RenderBuffer) {
+                    val frontBufferedLayerSurfaceControl = mLayerCallback
+                            ?.getFrontBufferedLayerSurfaceControl()
+                    val sc = mParentSurfaceControl
+                        // At this point the parentSurfaceControl should already be created
+                        // in the surfaceChanged callback, however, if for whatever reason this
+                        // was not the case, create the double buffered SurfaceControl now and cache
+                        // it
+                        ?: createDoubleBufferedSurfaceControl().also {
+                            mParentSurfaceControl = it
+                        }
+                    if (frontBufferedLayerSurfaceControl != null) {
+                        val transaction = SurfaceControlCompat.Transaction()
+                            .setVisibility(frontBufferedLayerSurfaceControl, false)
+                            .setVisibility(sc, true)
+                            .setBuffer(sc, renderBuffer.hardwareBuffer) {
+                                mLayerCallback?.getRenderBufferPool()?.release(renderBuffer)
+                            }
+
+                        renderLayerCallback.onDoubleBufferedLayerRenderComplete(
+                            frontBufferedLayerSurfaceControl,
+                            transaction
+                        )
+                        transaction.commit()
+                    } else {
+                        Log.e(TAG, "Error, no front buffered SurfaceControl available to " +
+                            "synchronize transaction with")
+                    }
+                }
+        })
+        surfaceView.holder.addCallback(object : SurfaceHolder.Callback {
+
+            override fun surfaceCreated(holder: SurfaceHolder) {
+                // NO-OP wait on surfaceChanged callback
+            }
+
+            override fun surfaceChanged(
+                holder: SurfaceHolder,
+                format: Int,
+                width: Int,
+                height: Int
+            ) {
+                mParentSurfaceControl?.release()
+                mLayerCallback?.onSizeChanged(width, height)
+                mParentSurfaceControl = createDoubleBufferedSurfaceControl()
+            }
+
+            override fun surfaceDestroyed(p0: SurfaceHolder) {
+                mLayerCallback?.onLayerDestroyed()
+            }
+        })
+        val renderTarget = renderer.attach(surfaceView, hardwareBufferRenderer)
+        mRenderTarget = renderTarget
+        mHardwareBufferRenderer = hardwareBufferRenderer
+        return renderTarget
+    }
+
+    internal fun createDoubleBufferedSurfaceControl(): SurfaceControlCompat =
+        SurfaceControlCompat.Builder()
+            .setParent(surfaceView)
+            .setName("DoubleBufferedLayer")
+            .build()
+
+    override fun setParentLayerCallbacks(callback: ParentRenderLayer.Callback<T>?) {
+        mLayerCallback = callback
+    }
+
+    override fun clear() {
+        mHardwareBufferRenderer?.clear()
+        mRenderTarget?.requestRender()
+    }
+
+    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+    override fun release(transaction: SurfaceControlCompat.Transaction) {
+        mParentSurfaceControl?.let {
+            transaction.reparent(it, null)
+            it.release()
+        }
+        mParentSurfaceControl = null
+    }
+
+    internal companion object {
+        internal const val TAG = "SurfaceViewRenderLayer"
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceCompat.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceCompat.kt
new file mode 100644
index 0000000..149888b
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceCompat.kt
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import android.opengl.EGL14
+import android.opengl.EGL15
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EGLSpec
+import androidx.hardware.SyncFence
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLSyncKHR
+import androidx.graphics.surface.SurfaceControlCompat
+
+/**
+ * A synchronization primitive which signals when hardware units have completed work on a
+ * particular resource. They initially start in an unsignaled state and make a one-time
+ * transaction to either a signaled or error state.
+ *
+ * [SyncFenceCompat] is a presentation fence used in combination with
+ * [SurfaceControlCompat.Transaction.setBuffer]. Note that depending on API level, this will
+ * utilize either [android.hardware.SyncFence] or [SyncFence].
+ */
+@RequiresApi(Build.VERSION_CODES.KITKAT)
+class SyncFenceCompat : AutoCloseable {
+    internal val mImpl: SyncFenceImpl
+
+    companion object {
+        /**
+         * Creates a native synchronization fence from an EGLSync object.
+         *
+         * @param egl an [EGLSpec] object to dictate the version of EGL and make EGL calls.
+         *
+         * @throws IllegalArgumentException if sync object creation fails.
+         */
+        @JvmStatic
+        fun createNativeSyncFence(egl: EGLSpec): SyncFenceCompat {
+            return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+                SyncFenceCompatVerificationHelper.createSyncFenceCompatV33()
+            } else {
+                val eglSync: EGLSyncKHR =
+                    egl.eglCreateSyncKHR(EGLExt.EGL_SYNC_NATIVE_FENCE_ANDROID, null)
+                        ?: throw IllegalArgumentException("Unable to create sync object")
+                val syncFenceCompat = SyncFenceCompat(egl.eglDupNativeFenceFDANDROID(eglSync))
+                egl.eglDestroySyncKHR(eglSync)
+
+                syncFenceCompat
+            }
+        }
+    }
+
+    internal constructor(syncFence: SyncFence) {
+        mImpl = SyncFenceV19(syncFence)
+    }
+
+    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+    internal constructor(syncFence: android.hardware.SyncFence) {
+        mImpl = SyncFenceV33(syncFence)
+    }
+
+    /**
+     * Waits for a [SyncFenceCompat] to signal for up to the timeout duration
+     *
+     * @param timeoutNanos time in nanoseconds to wait for before timing out.
+     */
+    fun await(timeoutNanos: Long): Boolean =
+        mImpl.await(timeoutNanos)
+
+    /**
+     * Waits forever for a [SyncFenceImpl] to signal
+     */
+    fun awaitForever(): Boolean =
+        mImpl.awaitForever()
+
+    /**
+     * Close the [SyncFenceImpl]
+     */
+    override fun close() {
+        mImpl.close()
+    }
+}
+
+/**
+ * Creates a native synchronization fence from an EGLSync object.
+ *
+ * @throws IllegalArgumentException if sync object creation fails.
+ */
+@RequiresApi(Build.VERSION_CODES.KITKAT)
+@JvmSynthetic
+fun EGLSpec.createNativeSyncFence(): SyncFenceCompat = SyncFenceCompat.createNativeSyncFence(this)
+
+/**
+ * Helper class to avoid class verification failures
+ */
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+internal class SyncFenceCompatVerificationHelper private constructor() {
+    companion object {
+        @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+        @androidx.annotation.DoNotInline
+        fun createSyncFenceCompatV33(): SyncFenceCompat {
+            val display = EGL15.eglGetPlatformDisplay(
+                EGL15.EGL_PLATFORM_ANDROID_KHR,
+                EGL14.EGL_DEFAULT_DISPLAY.toLong(),
+                longArrayOf(EGL14.EGL_NONE.toLong()),
+                0
+            )
+            if (display == EGL15.EGL_NO_DISPLAY) {
+                throw RuntimeException("no EGL display")
+            }
+            val error = EGL14.eglGetError()
+            if (error != EGL14.EGL_SUCCESS) {
+                throw RuntimeException("eglGetPlatformDisplay failed")
+            }
+
+            val eglSync = EGL15.eglCreateSync(
+                display,
+                android.opengl.EGLExt.EGL_SYNC_NATIVE_FENCE_ANDROID,
+                longArrayOf(),
+                0
+            )
+
+            val syncFenceCompat = SyncFenceCompat(
+                android.opengl.EGLExt.eglDupNativeFenceFDANDROID(
+                    display,
+                    eglSync
+                )
+            )
+            EGL15.eglDestroySync(display, eglSync)
+
+            return syncFenceCompat
+        }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceImpl.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceImpl.kt
new file mode 100644
index 0000000..66dc871
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceImpl.kt
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+internal interface SyncFenceImpl {
+    /**
+     * Waits for a [SyncFenceImpl] to signal for up to the timeout duration
+     *
+     * @param timeoutNanos time in nanoseconds to wait for before timing out.
+     */
+    fun await(timeoutNanos: Long): Boolean
+
+    /**
+     * Waits forever for a [SyncFenceImpl] to signal
+     */
+    fun awaitForever(): Boolean
+
+    /**
+     * Close the [SyncFenceImpl]
+     */
+    fun close()
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceV19.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceV19.kt
new file mode 100644
index 0000000..1623412
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceV19.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.hardware.SyncFence
+
+@RequiresApi(Build.VERSION_CODES.KITKAT)
+internal class SyncFenceV19(syncFence: SyncFence) : SyncFenceImpl {
+    internal val mSyncFence: SyncFence = syncFence
+
+    /**
+     * See [SyncFenceImpl.await]
+     */
+    override fun await(timeoutNanos: Long): Boolean {
+        return mSyncFence.await(timeoutNanos)
+    }
+
+    /**
+     * See [SyncFenceImpl.awaitForever]
+     */
+    override fun awaitForever(): Boolean {
+        return mSyncFence.awaitForever()
+    }
+
+    /**
+     * See [SyncFenceImpl.close]
+     */
+    override fun close() {
+        mSyncFence.close()
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceV33.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceV33.kt
new file mode 100644
index 0000000..abcb1a0
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SyncFenceV33.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2022 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.graphics.lowlatency
+
+import android.hardware.SyncFence
+import android.os.Build
+import androidx.annotation.RequiresApi
+import java.time.Duration
+
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+internal class SyncFenceV33 internal constructor(syncFence: SyncFence) : SyncFenceImpl {
+    internal val mSyncFence: SyncFence = syncFence
+
+    /**
+     * See [SyncFenceImpl.await]
+     */
+    override fun await(timeoutNanos: Long): Boolean {
+        return mSyncFence.await(Duration.ofNanos(timeoutNanos))
+    }
+
+    /**
+     * See [SyncFenceImpl.awaitForever]
+     */
+    override fun awaitForever(): Boolean {
+        return mSyncFence.awaitForever()
+    }
+
+    /**
+     * See [SyncFenceImpl.close]
+     */
+    override fun close() {
+        mSyncFence.close()
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLRenderer.kt
new file mode 100644
index 0000000..a23a80a
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLRenderer.kt
@@ -0,0 +1,741 @@
+/*
+ * Copyright 2022 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.graphics.opengl
+
+import android.graphics.SurfaceTexture
+import android.opengl.EGL14
+import android.opengl.EGLConfig
+import android.opengl.EGLSurface
+import android.view.Surface
+import android.view.SurfaceHolder
+import android.view.SurfaceView
+import android.view.TextureView
+import androidx.annotation.WorkerThread
+import androidx.graphics.opengl.egl.EGLConfigAttributes
+import androidx.graphics.opengl.egl.EGLManager
+import androidx.graphics.opengl.egl.EGLSpec
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.atomic.AtomicInteger
+
+/**
+ * Class responsible for coordination of requests to render into surfaces using OpenGL.
+ * This creates a backing thread to handle EGL dependencies and draw leveraging OpenGL across
+ * multiple [android.view.Surface] instances that can be attached and detached throughout
+ * the lifecycle of an application. Usage of this class is recommended to be done on the UI thread.
+ *
+ * @param eglSpecFactory Callback invoked to determine the EGL spec version to use
+ * for EGL management. This is invoked on the GL Thread
+ * @param eglConfigFactory Callback invoked to determine the appropriate EGLConfig used
+ * to create the EGL context. This is invoked on the GL Thread
+ */
+// GL is the industry standard for referencing OpenGL vs Gl (lowercase l)
+@Suppress("AcronymName")
+class GLRenderer(
+    eglSpecFactory: () -> EGLSpec = { EGLSpec.V14 },
+    eglConfigFactory: EGLManager.() -> EGLConfig = {
+        // 8 bit channels should always be supported
+        loadConfig(EGLConfigAttributes.RGBA_8888)
+            ?: throw IllegalStateException("Unable to obtain config for 8 bit EGL " +
+                "configuration")
+    }
+) {
+
+    /**
+     * Factory method to determine which [EGLSpec] the underlying [EGLManager] implementation uses
+     */
+    private val mEglSpecFactory: () -> EGLSpec = eglSpecFactory
+
+    /**
+     * Factory method used to create the corresponding EGLConfig used to create the EGLRenderer used
+     * by [EGLManager]
+     */
+    private val mEglConfigFactory: EGLManager.() -> EGLConfig = eglConfigFactory
+
+    /**
+     * GLThread used to manage EGL dependencies, create EGLSurfaces and draw content
+     */
+    private var mGLThread: GLThread? = null
+
+    /**
+     * Collection of [RenderTarget] instances that are managed by the GLRenderer
+     */
+    private val mRenderTargets = ArrayList<RenderTarget>()
+
+    /**
+     * Collection of callbacks to be invoked when the EGL dependencies are initialized
+     * or torn down
+     */
+    private val mEglContextCallback = HashSet<EGLContextCallback>()
+
+    /**
+     * Removes the corresponding [RenderTarget] from management of the GLThread.
+     * This destroys the EGLSurface associated with this surface and subsequent requests
+     * to render into the surface with the provided token are ignored.
+     *
+     * If the [cancelPending] flag is set to true, any queued request
+     * to render that has not started yet is cancelled. However, if this is invoked in the
+     * middle of the frame being rendered, it will continue to process the current frame.
+     *
+     * Additionally if this flag is false, all pending requests to render will be processed
+     * before the [RenderTarget] is detached.
+     *
+     * Note the detach operation will only occur if the GLRenderer is started, that is if
+     * [isRunning] returns true. Otherwise this is a no-op. GLRenderer will automatically detach all
+     * [RenderTarget] instances as part of its teardown process.
+     */
+    @JvmOverloads
+    fun detach(
+        target: RenderTarget,
+        cancelPending: Boolean,
+        @WorkerThread onDetachComplete: ((RenderTarget) -> Unit)? = null
+    ) {
+        if (mRenderTargets.contains(target)) {
+            mGLThread?.detachSurface(target.token, cancelPending) {
+                // WorkerThread
+                target.release()
+                target.onDetach.invoke()
+                onDetachComplete?.invoke(target)
+            }
+            mRenderTargets.remove(target)
+        }
+    }
+
+    /**
+     * Determines if the GLThread has been started. That is [start] has been invoked
+     * on this GLRenderer instance without a corresponding call to [stop].
+     */
+    fun isRunning(): Boolean = mGLThread != null
+
+    /**
+     * Starts the GLThread. After this method is called, consumers can attempt
+     * to attach [android.view.Surface] instances through [attach] as well as
+     * schedule content to be drawn through [requestRender]
+     *
+     * @param name Optional name to provide to the GLThread
+     *
+     * @throws IllegalStateException if EGLConfig with desired attributes cannot be created
+     */
+    @JvmOverloads
+    fun start(
+        name: String = "GLThread",
+    ) {
+        if (mGLThread == null) {
+            GLThread.log("starting thread...")
+            mGLThread = GLThread(
+                name,
+                mEglSpecFactory,
+                mEglConfigFactory
+            ).apply {
+                start()
+                if (!mEglContextCallback.isEmpty()) {
+                    // Add a copy of the current collection as new entries to mEglContextCallback
+                    // could be mistakenly added multiple times.
+                    this.addEGLCallbacks(ArrayList<EGLContextCallback>(mEglContextCallback))
+                }
+            }
+        }
+    }
+
+    /**
+     * Mark the corresponding surface session with the given token as dirty
+     * to schedule a call to [RenderCallback#onDrawFrame].
+     * If there is already a queued request to render into the provided surface with
+     * the specified token, this request is ignored.
+     *
+     * Note the render operation will only occur if the GLRenderer is started, that is if
+     * [isRunning] returns true. Otherwise this is a no-op.
+     *
+     * @param target RenderTarget to be re-rendered
+     * @param onRenderComplete Optional callback invoked on the backing thread after the frame has
+     * been rendered.
+     */
+    @JvmOverloads
+    fun requestRender(target: RenderTarget, onRenderComplete: ((RenderTarget) -> Unit)? = null) {
+        val token = target.token
+        val callbackRunnable = if (onRenderComplete != null) {
+            Runnable {
+                onRenderComplete.invoke(target)
+            }
+        } else {
+            null
+        }
+        mGLThread?.requestRender(token, callbackRunnable)
+    }
+
+    /**
+     * Resize the corresponding surface associated with the RenderTarget to the specified
+     * width and height and re-render. This will destroy the EGLSurface created by
+     * [RenderCallback.onSurfaceCreated] and invoke it again with the updated dimensions.
+     * An optional callback is invoked on the backing thread after the resize operation
+     * is complete.
+     *
+     * Note the resize operation will only occur if the GLRenderer is started, that is if
+     * [isRunning] returns true. Otherwise this is a no-op.
+     *
+     * @param target RenderTarget to be resized
+     * @param width Updated width of the corresponding surface
+     * @param height Updated height of the corresponding surface
+     * @param onResizeComplete Optional callback invoked on the backing thread when the resize
+     * operation is complete
+     */
+    @JvmOverloads
+    fun resize(
+        target: RenderTarget,
+        width: Int,
+        height: Int,
+        onResizeComplete: ((RenderTarget) -> Unit)? = null
+    ) {
+        val token = target.token
+        val callbackRunnable = if (onResizeComplete != null) {
+            Runnable {
+                onResizeComplete.invoke(target)
+            }
+        } else {
+            null
+        }
+        mGLThread?.resizeSurface(token, width, height, callbackRunnable)
+    }
+
+    /**
+     * Stop the corresponding GL thread. This destroys all EGLSurfaces as well
+     * as any other EGL dependencies. All queued requests that have not been processed
+     * yet are cancelled.
+     *
+     * Note the stop operation will only occur if the GLRenderer was previously started, that is
+     * [isRunning] returns true. Otherwise this is a no-op.
+     *
+     * @param cancelPending If true all pending requests and cancelled and the backing thread is
+     * torn down immediately. If false, all pending requests are processed first before tearing
+     * down the backing thread. Subsequent requests made after this call are ignored.
+     * @param onStop Optional callback invoked on the backing thread after it is torn down.
+     */
+    @JvmOverloads
+    fun stop(cancelPending: Boolean, onStop: ((GLRenderer) -> Unit)? = null) {
+        GLThread.log("stopping thread...")
+        // Make a copy of the render targets to call cleanup operations on to avoid potential
+        // concurrency issues.
+        // This method will clear the existing collection and we do not want to potentially tear
+        // down a target that was attached after a subsequent call to start if the tear down
+        // callback execution is delayed if previously pending requests have not been cancelled
+        // (i.e. cancelPending is false)
+        val renderTargets = ArrayList(mRenderTargets)
+        mGLThread?.tearDown(cancelPending) {
+            // No need to call target.detach as this callback is invoked after
+            // the dependencies are cleaned up
+            for (target in renderTargets) {
+                target.release()
+                target.onDetach.invoke()
+            }
+            onStop?.invoke(this@GLRenderer)
+        }
+        mGLThread = null
+        mRenderTargets.clear()
+    }
+
+    /**
+     * Add an [EGLContextCallback] to receive callbacks for construction and
+     * destruction of EGL dependencies.
+     *
+     * These callbacks are invoked on the backing thread.
+     */
+    @Suppress("AcronymName")
+    fun registerEGLContextCallback(callback: EGLContextCallback) {
+        mEglContextCallback.add(callback)
+        mGLThread?.addEGLCallback(callback)
+    }
+
+    /**
+     * Remove [EGLContextCallback] to no longer receive callbacks for construction and
+     * destruction of EGL dependencies.
+     *
+     * These callbacks are invoked on the backing thread
+     */
+    @Suppress("AcronymName")
+    fun unregisterEGLContextCallback(callback: EGLContextCallback) {
+        mEglContextCallback.remove(callback)
+        mGLThread?.removeEGLCallback(callback)
+    }
+
+    /**
+     * Callbacks invoked when the GL dependencies are created and destroyed.
+     * These are logical places to setup and tear down any dependencies that are used
+     * for drawing content within a frame (ex. compiling shaders)
+     */
+    @Suppress("AcronymName")
+    interface EGLContextCallback {
+
+        /**
+         * Callback invoked on the backing thread after EGL dependencies are initialized.
+         * This is guaranteed to be invoked before any instance of
+         * [RenderCallback.onSurfaceCreated] is called.
+         * This will be invoked lazily before the first request to [GLRenderer.requestRender]
+         */
+        // Suppressing CallbackMethodName due to b/238939160
+        @Suppress("AcronymName", "CallbackMethodName")
+        @WorkerThread
+        fun onEGLContextCreated(eglManager: EGLManager)
+
+        /**
+         * Callback invoked on the backing thread before EGL dependencies are about to be torn down.
+         * This is invoked after [GLRenderer.stop] is processed.
+         */
+        // Suppressing CallbackMethodName due to b/238939160
+        @Suppress("AcronymName", "CallbackMethodName")
+        @WorkerThread
+        fun onEGLContextDestroyed(eglManager: EGLManager)
+    }
+
+    /**
+     * Interface used for creating an [EGLSurface] with a user defined configuration
+     * from the provided surface as well as a callback used to render content into the surface
+     * for a given frame
+     */
+    interface RenderCallback {
+        /**
+         * Used to create a corresponding [EGLSurface] from the provided
+         * [android.view.Surface] instance. This enables consumers to configure
+         * the corresponding [EGLSurface] they wish to render into.
+         * The [EGLSurface] created here is guaranteed to be the current surface
+         * before [onDrawFrame] is called. That is, implementations of onDrawFrame
+         * do not need to call eglMakeCurrent on this [EGLSurface].
+         *
+         * This method is invoked on the GL thread.
+         *
+         * The default implementation will create a window surface with EGL_WIDTH and EGL_HEIGHT
+         * set to [width] and [height] respectively.
+         * Implementations can override this method to provide additional [EGLConfigAttributes]
+         * for this surface (ex. [EGL14.EGL_SINGLE_BUFFER].
+         *
+         * Implementations can return null to indicate the default surface should be used.
+         * This is helpful in situations where content is to be rendered within a frame buffer
+         * object instead of to an [EGLSurface]
+         *
+         * @param spec EGLSpec used to create the corresponding EGLSurface
+         * @param config EGLConfig used to create the corresponding EGLSurface
+         * @param surface [android.view.Surface] used to create an EGLSurface from
+         * @param width Desired width of the surface to create
+         * @param height Desired height of the surface to create
+         */
+        @WorkerThread
+        fun onSurfaceCreated(
+            spec: EGLSpec,
+            config: EGLConfig,
+            surface: Surface,
+            width: Int,
+            height: Int
+        ): EGLSurface? =
+            // Always default to creating an EGL window surface
+            // Despite having access to the width and height here, do not explicitly
+            // pass in EGLConfigAttributes specifying the EGL_WIDTH and EGL_HEIGHT parameters
+            // as those are not accepted parameters for eglCreateWindowSurface but they are
+            // for other EGL Surface factory methods such as eglCreatePBufferSurface
+            // See accepted parameters here:
+            // https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglCreateWindowSurface.xhtml
+            // and here
+            // https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglCreatePbufferSurface.xhtml
+            spec.eglCreateWindowSurface(config, surface, null)
+
+        /**
+         * Callback used to issue OpenGL drawing commands into the [EGLSurface]
+         * created in [onSurfaceCreated]. This [EGLSurface] is guaranteed to
+         * be current before this callback is invoked and [EGLManager.swapAndFlushBuffers]
+         * will be invoked afterwards. If additional scratch [EGLSurface]s are used
+         * here it is up to the implementation of this method to ensure that the proper
+         * surfaces are made current and the appropriate swap buffers call is made
+         *
+         * This method is invoked on the backing thread
+         *
+         * @param eglManager Handle to EGL dependencies
+         */
+        @WorkerThread
+        fun onDrawFrame(eglManager: EGLManager)
+    }
+
+    /**
+     * Adds the [android.view.Surface] to be managed by the GLThread.
+     * A corresponding [EGLSurface] is created on the GLThread as well as a callback
+     * for rendering into the surface through [RenderCallback].
+     * Unlike the other [attach] methods that consume a [SurfaceView] or [TextureView],
+     * this method does not handle any lifecycle callbacks associated with the target surface.
+     * Therefore it is up to the consumer to properly setup/teardown resources associated with
+     * this surface.
+     *
+     * @param surface Target surface to be managed by the backing thread
+     * @param width Desired width of the [surface]
+     * @param height Desired height of the [surface]
+     * @param renderer Callbacks used to create a corresponding [EGLSurface] from the
+     * given surface as well as render content into the created [EGLSurface]
+     * @return [RenderTarget] used for subsequent requests to communicate
+     * with the provided Surface (ex. [requestRender] or [detach]).
+     *
+     * @throws IllegalStateException If this method was called when the GLThread has not started
+     * (i.e. start has not been called)
+     */
+    fun attach(surface: Surface, width: Int, height: Int, renderer: RenderCallback): RenderTarget {
+        val thread = mGLThread
+        if (thread != null) {
+            val token = sToken.getAndIncrement()
+            thread.attachSurface(token, surface, width, height, renderer)
+            return RenderTarget(token, this).also { mRenderTargets.add(it) }
+        } else {
+            throw IllegalStateException("GLThread not started, did you forget to call start?")
+        }
+    }
+
+    /**
+     * Creates a new [RenderTarget] without a corresponding [android.view.Surface].
+     * This avoids creation of an [EGLSurface] which is useful in scenarios where only
+     * rendering to a frame buffer object is required.
+     *
+     * @param width Desired width of the [RenderTarget]
+     * @param height Desired height of the [RenderTarget]
+     * @param renderer Callbacks used to issue OpenGL commands to the [RenderTarget]
+     * @return [RenderTarget] used for subsequent requests to render through
+     * [RenderTarget.requestRender] or to remove itself from the [GLRenderer] through
+     * [RenderTarget.detach]
+     *
+     * @throws IllegalStateException If this method was called when the GLThread has not started
+     * (i.e. start has not been called)
+     */
+    fun createRenderTarget(width: Int, height: Int, renderer: RenderCallback): RenderTarget {
+        val thread = mGLThread
+        if (thread != null) {
+            val token = sToken.getAndIncrement()
+            thread.attachSurface(
+                token,
+                null,
+                width,
+                height,
+                renderer
+            )
+            return RenderTarget(token, this).also { mRenderTargets.add(it) }
+        } else {
+            throw IllegalStateException("GLThread not started, did you forget to call start?")
+        }
+    }
+
+    /**
+     * Adds the [android.view.Surface] provided by the given [SurfaceView] to be managed by the
+     * backing thread.
+     *
+     * A corresponding [EGLSurface] is created on the GLThread as well as a callback
+     * for rendering into the surface through [RenderCallback].
+     *
+     * This method automatically configures a [SurfaceHolder.Callback] used to attach the
+     * [android.view.Surface] when the underlying [SurfaceHolder] that contains the surface is
+     * available. Similarly this surface will be detached from [GLRenderer] when the surface provided
+     * by the [SurfaceView] is destroyed (i.e. [SurfaceHolder.Callback.surfaceDestroyed] is called.
+     *
+     * If the [android.view.Surface] is already available by the time this method is invoked,
+     * it is attached synchronously.
+     *
+     * @param surfaceView SurfaceView that provides the surface to be rendered by the backing thread
+     * @param renderer callbacks used to create a corresponding [EGLSurface] from the
+     * given surface as well as render content into the created [EGLSurface]
+     * @return [RenderTarget] used for subsequent requests to communicate
+     * with the provided Surface (ex. [requestRender] or [detach]).
+     *
+     * @throws IllegalStateException If this method was called when the GLThread has not started
+     * (i.e. start has not been called)
+     */
+    fun attach(surfaceView: SurfaceView, renderer: RenderCallback): RenderTarget {
+        val thread = mGLThread
+        if (thread != null) {
+            val token = sToken.getAndIncrement()
+            val holder = surfaceView.holder
+            val callback = object : SurfaceHolder.Callback2 {
+
+                var isAttached = false
+
+                /**
+                 * Optional condition that maybe used if we are issuing a blocking call to render
+                 * in [SurfaceHolder.Callback2.surfaceRedrawNeeded]
+                 * In this case we need to signal the condition of either the request to render
+                 * has completed, or if the RenderTarget has been detached and the pending
+                 * render request is cancelled.
+                 */
+                @Volatile var renderLatch: CountDownLatch? = null
+
+                /**
+                 * [CountDownLatch] used when issuing a blocking call to
+                 * [SurfaceHolder.Callback.surfaceDestroyed]
+                 * In this case we need to signal the condition of either the request to detach
+                 * has completed in case the GLRenderer has been forcefully stopped via
+                 * [GLRenderer.stop] with the cancel pending flag set to true.
+                 */
+                val detachLatch: CountDownLatch = CountDownLatch(1)
+
+                val renderTarget = RenderTarget(token, this@GLRenderer) @WorkerThread {
+                    isAttached = false
+                    // SurfaceHolder.add/remove callback is thread safe
+                    holder.removeCallback(this)
+                    // Countdown in case we have been detached while waiting for a render
+                    // to be completed
+                    renderLatch?.countDown()
+                    detachLatch.countDown()
+                }
+
+                override fun surfaceRedrawNeeded(p0: SurfaceHolder) {
+                    // If the [RenderTarget] has already been detached then skip rendering
+                    if (detachLatch.count > 0) {
+                        val latch = CountDownLatch(1).also { renderLatch = it }
+                        // Request a render and block until the rendering is complete
+                        // surfaceRedrawNeeded is invoked on older API levels and is replaced with
+                        // surfaceRedrawNeededAsync for newer API levels which is non-blocking
+                        renderTarget.requestRender @WorkerThread {
+                            latch.countDown()
+                        }
+                        latch.await()
+                        renderLatch = null
+                    }
+                }
+
+                override fun surfaceRedrawNeededAsync(
+                    holder: SurfaceHolder,
+                    drawingFinished: Runnable
+                ) {
+                    renderTarget.requestRender {
+                        drawingFinished.run()
+                    }
+                }
+
+                override fun surfaceCreated(holder: SurfaceHolder) {
+                    // NO-OP wait until surfaceChanged which is guaranteed to be called and also
+                    // provides the appropriate width height of the surface
+                }
+
+                override fun surfaceChanged(
+                    holder: SurfaceHolder,
+                    format: Int,
+                    width: Int,
+                    height: Int
+                ) {
+                    if (!isAttached) {
+                        thread.attachSurface(token, holder.surface, width, height, renderer)
+                        isAttached = true
+                    } else {
+                        renderTarget.resize(width, height)
+                    }
+                    renderTarget.requestRender()
+                }
+
+                override fun surfaceDestroyed(holder: SurfaceHolder) {
+                    // Issue a request to detech the [RenderTarget]. Even if it was
+                    // previously detached this request is a no-op and the corresponding
+                    // [CountDownLatch] will signal when the [RenderTarget] detachment is complete
+                    // or instantaneously if it was already detached
+                    renderTarget.detach(true)
+                    detachLatch.await()
+                }
+            }
+            holder.addCallback(callback)
+            if (holder.surface != null && holder.surface.isValid) {
+                thread.attachSurface(
+                    token,
+                    holder.surface,
+                    surfaceView.width,
+                    surfaceView.height,
+                    renderer
+                )
+            }
+            mRenderTargets.add(callback.renderTarget)
+            return callback.renderTarget
+        } else {
+            throw IllegalStateException("GLThread not started, did you forget to call start?")
+        }
+    }
+
+    /**
+     * Adds the [android.view.Surface] provided by the given [TextureView] to be managed by the
+     * backing thread.
+     *
+     * A corresponding [EGLSurface] is created on the GLThread as well as a callback
+     * for rendering into the surface through [RenderCallback].
+     *
+     * This method automatically configures a [TextureView.SurfaceTextureListener] used to create a
+     * [android.view.Surface] when the underlying [SurfaceTexture] is available.
+     * Similarly this surface will be detached from [GLRenderer] if the underlying [SurfaceTexture]
+     * is destroyed (i.e. [TextureView.SurfaceTextureListener.onSurfaceTextureDestroyed] is called.
+     *
+     * If the [SurfaceTexture] is already available by the time this method is called, then it is
+     * attached synchronously.
+     *
+     * @param textureView TextureView that provides the surface to be rendered into on the GLThread
+     * @param renderer callbacks used to create a corresponding [EGLSurface] from the
+     * given surface as well as render content into the created [EGLSurface]
+     * @return [RenderTarget] used for subsequent requests to communicate
+     * with the provided Surface (ex. [requestRender] or [detach]).
+     *
+     * @throws IllegalStateException If this method was called when the GLThread has not started
+     * (i.e. start has not been called)
+     */
+    fun attach(textureView: TextureView, renderer: RenderCallback): RenderTarget {
+        val thread = mGLThread
+        if (thread != null) {
+            val token = sToken.getAndIncrement()
+            val detachLatch = CountDownLatch(1)
+            val renderTarget = RenderTarget(token, this) @WorkerThread {
+                textureView.handler?.post {
+                    textureView.surfaceTextureListener = null
+                }
+                detachLatch.countDown()
+            }
+            textureView.surfaceTextureListener = object : TextureView.SurfaceTextureListener {
+                override fun onSurfaceTextureAvailable(
+                    surfaceTexture: SurfaceTexture,
+                    width: Int,
+                    height: Int
+                ) {
+                    thread.attachSurface(token, Surface(surfaceTexture), width, height, renderer)
+                }
+
+                override fun onSurfaceTextureSizeChanged(
+                    texture: SurfaceTexture,
+                    width: Int,
+                    height: Int
+                ) {
+                    renderTarget.resize(width, height)
+                    renderTarget.requestRender()
+                }
+
+                override fun onSurfaceTextureDestroyed(p0: SurfaceTexture): Boolean {
+                    // Issue a request to detech the [RenderTarget]. Even if it was
+                    // previously detached this request is a no-op and the corresponding
+                    // [CountDownLatch] will signal when the [RenderTarget] detachment is complete
+                    // or instantaneously if it was already detached
+                    renderTarget.detach(true)
+                    detachLatch.await()
+                    return true
+                }
+
+                override fun onSurfaceTextureUpdated(p0: SurfaceTexture) {
+                    // NO-OP
+                }
+            }
+            if (textureView.isAvailable) {
+                thread.attachSurface(
+                    token,
+                    Surface(textureView.surfaceTexture),
+                    textureView.width,
+                    textureView.height,
+                    renderer
+                )
+            }
+            mRenderTargets.add(renderTarget)
+            return renderTarget
+        } else {
+            throw IllegalStateException("GLThread not started, did you forget to call start?")
+        }
+    }
+
+    /**
+     * Handle to a [android.view.Surface] that is given to [GLRenderer] to handle
+     * rendering.
+     */
+    class RenderTarget internal constructor(
+        internal val token: Int,
+        glManager: GLRenderer,
+        @WorkerThread internal val onDetach: () -> Unit = {}
+    ) {
+
+        @Volatile
+        private var mManager: GLRenderer? = glManager
+
+        internal fun release() {
+            mManager = null
+        }
+
+        /**
+         * Request that this [RenderTarget] should have its contents redrawn.
+         * This consumes an optional callback that is invoked on the backing thread when
+         * the rendering is completed.
+         *
+         * Note the render operation will only occur if the RenderTarget is attached, that is
+         * [isAttached] returns true. If the [RenderTarget] is detached or the [GLRenderer] that
+         * created this RenderTarget is stopped, this is a no-op.
+         *
+         * @param onRenderComplete Optional callback called on the backing thread when
+         * rendering is finished
+         */
+        @JvmOverloads
+        fun requestRender(@WorkerThread onRenderComplete: ((RenderTarget) -> Unit)? = null) {
+            mManager?.requestRender(this@RenderTarget, onRenderComplete)
+        }
+
+        /**
+         * Determines if the current RenderTarget is attached to GLRenderer.
+         * This is true until [detach] has been called. If the RenderTarget is no longer
+         * in an attached state (i.e. this returns false). Subsequent calls to [requestRender]
+         * will be ignored.
+         */
+        fun isAttached(): Boolean = mManager != null
+
+        /**
+         * Resize the RenderTarget to the specified width and height.
+         * This will destroy the EGLSurface created by [RenderCallback.onSurfaceCreated]
+         * and invoke it again with the updated dimensions.
+         * An optional callback is invoked on the backing thread after the resize operation
+         * is complete
+         *
+         * Note the resize operation will only occur if the RenderTarget is attached, that is
+         * [isAttached] returns true. If the [RenderTarget] is detached or the [GLRenderer] that
+         * created this RenderTarget is stopped, this is a no-op.
+         *
+         * @param width New target width to resize the RenderTarget
+         * @param height New target height to resize the RenderTarget
+         * @param onResizeComplete Optional callback invoked after the resize is complete
+         */
+        @JvmOverloads
+        fun resize(
+            width: Int,
+            height: Int,
+            @WorkerThread onResizeComplete: ((RenderTarget) -> Unit)? = null
+        ) {
+            mManager?.resize(this, width, height, onResizeComplete)
+        }
+
+        /**
+         * Removes the corresponding [RenderTarget] from management of the GLThread.
+         * This destroys the EGLSurface associated with this surface and subsequent requests
+         * to render into the surface with the provided token are ignored.
+         *
+         * If the [cancelPending] flag is set to true, any queued request
+         * to render that has not started yet is cancelled. However, if this is invoked in the
+         * middle of the frame being rendered, it will continue to process the current frame.
+         *
+         * Additionally if this flag is false, all pending requests to render will be processed
+         * before the [RenderTarget] is detached.
+         *
+         * This is a convenience method around [GLRenderer.detach]
+         *
+         * Note the detach operation will only occur if the RenderTarget is attached, that is
+         * [isAttached] returns true. If the [RenderTarget] is detached or the [GLRenderer] that
+         * created this RenderTarget is stopped, this is a no-op.
+         */
+        @JvmOverloads
+        fun detach(cancelPending: Boolean, onDetachComplete: ((RenderTarget) -> Unit)? = null) {
+            mManager?.detach(this, cancelPending, onDetachComplete)
+        }
+    }
+
+    companion object {
+        /**
+         * Counter used to issue unique identifiers for surfaces that are managed by GLRenderer
+         */
+        private val sToken = AtomicInteger()
+    }
+}
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLThread.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLThread.kt
new file mode 100644
index 0000000..acde030
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLThread.kt
@@ -0,0 +1,411 @@
+/*
+ * Copyright 2022 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.graphics.opengl
+
+import android.opengl.EGL14
+import android.opengl.EGLConfig
+import android.opengl.EGLSurface
+import android.os.Handler
+import android.os.HandlerThread
+import android.os.SystemClock
+import android.util.Log
+import android.view.Surface
+import androidx.annotation.AnyThread
+import androidx.annotation.WorkerThread
+import androidx.graphics.opengl.GLRenderer.EGLContextCallback
+import androidx.graphics.opengl.GLRenderer.RenderCallback
+import androidx.graphics.opengl.egl.EGLManager
+import androidx.graphics.opengl.egl.EGLSpec
+import java.util.concurrent.atomic.AtomicBoolean
+
+/**
+ * Thread responsible for management of EGL dependencies, setup and teardown
+ * of EGLSurface instances as well as delivering callbacks to draw a frame
+ */
+internal class GLThread(
+    name: String = "GLThread",
+    private val mEglSpecFactory: () -> EGLSpec,
+    private val mEglConfigFactory: EGLManager.() -> EGLConfig,
+) : HandlerThread(name) {
+
+    // Accessed on internal HandlerThread
+    private val mIsTearingDown = AtomicBoolean(false)
+    private var mEglManager: EGLManager? = null
+    private val mSurfaceSessions = HashMap<Int, SurfaceSession>()
+    private var mHandler: Handler? = null
+    private val mEglContextCallback = HashSet<EGLContextCallback>()
+
+    override fun start() {
+        super.start()
+        mHandler = Handler(looper)
+    }
+
+    /**
+     * Adds the given [android.view.Surface] to be managed by the GLThread.
+     * A corresponding [EGLSurface] is created on the GLThread as well as a callback
+     * for rendering into the surface through [RenderCallback].
+     * @param surface intended to be be rendered into on the GLThread
+     * @param width Desired width of the [surface]
+     * @param height Desired height of the [surface]
+     * @param renderer callbacks used to create a corresponding [EGLSurface] from the
+     * given surface as well as render content into the created [EGLSurface]
+     * @return Identifier used for subsequent requests to communicate
+     * with the provided Surface (ex. [requestRender] or [detachSurface]
+     */
+    @AnyThread
+    fun attachSurface(
+        token: Int,
+        surface: Surface?,
+        width: Int,
+        height: Int,
+        renderer: RenderCallback
+    ) {
+        withHandler {
+            post(token) {
+                attachSurfaceSessionInternal(
+                    SurfaceSession(token, surface, renderer).apply {
+                        this.width = width
+                        this.height = height
+                    }
+                )
+            }
+        }
+    }
+
+    @AnyThread
+    fun resizeSurface(token: Int, width: Int, height: Int, callback: Runnable? = null) {
+        withHandler {
+            post(token) {
+                resizeSurfaceSessionInternal(token, width, height)
+                requestRenderInternal(token)
+                callback?.run()
+            }
+        }
+    }
+
+    @AnyThread
+    fun addEGLCallbacks(callbacks: ArrayList<EGLContextCallback>) {
+        withHandler {
+            post {
+                mEglContextCallback.addAll(callbacks)
+                mEglManager?.let {
+                    for (callback in callbacks) {
+                        callback.onEGLContextCreated(it)
+                    }
+                }
+            }
+        }
+    }
+
+    @AnyThread
+    fun addEGLCallback(callbacks: EGLContextCallback) {
+        withHandler {
+            post {
+                mEglContextCallback.add(callbacks)
+                // If EGL dependencies are already initialized, immediately invoke
+                // the added callback
+                mEglManager?.let {
+                    callbacks.onEGLContextCreated(it)
+                }
+            }
+        }
+    }
+
+    @AnyThread
+    fun removeEGLCallback(callbacks: EGLContextCallback) {
+        withHandler {
+            post {
+                mEglContextCallback.remove(callbacks)
+            }
+        }
+    }
+
+    /**
+     * Removes the corresponding [android.view.Surface] from management of the GLThread.
+     * This destroys the EGLSurface associated with this surface and subsequent requests
+     * to render into the surface with the provided token are ignored. Any queued request
+     * to render to the corresponding [SurfaceSession] that has not started yet is cancelled.
+     * However, if this is invoked in the middle of the frame being rendered, it will continue to
+     * process the current frame.
+     */
+    @AnyThread
+    fun detachSurface(
+        token: Int,
+        cancelPending: Boolean,
+        callback: Runnable?
+    ) {
+        log("dispatching request to detach surface w/ token: $token")
+        withHandler {
+            if (cancelPending) {
+                removeCallbacksAndMessages(token)
+            }
+            post(token) {
+                detachSurfaceSessionInternal(token, callback)
+            }
+        }
+    }
+
+    /**
+     * Cancel all pending requests to all currently managed [SurfaceSession] instances,
+     * destroy all EGLSurfaces, teardown EGLManager and quit this thread
+     */
+    @AnyThread
+    fun tearDown(cancelPending: Boolean, callback: Runnable?) {
+        withHandler {
+            if (cancelPending) {
+                removeCallbacksAndMessages(null)
+            }
+            post {
+                releaseResourcesInternalAndQuit(callback)
+            }
+            mIsTearingDown.set(true)
+        }
+    }
+
+    /**
+     * Mark the corresponding surface session with the given token as dirty
+     * to schedule a call to [RenderCallback#onDrawFrame].
+     * If there is already a queued request to render into the provided surface with
+     * the specified token, this request is ignored.
+     */
+    @AnyThread
+    fun requestRender(token: Int, callback: Runnable? = null) {
+        log("dispatching request to render for token: $token")
+        withHandler {
+            post(token) {
+                requestRenderInternal(token)
+                callback?.run()
+            }
+        }
+    }
+
+    /**
+     * Lazily creates an [EGLManager] instance from the given [mEglSpecFactory]
+     * used to determine the configuration. This result is cached across calls
+     * unless [tearDown] has been called.
+     */
+    @WorkerThread
+    fun obtainEGLManager(): EGLManager =
+        mEglManager ?: EGLManager(mEglSpecFactory.invoke()).also {
+            it.initialize()
+            val config = mEglConfigFactory.invoke(it)
+            it.createContext(config)
+            for (callback in mEglContextCallback) {
+                callback.onEGLContextCreated(it)
+            }
+            mEglManager = it
+        }
+
+    @WorkerThread
+    private fun disposeSurfaceSession(session: SurfaceSession) {
+        val eglSurface = session.eglSurface
+        if (eglSurface != null && eglSurface != EGL14.EGL_NO_SURFACE) {
+            obtainEGLManager().eglSpec.eglDestroySurface(eglSurface)
+            session.eglSurface = null
+        }
+    }
+
+    /**
+     * Helper method to obtain the cached EGLSurface for the given [SurfaceSession],
+     * creating one if it does not previously exist
+     */
+    @WorkerThread
+    private fun obtainEGLSurfaceForSession(session: SurfaceSession): EGLSurface? {
+        return if (session.eglSurface != null) {
+            session.eglSurface
+        } else {
+            createEGLSurfaceForSession(
+                session.surface,
+                session.width,
+                session.height,
+                session.surfaceRenderer
+            ).also {
+                session.eglSurface = it
+            }
+        }
+    }
+
+    /**
+     * Helper method to create the corresponding EGLSurface from the [SurfaceSession] instance
+     * Consumers are expected to teardown the previously existing EGLSurface instance if it exists
+     */
+    @WorkerThread
+    private fun createEGLSurfaceForSession(
+        surface: Surface?,
+        width: Int,
+        height: Int,
+        surfaceRenderer: RenderCallback
+    ): EGLSurface? {
+        with(obtainEGLManager()) {
+            return if (surface != null) {
+                surfaceRenderer.onSurfaceCreated(
+                    eglSpec,
+                    // Successful creation of EGLManager ensures non null EGLConfig
+                    eglConfig!!,
+                    surface,
+                    width,
+                    height
+                )
+            } else {
+                null
+            }
+        }
+    }
+
+    @WorkerThread
+    private fun releaseResourcesInternalAndQuit(callback: Runnable?) {
+        val eglManager = obtainEGLManager()
+        for (session in mSurfaceSessions) {
+            disposeSurfaceSession(session.value)
+        }
+        callback?.run()
+        mSurfaceSessions.clear()
+        for (eglCallback in mEglContextCallback) {
+            eglCallback.onEGLContextDestroyed(eglManager)
+        }
+        mEglContextCallback.clear()
+        eglManager.release()
+        mEglManager = null
+        quit()
+    }
+
+    @WorkerThread
+    private fun requestRenderInternal(token: Int) {
+        log("requesting render for token: $token")
+        mSurfaceSessions[token]?.let { surfaceSession ->
+            val eglManager = obtainEGLManager()
+            val eglSurface = obtainEGLSurfaceForSession(surfaceSession)
+            if (eglSurface != null) {
+                eglManager.makeCurrent(eglSurface)
+            } else {
+                eglManager.makeCurrent(eglManager.defaultSurface)
+            }
+
+            val width = surfaceSession.width
+            val height = surfaceSession.height
+            if (width > 0 && height > 0) {
+                surfaceSession.surfaceRenderer.onDrawFrame(eglManager)
+            }
+
+            if (eglSurface != null) {
+                eglManager.swapAndFlushBuffers()
+            }
+        }
+    }
+
+    @WorkerThread
+    private fun attachSurfaceSessionInternal(surfaceSession: SurfaceSession) {
+        mSurfaceSessions[surfaceSession.surfaceToken] = surfaceSession
+    }
+
+    @WorkerThread
+    private fun resizeSurfaceSessionInternal(
+        token: Int,
+        width: Int,
+        height: Int
+    ) {
+        mSurfaceSessions[token]?.let { surfaceSession ->
+            surfaceSession.apply {
+                this.width = width
+                this.height = height
+            }
+            disposeSurfaceSession(surfaceSession)
+            obtainEGLSurfaceForSession(surfaceSession)
+        }
+    }
+
+    @WorkerThread
+    private fun detachSurfaceSessionInternal(token: Int, callback: Runnable?) {
+        val session = mSurfaceSessions.remove(token)
+        if (session != null) {
+            disposeSurfaceSession(session)
+        }
+        callback?.run()
+    }
+
+    /**
+     * Helper method that issues a callback on the handler instance for this thread
+     * ensuring proper nullability checks are handled.
+     * This assumes that that [GLRenderer.start] has been called before attempts
+     * to interact with the corresponding Handler are made with this method
+     */
+    private inline fun withHandler(block: Handler.() -> Unit) {
+        val handler = mHandler
+            ?: throw IllegalStateException("Did you forget to call GLThread.start()?")
+        if (!mIsTearingDown.get()) {
+            block(handler)
+        }
+    }
+
+    companion object {
+
+        private const val DEBUG = true
+        private const val TAG = "GLThread"
+        internal fun log(msg: String) {
+            if (DEBUG) {
+                Log.v(TAG, msg)
+            }
+        }
+    }
+
+    private class SurfaceSession(
+        /**
+         * Identifier used to lookup the mapping of this surface session.
+         * Consumers are expected to provide this identifier to operate on the corresponding
+         * surface to either request a frame be rendered or to remove this Surface
+         */
+        val surfaceToken: Int,
+
+        /**
+         * Target surface to render into. Can be null for situations where GL is used to render
+         * into a frame buffer object provided from an AHardwareBuffer instance.
+         * In these cases the actual surface is never used.
+         */
+        val surface: Surface?,
+
+        /**
+         * Callback used to create an EGLSurface from the provided surface as well as
+         * render content to the surface
+         */
+        val surfaceRenderer: RenderCallback
+    ) {
+        /**
+         * Lazily created + cached [EGLSurface] after [RenderCallback.onSurfaceCreated]
+         * is invoked. This is  only modified on the backing thread
+         */
+        var eglSurface: EGLSurface? = null
+
+        /**
+         * Target width of the [surface]. This is only modified on the backing thread
+         */
+        var width: Int = 0
+
+        /**
+         * Target height of the [surface]. This is only modified on the backing thread
+         */
+        var height: Int = 0
+    }
+
+    /**
+     * Handler does not expose a post method that takes a token and a runnable.
+     * We need the token to be able to cancel pending requests so just call
+     * postAtTime with the default of SystemClock.uptimeMillis
+     */
+    private fun Handler.post(token: Any?, runnable: Runnable) {
+        postAtTime(runnable, token, SystemClock.uptimeMillis())
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EGLConfigAttributes.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EGLConfigAttributes.kt
new file mode 100644
index 0000000..1852fbb
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EGLConfigAttributes.kt
@@ -0,0 +1,207 @@
+/*
+ * 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.
+ */
+
+@file:Suppress("AcronymName")
+package androidx.graphics.opengl.egl
+
+import android.opengl.EGL14
+
+/**
+ * Construct an instance of [EGLConfigAttributes] that includes a mapping of EGL attributes
+ * to their corresponding value. The full set of attributes can be found here:
+ * https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglChooseConfig.xhtml
+ *
+ * The resultant array of attributes automatically is terminated with EGL_NONE.
+ *
+ * For example to create an 8888 configuration, this can be done with the following:
+ *
+ * EGLConfigAttributes {
+ *      EGL14.EGL_RENDERABLE_TYPE to EGL14.EGL_OPENGL_ES2_BIT
+ *      EGL14.EGL_RED_SIZE to 8
+ *      EGL14.EGL_GREEN_SIZE to 8
+ *      EGL14.EGL_BLUE_SIZE to 8
+ *      EGL14.EGL_ALPHA_SIZE to 8
+ *      EGL14.EGL_DEPTH_SIZE to 0
+ *      EGL14.EGL_CONFIG_CAVEAT to EGL14.EGL_NONE
+ *      EGL14.EGL_STENCIL_SIZE to 8
+ *      EGL14.EGL_SURFACE_TYPE to EGL14.EGL_WINDOW_BIT
+ * }
+ *
+ * @see EGLConfigAttributes.RGBA_8888
+ */
+@JvmSynthetic
+inline fun EGLConfigAttributes(block: EGLConfigAttributes.Builder.() -> Unit): EGLConfigAttributes =
+    EGLConfigAttributes.Builder().apply { block() }.build()
+
+@Suppress("AcronymName")
+class EGLConfigAttributes internal constructor(
+    @PublishedApi internal val attrs: IntArray
+) {
+
+    /**
+     * Return a copy of the created integer array used for EGL methods.
+     * Most consumers would pass the [EGLConfigAttributes] instance as a parameter instead, however,
+     * this method is provided as a convenience for debugging and testing purposes.
+     */
+    fun toArray(): IntArray = attrs.clone()
+
+    /**
+     * Builder used to create an instance of [EGLConfigAttributes]
+     * Allows for a mapping of EGL configuration attributes to their corresponding
+     * values as well as including a previously generated [EGLConfigAttributes]
+     * instance to be used as a template and conditionally update individual mapped values
+     */
+    class Builder @PublishedApi internal constructor() {
+        private val attrs = HashMap<Int, Int>()
+
+        /**
+         * Map a given EGL configuration attribute key to the given EGL configuration value
+         */
+        @SuppressWarnings("BuilderSetStyle")
+        @JvmSynthetic
+        infix fun Int.to(that: Int) {
+            setAttribute(this, that)
+        }
+
+        /**
+         * Map a given EGL configuration attribute key to the given EGL configuration value
+         * @param attribute EGL attribute name such as [EGL14.EGL_RED_SIZE]
+         * @param value Corresponding value for the [attribute]
+         */
+        @Suppress("MissingGetterMatchingBuilder")
+        fun setAttribute(attribute: Int, value: Int): Builder {
+            attrs[attribute] = value
+            return this
+        }
+
+        /**
+         * Include all the attributes of the given [EGLConfigAttributes] instance.
+         * This is useful for creating a new [EGLConfigAttributes] instance with all the same
+         * attributes as another, allowing for modification of attributes after the fact.
+         * For example, the following code snippet can be used to create an [EGLConfigAttributes]
+         * instance that has all the same configuration as [RGBA_8888] but with a
+         * 16 bit stencil buffer size:
+         *
+         * EGLConfigAttributes {
+         *      include(EGLConfigAttributes.RGBA_8888)
+         *      EGL14.EGL_STENCIL_SIZE to 16
+         * }
+         *
+         *
+         * That is all attributes configured after the include will overwrite the attributes
+         * configured previously.
+         */
+        @SuppressWarnings("BuilderSetStyle")
+        fun include(attributes: EGLConfigAttributes) {
+            val attrsArray = attributes.attrs
+            for (i in 0 until attrsArray.size - 1 step 2) {
+                attrs[attrsArray[i]] = attrsArray[i + 1]
+            }
+        }
+
+        /**
+         * Construct an instance of [EGLConfigAttributes] with the mappings of integer keys
+         * to their respective values. This creates a flat integer array with alternating values
+         * for the key value pairs and ends with EGL_NONE
+         */
+        fun build(): EGLConfigAttributes {
+            val entries = attrs.entries
+            val attrArray = IntArray(entries.size * 2 + 1) // Array must end with EGL_NONE
+            var index = 0
+            for (entry in entries) {
+                attrArray[index] = entry.key
+                attrArray[index + 1] = entry.value
+                index += 2
+            }
+            attrArray[index] = EGL14.EGL_NONE
+            return EGLConfigAttributes(attrArray)
+        }
+    }
+
+    companion object {
+        /**
+         * EGL configuration attribute used to expose EGLConfigs that support formats with floating
+         * point RGBA components. This attribute is exposed through the EGL_EXT_pixel_format_float
+         * EGL extension
+         *
+         * See: https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_pixel_format_float.txt
+         */
+        const val EGL_COLOR_COMPONENT_TYPE_EXT = 0x3339
+
+        /**
+         * EGL configuration attribute value that represents fixed point RGBA components
+         */
+        const val EGL_COLOR_COMPONENT_TYPE_FIXED_EXT = 0x333A
+
+        /**
+         * EGL configuration attribute value that represents floating point RGBA components
+         */
+        const val EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT = 0x333B
+
+        /**
+         * EGL Attributes to create an 8 bit EGL config for red, green, blue, and alpha channels as
+         * well as an 8 bit stencil size
+         */
+        @Suppress("AcronymName")
+        @JvmField
+        val RGBA_8888 = EGLConfigAttributes {
+            EGL14.EGL_RENDERABLE_TYPE to EGL14.EGL_OPENGL_ES2_BIT
+            EGL14.EGL_RED_SIZE to 8
+            EGL14.EGL_GREEN_SIZE to 8
+            EGL14.EGL_BLUE_SIZE to 8
+            EGL14.EGL_ALPHA_SIZE to 8
+            EGL14.EGL_DEPTH_SIZE to 0
+            EGL14.EGL_CONFIG_CAVEAT to EGL14.EGL_NONE
+            EGL14.EGL_STENCIL_SIZE to 0
+            EGL14.EGL_SURFACE_TYPE to EGL14.EGL_WINDOW_BIT
+        }
+
+        /**
+         * EGL Attributes to create a 10 bit EGL config for red, green, blue, channels and a
+         * 2 bit alpha channels. This does not include any bits for depth and stencil buffers.
+         */
+        @Suppress("AcronymName")
+        @JvmField
+        val RGBA_1010102 = EGLConfigAttributes {
+            EGL14.EGL_RENDERABLE_TYPE to EGL14.EGL_OPENGL_ES2_BIT
+            EGL14.EGL_RED_SIZE to 10
+            EGL14.EGL_GREEN_SIZE to 10
+            EGL14.EGL_BLUE_SIZE to 10
+            EGL14.EGL_ALPHA_SIZE to 2
+            EGL14.EGL_DEPTH_SIZE to 0
+            EGL14.EGL_STENCIL_SIZE to 0
+            EGL14.EGL_SURFACE_TYPE to EGL14.EGL_WINDOW_BIT
+        }
+
+        /**
+         * EGL Attributes to create a 16 bit floating point EGL config for red, green, blue and
+         * alpha channels without a depth or stencil channel.
+         */
+        @Suppress("AcronymName")
+        @JvmField
+        val RGBA_F16 = EGLConfigAttributes {
+            EGL14.EGL_RENDERABLE_TYPE to EGL14.EGL_OPENGL_ES2_BIT
+            EGL_COLOR_COMPONENT_TYPE_EXT to EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT
+            EGL14.EGL_RED_SIZE to 16
+            EGL14.EGL_GREEN_SIZE to 16
+            EGL14.EGL_BLUE_SIZE to 16
+            EGL14.EGL_ALPHA_SIZE to 16
+            EGL14.EGL_DEPTH_SIZE to 0
+            EGL14.EGL_STENCIL_SIZE to 0
+            EGL14.EGL_SURFACE_TYPE to EGL14.EGL_WINDOW_BIT
+        }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EGLManager.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EGLManager.kt
new file mode 100644
index 0000000..59c43b1f
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EGLManager.kt
@@ -0,0 +1,246 @@
+/*
+ * 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.graphics.opengl.egl
+
+import android.opengl.EGL14
+import android.opengl.EGLConfig
+import android.opengl.EGLContext
+import android.opengl.EGLSurface
+import android.opengl.GLES20
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLExt.Companion.EGL_KHR_SURFACELESS_CONTEXT
+
+/**
+ * Class responsible for configuration of EGL related resources. This includes
+ * initialization of the corresponding EGL Display as well as EGL Context, among
+ * other EGL related facilities.
+ */
+@Suppress("AcronymName")
+class EGLManager(eglSpec: EGLSpec = EGLSpec.V14) {
+
+    private var mEglConfig: EGLConfig? = null
+
+    /**
+     * Offscreen pixel buffer surface
+     */
+    private var mPBufferSurface: EGLSurface = EGL14.EGL_NO_SURFACE
+    private var mEglContext: EGLContext = EGL14.EGL_NO_CONTEXT
+    private var mWideColorGamutSupport = false
+    private var mEglVersion = EGLVersion.Unknown
+    private val mEglSpec = eglSpec
+    private var mEglExtensions: Set<String>? = null
+    private var mIsSingleBuffered: Boolean = false
+    private var mQueryResult: IntArray? = null
+
+    /**
+     * Initialize the EGLManager. This initializes the default display as well
+     * as queries the supported extensions
+     */
+    fun initialize() {
+        mEglContext.let {
+            if (it === EGL14.EGL_NO_CONTEXT) {
+                mEglVersion = eglSpec.eglInitialize()
+                mEglExtensions =
+                    EGLExt.parseExtensions(eglSpec.eglQueryString(EGL14.EGL_EXTENSIONS))
+            }
+        }
+    }
+
+    /**
+     * Attempt to load an [EGLConfig] instance from the given
+     * [EGLConfigAttributes]. If the [EGLConfig] could not be loaded
+     * this returns null
+     */
+    fun loadConfig(configAttributes: EGLConfigAttributes): EGLConfig? =
+        eglSpec.loadConfig(configAttributes)
+
+    /**
+     * Creates an [EGLContext] from the given [EGLConfig] returning
+     * null if the context could not be created
+     *
+     * @throws EGLException if the default surface could not be made current after context creation
+     */
+    fun createContext(config: EGLConfig): EGLContext {
+        val eglContext = eglSpec.eglCreateContext(config)
+        if (eglContext !== EGL14.EGL_NO_CONTEXT) {
+            val pbBufferSurface: EGLSurface =
+                if (isExtensionSupported(EGL_KHR_SURFACELESS_CONTEXT)) {
+                    EGL14.EGL_NO_SURFACE
+                } else {
+                    val configAttrs = EGLConfigAttributes {
+                        EGL14.EGL_WIDTH to 1
+                        EGL14.EGL_HEIGHT to 1
+                    }
+                    eglSpec.eglCreatePBufferSurface(config, configAttrs)
+                }
+            if (!eglSpec.eglMakeCurrent(eglContext, pbBufferSurface, pbBufferSurface)) {
+                throw EGLException(eglSpec.eglGetError(), "Unable to make default surface current")
+            }
+            mPBufferSurface = pbBufferSurface
+            mEglContext = eglContext
+            mEglConfig = config
+        } else {
+            mPBufferSurface = EGL14.EGL_NO_SURFACE
+            mEglContext = EGL14.EGL_NO_CONTEXT
+            mEglConfig = null
+        }
+        return eglContext
+    }
+
+    /**
+     * Release the resources allocated by EGLManager. This will destroy the corresponding
+     * EGLContext instance if it was previously initialized.
+     * The configured EGLVersion as well as EGLExtensions
+     */
+    fun release() {
+        mEglContext.let {
+            if (it != EGL14.EGL_NO_CONTEXT) {
+                eglSpec.eglDestroyContext(it)
+                mPBufferSurface.let { pbBufferSurface ->
+                    if (pbBufferSurface != EGL14.EGL_NO_SURFACE) {
+                        eglSpec.eglDestroySurface(pbBufferSurface)
+                    }
+                }
+                mPBufferSurface = EGL14.EGL_NO_SURFACE
+                eglSpec.eglMakeCurrent(
+                    EGL14.EGL_NO_CONTEXT,
+                    EGL14.EGL_NO_SURFACE,
+                    EGL14.EGL_NO_SURFACE
+                )
+                mEglVersion = EGLVersion.Unknown
+                mEglContext = EGL14.EGL_NO_CONTEXT
+                mEglConfig = null
+                mEglExtensions = null
+            }
+        }
+    }
+
+    val eglSpec: EGLSpec
+        @Suppress("AcronymName")
+        @JvmName("getEGLSpec")
+        get() = mEglSpec
+
+    /**
+     * Returns the EGL version that is supported. This parameter is configured
+     * after [initialize] is invoked.
+     */
+    val eglVersion: EGLVersion
+        @Suppress("AcronymName")
+        @JvmName("getEGLVersion")
+        get() = mEglVersion
+
+    /**
+     * Returns the current EGLContext. This parameter is configured after [initialize] is invoked
+     */
+    val eglContext: EGLContext?
+        @Suppress("AcronymName")
+        @JvmName("getEGLContext")
+        get() = mEglContext
+
+    /**
+     * Returns the [EGLConfig] used to load the current [EGLContext].
+     * This is configured after [createContext] is invoked.
+     */
+    val eglConfig: EGLConfig?
+        @Suppress("AcronymName")
+        @JvmName("getEGLConfig")
+        get() = mEglConfig
+
+    /**
+     * Determines whether the extension with the provided name is supported. The string
+     * provided is expected to be one of the named extensions defined within the OpenGL
+     * extension documentation.
+     *
+     * See [EGLExt] for additional documentation for given extension name constants
+     * and descriptions.
+     *
+     * The set of supported extensions is configured after [initialize] is invoked.
+     * Attempts to query support for any extension beforehand will return false.
+     */
+    fun isExtensionSupported(extensionName: String): Boolean =
+        mEglExtensions?.contains(extensionName) ?: false
+
+    /**
+     * Binds the current context to the given draw and read surfaces.
+     * The draw surface is used for all operations except for any pixel data read back or
+     * copy operations which are taken from the read surface.
+     *
+     * The same EGLSurface may be specified for both draw and read surfaces.
+     *
+     * If the context is not previously configured, the only valid parameters for the
+     * draw and read surfaces is [EGL14.EGL_NO_SURFACE]. This is useful to make sure there is
+     * always a surface specified and to release the current context without assigning a new one.
+     *
+     * See https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglMakeCurrent.xhtml
+     *
+     * @param drawSurface Surface used for all operations that involve writing pixel information
+     * @param readSurface Surface used for pixel data read back or copy operations. By default this
+     * is the same as [drawSurface]
+     */
+    @JvmOverloads
+    fun makeCurrent(drawSurface: EGLSurface, readSurface: EGLSurface = drawSurface): Boolean {
+        val result = eglSpec.eglMakeCurrent(mEglContext, drawSurface, readSurface)
+        if (result) {
+            querySurface(drawSurface)
+        }
+        return result
+    }
+
+    /**
+     * Post EGL surface color buffer to a native window. If the current drawing surface
+     * is single buffered this will flush the buffer
+     */
+    fun swapAndFlushBuffers() {
+        if (mIsSingleBuffered) {
+            GLES20.glFlush()
+        }
+        eglSpec.eglSwapBuffers(currentDrawSurface)
+    }
+
+    /**
+     * Returns the default surface. This can be an offscreen pixel buffer surface or
+     * [EGL14.EGL_NO_SURFACE] if the surfaceless context extension is supported.
+     */
+    val defaultSurface: EGLSurface
+        get() = mPBufferSurface
+
+    /**
+     * Returns the current surface used for drawing pixel content
+     */
+    val currentDrawSurface: EGLSurface
+        get() = eglSpec.eglGetCurrentDrawSurface()
+
+    /**
+     * Returns the current surface used for reading back or copying pixels
+     */
+    val currentReadSurface: EGLSurface
+        get() = eglSpec.eglGetCurrentReadSurface()
+
+    /**
+     * Helper method to query properties of the given surface
+     */
+    private fun querySurface(surface: EGLSurface) {
+        val resultArray = mQueryResult ?: IntArray(1).also { mQueryResult = it }
+        if (eglSpec.eglQuerySurface(surface, EGL14.EGL_RENDER_BUFFER, resultArray, 0)) {
+            mIsSingleBuffered = resultArray[0] == EGL14.EGL_SINGLE_BUFFER
+        }
+    }
+
+    companion object {
+        private const val TAG = "EglManager"
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EGLSpec.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EGLSpec.kt
new file mode 100644
index 0000000..09f4584
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EGLSpec.kt
@@ -0,0 +1,630 @@
+/*
+ * 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.graphics.opengl.egl
+
+import android.hardware.HardwareBuffer
+import android.opengl.EGL14
+import android.opengl.EGLConfig
+import android.opengl.EGLContext
+import android.opengl.EGLSurface
+import android.os.Build
+import android.view.Surface
+import androidx.annotation.RequiresApi
+import androidx.hardware.SyncFence
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLExt.Companion.EGLClientWaitResult
+import androidx.opengl.EGLExt.Companion.EGLSyncAttribute
+import androidx.opengl.EGLExt.Companion.EGL_CONDITION_SATISFIED_KHR
+import androidx.opengl.EGLExt.Companion.EGL_FALSE
+import androidx.opengl.EGLExt.Companion.EGL_FOREVER_KHR
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_FLUSH_COMMANDS_BIT_KHR
+import androidx.opengl.EGLExt.Companion.EGL_TIMEOUT_EXPIRED_KHR
+import androidx.opengl.EGLExt.Companion.eglClientWaitSyncKHR
+import androidx.opengl.EGLExt.Companion.eglDestroyImageKHR
+import androidx.opengl.EGLExt.Companion.eglDestroySyncKHR
+import androidx.opengl.EGLImageKHR
+import androidx.opengl.EGLSyncKHR
+
+/**
+ * Interface for accessing various EGL facilities independent of EGL versions.
+ * That is each EGL version implements this specification.
+ *
+ * EGLSpec is not thread safe and is up to the caller of these methods to guarantee thread safety.
+ */
+@Suppress("AcronymName")
+interface EGLSpec {
+
+    /**
+     * Query for the capabilities associated with the given eglDisplay.
+     * The result contains a space separated list of the capabilities.
+     *
+     * @param nameId identifier for the EGL string to query
+     */
+    fun eglQueryString(nameId: Int): String
+
+    /**
+     * Create a Pixel Buffer surface with the corresponding [EGLConfigAttributes].
+     * Accepted attributes are defined as part of the OpenGL specification here:
+     * https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglCreatePbufferSurface.xhtml
+     *
+     * If a pixel buffer surface could not be created, [EGL14.EGL_NO_SURFACE] is returned.
+     *
+     * @param config Specifies the EGL Frame buffer configuration that defines the frame buffer
+     * resource available to the surface
+     * @param configAttributes Optional list of attributes for the pixel buffer surface
+     */
+    fun eglCreatePBufferSurface(
+        config: EGLConfig,
+        configAttributes: EGLConfigAttributes?
+    ): EGLSurface
+
+    /**
+     * Creates an on screen EGL window surface from the given [Surface] and returns a handle to it.
+     *
+     * See https://khronos.org/registry/EGL/sdk/docs/man/html/eglCreateWindowSurface.xhtml
+     *
+     * @param config Specifies the EGL frame buffer configuration that defines the frame buffer
+     * resource available to the surface
+     * @param surface Android surface to consume rendered content
+     * @param configAttributes Optional list of attributes for the specified surface
+     */
+    fun eglCreateWindowSurface(
+        config: EGLConfig,
+        surface: Surface,
+        configAttributes: EGLConfigAttributes?
+    ): EGLSurface
+
+    /**
+     * Destroys an EGL surface.
+     *
+     * If the EGL surface is not current to any thread, eglDestroySurface destroys
+     * it immediately. Otherwise, surface is destroyed when it becomes not current to any thread.
+     * Furthermore, resources associated with a pbuffer surface are not released until all color
+     * buffers of that pbuffer bound to a texture object have been released. Deferral of
+     * surface destruction would still return true as deferral does not indicate a failure condition
+     *
+     * @return `true` if destruction of the EGLSurface was successful, false otherwise
+     */
+    fun eglDestroySurface(surface: EGLSurface): Boolean
+
+    /**
+     * Binds the current context to the given draw and read surfaces.
+     * The draw surface is used for all operations except for any pixel data read back or copy
+     * operations which are taken from the read surface.
+     *
+     * The same EGLSurface may be specified for both draw and read surfaces.
+     *
+     * See https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglMakeCurrent.xhtml for more
+     * information
+     *
+     * @param drawSurface EGLSurface to draw pixels into.
+     * @param readSurface EGLSurface used for read/copy operations.
+     */
+    fun eglMakeCurrent(
+        context: EGLContext,
+        drawSurface: EGLSurface,
+        readSurface: EGLSurface
+    ): Boolean
+
+    /**
+     * Return the current surface used for reading or copying pixels.
+     * If no context is current, [EGL14.EGL_NO_SURFACE] is returned
+     */
+    fun eglGetCurrentReadSurface(): EGLSurface
+
+    /**
+     * Return the current surface used for drawing pixels.
+     * If no context is current, [EGL14.EGL_NO_SURFACE] is returned.
+     */
+    fun eglGetCurrentDrawSurface(): EGLSurface
+
+    /**
+     * Initialize the EGL implementation and return the major and minor version of the EGL
+     * implementation through [EGLVersion]. If initialization fails, this returns
+     * [EGLVersion.Unknown]
+     */
+    fun eglInitialize(): EGLVersion
+
+    /**
+     * Load a corresponding EGLConfig from the provided [EGLConfigAttributes]
+     * If the EGLConfig could not be loaded, null is returned
+     * @param configAttributes Desired [EGLConfigAttributes] to create an [EGLConfig]
+     *
+     * @return the [EGLConfig] with the provided [EGLConfigAttributes] or null if
+     * an [EGLConfig] could not be created with the specified attributes
+     */
+    fun loadConfig(configAttributes: EGLConfigAttributes): EGLConfig?
+
+    /**
+     * Create an EGLContext with the default display. If createContext fails to create a
+     * rendering context, EGL_NO_CONTEXT is returned
+     *
+     * @param config [EGLConfig] used to create the [EGLContext]
+     */
+    fun eglCreateContext(config: EGLConfig): EGLContext
+
+    /**
+     * Destroy the given EGLContext generated in [eglCreateContext]
+     *
+     * See https://khronos.org/registry/EGL/sdk/docs/man/html/eglDestroyContext.xhtml
+     *
+     * @param eglContext EGL rendering context to be destroyed
+     */
+    fun eglDestroyContext(eglContext: EGLContext)
+
+    /**
+     * Post EGL surface color buffer to a native window
+     *
+     * See https://khronos.org/registry/EGL/sdk/docs/man/html/eglSwapBuffers.xhtml
+     *
+     * @param surface Specifies the EGL drawing surface whose buffers are to be swapped
+     *
+     * @return `true` if swapping of buffers succeeds, false otherwise
+     */
+    fun eglSwapBuffers(surface: EGLSurface): Boolean
+
+    /**
+     * Query the EGL attributes of the provided surface
+     *
+     * @param surface EGLSurface to be queried
+     * @param attribute EGL attribute to query on the given EGL Surface
+     * @param result Int array to store the result of the query
+     * @param offset Index within [result] to store the value of the queried attribute
+     *
+     * @return `true` if the query was completed successfully, false otherwise. If the query
+     * fails, [result] is unmodified
+     */
+    fun eglQuerySurface(surface: EGLSurface, attribute: Int, result: IntArray, offset: Int): Boolean
+
+    /**
+     * Returns the error of the last called EGL function in the current thread. Initially,
+     * the error is set to EGL_SUCCESS. When an EGL function could potentially generate several
+     * different errors (for example, when passed both a bad attribute name, and a bad attribute
+     * value for a legal attribute name), the implementation may choose to generate any one of the
+     * applicable errors.
+     *
+     * See https://khronos.org/registry/EGL/sdk/docs/man/html/eglGetError.xhtml for more information
+     * and error codes that could potentially be returned
+     */
+    fun eglGetError(): Int
+
+    /**
+     * Convenience method to obtain the corresponding error string from the
+     * error code obtained from [EGLSpec.eglGetError]
+     */
+    fun getErrorMessage(): String = getStatusString(eglGetError())
+
+    /**
+     * Creates an EGLImage from the provided [HardwareBuffer]. This handles
+     * internally creating an EGLClientBuffer and an [EGLImageKHR] from the client buffer.
+     *
+     * When this [EGLImageKHR] instance is no longer necessary, consumers should be sure to
+     * call the corresponding method [eglDestroyImageKHR] to deallocate the resource.
+     *
+     * @param hardwareBuffer Backing [HardwareBuffer] for the generated EGLImage instance
+     *
+     * @return an [EGLImageKHR] instance representing the [EGLImageKHR] created from the
+     * HardwareBuffer. Because this is created internally through EGL's eglCreateImageKR method,
+     * this has the KHR suffix.
+     *
+     * This can return null if the EGL_ANDROID_image_native_buffer and EGL_KHR_image_base
+     * extensions are not supported or if allocation of the buffer fails.
+     *
+     * See
+     * www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_get_native_client_buffer.txt
+     */
+    @Suppress("AcronymName")
+    @RequiresApi(Build.VERSION_CODES.O)
+    fun eglCreateImageFromHardwareBuffer(hardwareBuffer: HardwareBuffer): EGLImageKHR?
+
+    /**
+     * Destroy the given [EGLImageKHR] instance. Once destroyed, the image may not be used to
+     * create any additional [EGLImageKHR] target resources within any client API contexts,
+     * although existing [EGLImageKHR] siblings may continue to be used. `true` is returned
+     * if DestroyImageKHR succeeds, `false` indicates failure. This can return `false` if the
+     * corresponding [EGLContext] is not valid.
+     *
+     * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_image_base.txt
+     *
+     * @param image EGLImageKHR to be destroyed
+     *
+     * @return `true` if the destruction of the EGLImageKHR object was successful, `false` otherwise
+     */
+    @Suppress("AcronymName")
+    fun eglDestroyImageKHR(image: EGLImageKHR): Boolean
+
+    /**
+     * Creates a sync object of the specified type associated with the
+     * specified display, and returns a handle to the new object.
+     * The configuration of the returned [EGLSyncKHR] object is specified by the provided
+     * attributes.
+     *
+     * Consumers should ensure that the EGL_KHR_fence_sync EGL extension is supported before
+     * invoking this method otherwise a null EGLSyncFenceKHR object is returned.
+     *
+     * When the [EGLSyncKHR] instance is no longer necessary, consumers are encouraged to call
+     * [eglDestroySyncKHR] to deallocate this resource.
+     *
+     * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+     *
+     * @param type Indicates the type of sync object that is returned
+     * @param attributes Specifies the configuration of the sync object returned
+     *
+     * @return the [EGLSyncKHR] object to be used as a fence or null if this extension
+     * is not supported
+     */
+    @Suppress("AcronymName")
+    fun eglCreateSyncKHR(type: Int, attributes: EGLConfigAttributes?): EGLSyncKHR?
+
+    /**
+     * Query attributes of the provided sync object. Accepted attributes to query depend
+     * on the type of sync object. If no errors are generated, this returns true and the
+     * value of the queried attribute is stored in the value array at the offset position.
+     * If this method returns false, the provided value array is unmodified.
+     *
+     * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+     *
+     * @param sync EGLSyncKHR object to query attributes
+     * @param attribute Corresponding EGLSyncKHR attribute to query on [sync]
+     * @param value Integer array used to store the result of the query
+     * @param offset Index within the value array to store the result of the attribute query
+     *
+     * @return `true` if the attribute was queried successfully, false otherwise. Failure cases
+     * include attempting to call this method on an invalid sync object, or the display provided
+     * not matching the display that was used to create this sync object. Additionally if the
+     * queried attribute is not supported for the sync object, false is returned.
+     */
+    @Suppress("AcronymName")
+    fun eglGetSyncAttribKHR(
+        sync: EGLSyncKHR,
+        @EGLSyncAttribute attribute: Int,
+        value: IntArray,
+        offset: Int
+    ): Boolean
+
+    /**
+     * Destroys the given sync object associated with the specified display
+     *
+     * Consumers should ensure that the EGL_KHR_fence_sync EGL extension is supported before
+     * invoking this method otherwise a null EGLSyncFenceKHR object is returned.
+     * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+     *
+     * @param sync Fence object to be destroyed
+     *
+     * @return `true` if the [EGLSyncKHR] object was destroyed successfully `false` otherwise. This
+     * can return `false` if the sync object is not a valid sync object for the provided display
+     * or if the display provided in this method does not match the display used to create this
+     * sync in [eglCreateSyncKHR].
+     */
+    @Suppress("AcronymName")
+    fun eglDestroySyncKHR(sync: EGLSyncKHR): Boolean
+
+    /**
+     * Creates a native synchronization fence referenced through a file descriptor
+     * that is associated with an EGL fence sync object.
+     *
+     * See:
+     * https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt
+     *
+     * @param sync The [EGLSyncKHR] to fetch the [SyncFence] from
+     * @return A [SyncFence] representing the native fence.
+     *  If [sync] is not a valid sync object for display, an invalid [SyncFence]
+     *  instance is returned and an EGL_BAD_PARAMETER error is generated.
+     *  If the EGL_SYNC_NATIVE_FENCE_FD_ANDROID attribute of [sync] is
+     *  EGL_NO_NATIVE_FENCE_FD_ANDROID, an invalid [SyncFence] is
+     *  returned and an EGL_BAD_PARAMETER error is generated.
+     *  If the display does not match the display passed to [eglCreateSyncKHR]
+     *  when [sync] was created, the behavior is undefined.
+     */
+    @Suppress("AcronymName")
+    @RequiresApi(Build.VERSION_CODES.KITKAT)
+    fun eglDupNativeFenceFDANDROID(sync: EGLSyncKHR): SyncFence
+
+    /**
+     * Blocks the calling thread until the specified sync object is signalled or until
+     * [timeoutNanos] nanoseconds have passed.
+     * More than one [eglClientWaitSyncKHR] may be outstanding on the same [sync] at any given
+     * time. When there are multiple threads blocked on the same [sync] and the [sync] object
+     * has signalled, all such threads are released, but the order in which they are released is
+     * not defined.
+     *
+     * If the value of [timeoutNanos] is zero, then [eglClientWaitSyncKHR] simply tests the
+     * current status of sync. If the value of [timeoutNanos] is the special value
+     * [EGL_FOREVER_KHR], then [eglClientWaitSyncKHR] does not time out. For all other values,
+     * [timeoutNanos] is adjusted to the closest value allowed by the implementation-dependent
+     * timeout accuracy, which may be substantially longer than one nanosecond.
+     *
+     * [eglClientWaitSyncKHR] returns one of three status values describing the reason for
+     * returning. A return value of [EGL_TIMEOUT_EXPIRED_KHR] indicates that the specified
+     * timeout period expired before [sync] was signalled, or if [timeoutNanos] is zero,
+     * indicates that [sync] is not signaled. A return value of [EGL_CONDITION_SATISFIED_KHR]
+     * indicates that [sync] was signaled before the timeout expired, which includes the case
+     * when [sync] was already signaled when [eglClientWaitSyncKHR] was called. If an error
+     * occurs then an error is generated and [EGL_FALSE] is returned.
+     *
+     * If the sync object being blocked upon will not be signaled in finite time (for example
+     * by an associated fence command issued previously, but not yet flushed to the graphics
+     * pipeline), then [eglClientWaitSyncKHR] may wait forever. To help prevent this behavior,
+     * if the [EGL_SYNC_FLUSH_COMMANDS_BIT_KHR] is set on the flags parameter and the [sync] is
+     * unsignaled when [eglClientWaitSyncKHR] is called, then the equivalent flush will be
+     * performed for the current EGL context before blocking on sync. If no context is
+     * current bound for the API, the [EGL_SYNC_FLUSH_COMMANDS_BIT_KHR] bit is ignored.
+     *
+     * @param sync EGLSyncKHR object to wait on
+     * @param flags Optional flags to provide to handle flushing of pending commands
+     * @param timeoutNanos Optional timeout value to wait before this method returns, measured
+     * in nanoseconds. This value is always consumed as an unsigned long value so even negative
+     * values will be converted to their unsigned equivalent.
+     *
+     * @return Result code indicating the status of the wait request. Either
+     * [EGL_CONDITION_SATISFIED_KHR], if the sync did signal within the specified timeout,
+     * [EGL_TIMEOUT_EXPIRED_KHR] if the sync did not signal within the specified timeout,
+     * or [EGL_FALSE] if an error occurs.
+     */
+    @Suppress("AcronymName")
+    fun eglClientWaitSyncKHR(
+        sync: EGLSyncKHR,
+        flags: Int,
+        timeoutNanos: Long
+    ): @EGLClientWaitResult Int
+
+    companion object {
+
+        @JvmField
+        val V14 = object : EGLSpec {
+
+            // Tuples of attribute identifiers along with their corresponding values.
+            // EGL_NONE is used as a termination value similar to a null terminated string
+            private val contextAttributes = intArrayOf(
+                EGL14.EGL_CONTEXT_CLIENT_VERSION, 2, // GLES VERSION 2
+                // HWUI provides the ability to configure a context priority as well but that only
+                // seems to be configured on SystemUIApplication. This might be useful for
+                // front buffer rendering situations for performance.
+                EGL14.EGL_NONE
+            )
+
+            override fun eglInitialize(): EGLVersion {
+                // eglInitialize is destructive so create 2 separate arrays to store the major and
+                // minor version
+                val major = intArrayOf(1)
+                val minor = intArrayOf(1)
+                val initializeResult =
+                    EGL14.eglInitialize(getDefaultDisplay(), major, 0, minor, 0)
+                if (initializeResult) {
+                    return EGLVersion(major[0], minor[0])
+                } else {
+                    throw EGLException(EGL14.eglGetError(), "Unable to initialize default display")
+                }
+            }
+
+            override fun eglGetCurrentReadSurface(): EGLSurface =
+                EGL14.eglGetCurrentSurface(EGL14.EGL_READ)
+
+            override fun eglGetCurrentDrawSurface(): EGLSurface =
+                EGL14.eglGetCurrentSurface(EGL14.EGL_DRAW)
+
+            override fun eglQueryString(nameId: Int): String =
+                EGL14.eglQueryString(getDefaultDisplay(), nameId)
+
+            override fun eglCreatePBufferSurface(
+                config: EGLConfig,
+                configAttributes: EGLConfigAttributes?
+            ): EGLSurface =
+                EGL14.eglCreatePbufferSurface(
+                    getDefaultDisplay(),
+                    config,
+                    configAttributes?.attrs,
+                    0
+                )
+
+            override fun eglCreateWindowSurface(
+                config: EGLConfig,
+                surface: Surface,
+                configAttributes: EGLConfigAttributes?,
+            ): EGLSurface =
+                EGL14.eglCreateWindowSurface(
+                    getDefaultDisplay(),
+                    config,
+                    surface,
+                    configAttributes?.attrs ?: DefaultWindowSurfaceConfig.attrs,
+                    0
+                )
+
+            override fun eglSwapBuffers(surface: EGLSurface): Boolean =
+                EGL14.eglSwapBuffers(getDefaultDisplay(), surface)
+
+            override fun eglQuerySurface(
+                surface: EGLSurface,
+                attribute: Int,
+                result: IntArray,
+                offset: Int
+            ): Boolean =
+                EGL14.eglQuerySurface(getDefaultDisplay(), surface, attribute, result, offset)
+
+            override fun eglDestroySurface(surface: EGLSurface) =
+                EGL14.eglDestroySurface(getDefaultDisplay(), surface)
+
+            override fun eglMakeCurrent(
+                context: EGLContext,
+                drawSurface: EGLSurface,
+                readSurface: EGLSurface
+            ): Boolean =
+                EGL14.eglMakeCurrent(
+                    getDefaultDisplay(),
+                    drawSurface,
+                    readSurface,
+                    context
+                )
+
+            override fun loadConfig(configAttributes: EGLConfigAttributes): EGLConfig? {
+                val configs = arrayOfNulls<EGLConfig?>(1)
+                return if (EGL14.eglChooseConfig(
+                    getDefaultDisplay(),
+                    configAttributes.attrs,
+                    0,
+                    configs,
+                    0,
+                    1,
+                    intArrayOf(1),
+                    0
+                )) {
+                    configs[0]
+                } else {
+                    null
+                }
+            }
+
+            override fun eglCreateContext(config: EGLConfig): EGLContext {
+                return EGL14.eglCreateContext(
+                    getDefaultDisplay(),
+                    config,
+                    EGL14.EGL_NO_CONTEXT, // not creating from a shared context
+                    contextAttributes,
+                    0
+                )
+            }
+
+            override fun eglDestroyContext(eglContext: EGLContext) {
+                if (!EGL14.eglDestroyContext(getDefaultDisplay(), eglContext)) {
+                    throw EGLException(EGL14.eglGetError(), "Unable to destroy EGLContext")
+                }
+            }
+
+            @RequiresApi(Build.VERSION_CODES.Q)
+            override fun eglCreateImageFromHardwareBuffer(
+                hardwareBuffer: HardwareBuffer
+            ): EGLImageKHR? =
+                EGLExt.eglCreateImageFromHardwareBuffer(getDefaultDisplay(), hardwareBuffer)
+
+            override fun eglDestroyImageKHR(image: EGLImageKHR): Boolean =
+                EGLExt.eglDestroyImageKHR(getDefaultDisplay(), image)
+
+            override fun eglCreateSyncKHR(
+                type: Int,
+                attributes: EGLConfigAttributes?
+            ): EGLSyncKHR? =
+                EGLExt.eglCreateSyncKHR(getDefaultDisplay(), type, attributes)
+
+            override fun eglGetSyncAttribKHR(
+                sync: EGLSyncKHR,
+                attribute: Int,
+                value: IntArray,
+                offset: Int
+            ): Boolean =
+                EGLExt.eglGetSyncAttribKHR(getDefaultDisplay(), sync, attribute, value, offset)
+
+            override fun eglDestroySyncKHR(sync: EGLSyncKHR): Boolean =
+                EGLExt.eglDestroySyncKHR(getDefaultDisplay(), sync)
+
+            override fun eglGetError(): Int = EGL14.eglGetError()
+
+            @RequiresApi(Build.VERSION_CODES.KITKAT)
+            override fun eglDupNativeFenceFDANDROID(sync: EGLSyncKHR): SyncFence =
+                EGLExt.eglDupNativeFenceFDANDROID(getDefaultDisplay(), sync)
+
+            override fun eglClientWaitSyncKHR(
+                sync: EGLSyncKHR,
+                flags: Int,
+                timeoutNanos: Long
+            ): Int =
+                EGLExt.eglClientWaitSyncKHR(getDefaultDisplay(), sync, flags, timeoutNanos)
+
+            private fun getDefaultDisplay() = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY)
+
+            /**
+             * EglConfigAttribute that provides the default attributes for an EGL window surface
+             */
+            private val DefaultWindowSurfaceConfig = EGLConfigAttributes {}
+        }
+
+        /**
+         * Return a string representation of the corresponding EGL status code.
+         * If the provided error value is not an EGL status code, the hex representation
+         * is returned instead
+         */
+        @JvmStatic
+        fun getStatusString(error: Int): String =
+            when (error) {
+                EGL14.EGL_SUCCESS -> "EGL_SUCCESS"
+                EGL14.EGL_NOT_INITIALIZED -> "EGL_NOT_INITIALIZED"
+                EGL14.EGL_BAD_ACCESS -> "EGL_BAD_ACCESS"
+                EGL14.EGL_BAD_ALLOC -> "EGL_BAD_ALLOC"
+                EGL14.EGL_BAD_ATTRIBUTE -> "EGL_BAD_ATTRIBUTE"
+                EGL14.EGL_BAD_CONFIG -> "EGL_BAD_CONFIG"
+                EGL14.EGL_BAD_CONTEXT -> "EGL_BAD_CONTEXT"
+                EGL14.EGL_BAD_CURRENT_SURFACE -> "EGL_BAD_CURRENT_SURFACE"
+                EGL14.EGL_BAD_DISPLAY -> "EGL_BAD_DISPLAY"
+                EGL14.EGL_BAD_MATCH -> "EGL_BAD_MATCH"
+                EGL14.EGL_BAD_NATIVE_PIXMAP -> "EGL_BAD_NATIVE_PIXMAP"
+                EGL14.EGL_BAD_NATIVE_WINDOW -> "EGL_BAD_NATIVE_WINDOW"
+                EGL14.EGL_BAD_PARAMETER -> "EGL_BAD_PARAMETER"
+                EGL14.EGL_BAD_SURFACE -> "EGL_BAD_SURFACE"
+                EGL14.EGL_CONTEXT_LOST -> "EGL_CONTEXT_LOST"
+                else -> Integer.toHexString(error)
+            }
+    }
+}
+
+/**
+ * Exception class for reporting errors with EGL
+ *
+ * @param error Error code reported via eglGetError
+ * @param msg Optional message describing the exception being thrown
+ */
+@Suppress("AcronymName")
+class EGLException(val error: Int, val msg: String = "") : RuntimeException() {
+
+    override val message: String
+        get() = "Error: ${EGLSpec.getStatusString(error)}, $msg"
+}
+
+/**
+ * Identifier for the current EGL implementation
+ *
+ * @param major Major version of the EGL implementation
+ * @param minor Minor version of the EGL implementation
+ */
+@Suppress("AcronymName")
+data class EGLVersion(
+    val major: Int,
+    val minor: Int
+) {
+
+    override fun toString(): String {
+        return "EGL version $major.$minor"
+    }
+
+    companion object {
+        /**
+         * Constant that represents version 1.4 of the EGL spec
+         */
+        @JvmField
+        val V14 = EGLVersion(1, 4)
+
+        /**
+         * Constant that represents version 1.5 of the EGL spec
+         */
+        @JvmField
+        val V15 = EGLVersion(1, 5)
+
+        /**
+         * Sentinel EglVersion value returned in error situations
+         */
+        @JvmField
+        val Unknown = EGLVersion(-1, -1)
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlCompat.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlCompat.kt
new file mode 100644
index 0000000..8ccd453
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlCompat.kt
@@ -0,0 +1,398 @@
+/*
+ * 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.graphics.surface
+
+import android.graphics.Region
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.view.AttachedSurfaceControl
+import android.view.Surface
+import android.view.SurfaceControl
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import androidx.graphics.lowlatency.SyncFenceCompat
+import java.util.concurrent.Executor
+
+/**
+ * Handle to an on-screen Surface managed by the system compositor. [SurfaceControlCompat] is a
+ * combination of a buffer source, and metadata about how to display the buffers. By constructing a
+ * [Surface] from this [SurfaceControl] you can submit buffers to be composited. Using
+ * [SurfaceControlCompat.Transaction] you can manipulate various properties of how the buffer will
+ * be displayed on-screen. [SurfaceControlCompat]s are arranged into a scene-graph like hierarchy,
+ * and as such any [SurfaceControlCompat] may have a parent. Geometric properties like transform,
+ * crop, and Z-ordering will be inherited from the parent, as if the child were content in the
+ * parents buffer stream.
+ *
+ * This class differs slightly than [SurfaceControl] in that it backports some functionality
+ * to Android R and above by delegating to the related APIs available in the NDK. For newer Android
+ * versions, this leverages the equivalent [SurfaceControl] API available in the SDK
+ */
+@RequiresApi(Build.VERSION_CODES.Q)
+class SurfaceControlCompat internal constructor(
+    internal val scImpl: SurfaceControlImpl
+) {
+
+    /**
+     * Check whether this instance points to a valid layer with the system-compositor.
+     * For example this may be false if the layer was released ([release]).
+     */
+    fun isValid(): Boolean = scImpl.isValid()
+
+    /**
+     * Release the local reference to the server-side surface. The [Surface] may continue to exist
+     * on-screen as long as its parent continues to exist. To explicitly remove a [Surface] from the
+     * screen use [Transaction.reparent] with a null-parent. After release, [isValid] will return
+     * false and other methods will throw an exception. Always call [release] when you are done with
+     * a [SurfaceControlCompat] instance.
+     */
+    fun release() {
+        scImpl.release()
+    }
+
+    /**
+     * Builder class for [SurfaceControlCompat] objects. By default the [Surface] will be hidden,
+     * and have "unset" bounds, meaning it can be as large as the bounds of its parent if a buffer
+     * or child so requires. It is necessary to set at least a name via [Builder.setName]
+     */
+    class Builder {
+
+        private val mBuilderImpl = createImpl()
+
+        /**
+         * Set a parent [Surface] from the provided [SurfaceView] for our new
+         * [SurfaceControlCompat]. Child surfaces are constrained to the onscreen region of their
+         * parent. Furthermore they stack relatively in Z order, and inherit the transformation of
+         * the parent.
+         * @param surfaceView Target [SurfaceView] used to provide the [Surface] this
+         * [SurfaceControlCompat] is associated with.
+         */
+        @Suppress("MissingGetterMatchingBuilder")
+        fun setParent(surfaceView: SurfaceView): Builder {
+            mBuilderImpl.setParent(surfaceView)
+            return this
+        }
+
+        /**
+         * Set a debugging-name for the [SurfaceControlCompat].
+         * @param name Debugging name configured on the [SurfaceControlCompat] instance.
+         */
+        @Suppress("MissingGetterMatchingBuilder")
+        fun setName(name: String): Builder {
+            mBuilderImpl.setName(name)
+            return this
+        }
+
+        /**
+         * Construct a new [SurfaceControlCompat] with the set parameters.
+         * The builder remains valid after the [SurfaceControlCompat] instance is created.
+         */
+        fun build(): SurfaceControlCompat = SurfaceControlCompat(mBuilderImpl.build())
+
+        internal companion object {
+            @RequiresApi(Build.VERSION_CODES.Q)
+            fun createImpl(): SurfaceControlImpl.Builder =
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+                    SurfaceControlVerificationHelper.createBuilderV33()
+                } else {
+                    SurfaceControlVerificationHelper.createBuilderV29()
+                }
+        }
+    }
+
+    /**
+     * Interface to handle request to
+     * [SurfaceControlV29.Transaction.addTransactionCompletedListener]
+     */
+    internal interface TransactionCompletedListener {
+        /**
+         * Invoked when a frame including the updates in a transaction was presented.
+         *
+         * Buffers which are replaced or removed from the scene in the transaction invoking
+         * this callback may be reused after this point.
+         */
+        fun onTransactionCompleted()
+    }
+
+    /**
+     * Interface to handle request to
+     * [SurfaceControlCompat.Transaction.addTransactionCommittedListener]
+     */
+    interface TransactionCommittedListener {
+        /**
+         * Invoked when the transaction has been committed in SurfaceFlinger
+         */
+        fun onTransactionCommitted()
+    }
+
+    /**
+     * An atomic set of changes to a set of [SurfaceControlCompat].
+     */
+    class Transaction : AutoCloseable {
+        private val mImpl = createImpl()
+
+        /**
+         * Indicates whether the surface must be considered opaque, even if its pixel format is
+         * set to translucent. This can be useful if an application needs full RGBA 8888 support for
+         * instance but will still draw every pixel opaque.
+         * This flag only determines whether opacity will be sampled from the alpha channel.
+         * Plane-alpha from calls to setAlpha() can still result in blended composition regardless
+         * of the opaque setting. Combined effects are (assuming a buffer format with an alpha
+         * channel):
+         *
+         * OPAQUE + alpha(1.0) == opaque composition
+         * OPAQUE + alpha(0.x) == blended composition
+         * OPAQUE + alpha(0.0) == no composition
+         * !OPAQUE + alpha(1.0) == blended composition
+         * !OPAQUE + alpha(0.x) == blended composition
+         * !OPAQUE + alpha(0.0) == no composition
+         * If the underlying buffer lacks an alpha channel, it is as if setOpaque(true) were set
+         * automatically.
+         *
+         * @param surfaceControl Target [SurfaceControlCompat] to change the opaque flag for
+         * @param isOpaque Flag indicating if the [SurfaceControlCompat] should be fully opaque or
+         * transparent
+         */
+        fun setOpaque(surfaceControl: SurfaceControlCompat, isOpaque: Boolean): Transaction {
+            mImpl.setOpaque(surfaceControl.scImpl, isOpaque)
+            return this
+        }
+
+        /**
+         * Toggle the visibility of a given Layer and it's sub-tree.
+         * @param surfaceControl Target [SurfaceControlCompat] to change the visibility
+         * @param visible `true` to indicate the [SurfaceControlCompat] should be visible, `false`
+         * otherwise
+         */
+        fun setVisibility(surfaceControl: SurfaceControlCompat, visible: Boolean): Transaction {
+            mImpl.setVisibility(surfaceControl.scImpl, visible)
+            return this
+        }
+
+        /**
+         * Re-parents a given [SurfaceControlCompat] to a new parent. Children inherit transform
+         * (position, scaling) crop, visibility, and Z-ordering from their parents, as if the
+         * children were pixels within the parent [Surface].
+         * @param surfaceControl Target [SurfaceControlCompat] instance to reparent
+         * @param newParent Parent [SurfaceControlCompat] that the target [SurfaceControlCompat]
+         * instance is added to. This can be null indicating that the target [SurfaceControlCompat]
+         * should be removed from the scene.
+         */
+        fun reparent(
+            surfaceControl: SurfaceControlCompat,
+            newParent: SurfaceControlCompat?
+        ): Transaction {
+            mImpl.reparent(surfaceControl.scImpl, newParent?.scImpl)
+            return this
+        }
+
+        /**
+         * Re-parents a given [SurfaceControlCompat] to be a child of the [Surface] associated with
+         * the provided [SurfaceView]. Children inherit transform
+         * (position, scaling) crop, visibility, and Z-ordering from their parents, as if the
+         * children were pixels within the parent [Surface].
+         * @param surfaceControl Target [SurfaceControlCompat] instance to reparent
+         * @param surfaceView [SurfaceView] instance that acts as the new parent of the provided
+         * [SurfaceControlCompat] instance.
+         */
+        fun reparent(surfaceControl: SurfaceControlCompat, surfaceView: SurfaceView): Transaction {
+            mImpl.reparent(surfaceControl.scImpl, surfaceView)
+            return this
+        }
+
+        /**
+         * Re-parents a given [SurfaceControlCompat] to be a child of the [AttachedSurfaceControl].
+         * Children inherit transform (position, scaling) crop, visibility, and Z-ordering from
+         * their parents, as if the children were pixels within the parent [Surface].
+         * @param surfaceControl Target [SurfaceControlCompat] instance to reparent
+         * @param attachedSurfaceControl [AttachedSurfaceControl] instance that acts as the new
+         * parent of the provided [SurfaceControlCompat] instance.
+         */
+        @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+        fun reparent(
+            surfaceControl: SurfaceControlCompat,
+            attachedSurfaceControl: AttachedSurfaceControl
+        ): Transaction {
+            mImpl.reparent(surfaceControl.scImpl, attachedSurfaceControl)
+            return this
+        }
+
+        /**
+         * Updates the [HardwareBuffer] displayed for the [SurfaceControlCompat]. Note that the
+         * buffer must be allocated with [HardwareBuffer.USAGE_COMPOSER_OVERLAY] as well as
+         * [HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE] as the surface control might be composited using
+         * either an overlay or using the GPU. A presentation fence may be passed to improve
+         * performance by allowing the buffer to complete rendering while it is waiting for the
+         * transaction to be applied. For example, if the buffer is being produced by rendering with
+         * OpenGL ES then a fence created with the eglDupNativeFenceFDANDROID EGL extension API
+         * can be used to allow the GPU rendering to be concurrent with the transaction.
+         * The compositor will wait for the fence to be signaled before the buffer is displayed.
+         * If multiple buffers are set as part of the same transaction, the presentation fences of
+         * all of them must signal before any buffer is displayed. That is, the entire transaction
+         * is delayed until all presentation fences have signaled, ensuring the transaction remains
+         * consistent.
+         *
+         * @param surfaceControl Target [SurfaceControlCompat] to configure the provided buffer.
+         * @param buffer [HardwareBuffer] instance to be rendered by the [SurfaceControlCompat]
+         * instance.
+         * @param fence Optional [SyncFenceCompat] that serves as the presentation fence. If set,
+         * the [SurfaceControlCompat.Transaction] will not apply until the fence signals.
+         * @param releaseCallback Optional callback invoked when the buffer is ready for re-use
+         * after being presented to the display.
+         */
+        @JvmOverloads
+        fun setBuffer(
+            surfaceControl: SurfaceControlCompat,
+            buffer: HardwareBuffer,
+            fence: SyncFenceCompat? = null,
+            releaseCallback: (() -> Unit)? = null
+        ): Transaction {
+            mImpl.setBuffer(surfaceControl.scImpl, buffer, fence?.mImpl, releaseCallback)
+            return this
+        }
+
+        /**
+         * Set the Z-order for a given [SurfaceControlCompat], relative to it's siblings.
+         * If two siblings share the same Z order the ordering is undefined.
+         * [Surface]s with a negative Z will be placed below the parent [Surface].
+         */
+        fun setLayer(
+            surfaceControl: SurfaceControlCompat,
+            z: Int
+        ): Transaction {
+            mImpl.setLayer(surfaceControl.scImpl, z)
+            return this
+        }
+
+        /**
+         * Request to add a [SurfaceControlCompat.TransactionCommittedListener]. The callback is
+         * invoked when transaction is applied and the updates are ready to be presented.
+         * This callback does not mean buffers have been released! It simply means that any new
+         * transactions applied will not overwrite the transaction for which we are receiving a
+         * callback and instead will be included in the next frame.
+         * If you are trying to avoid dropping frames (overwriting transactions), and unable to
+         * use timestamps (Which provide a more efficient solution), then this method provides a
+         * method to pace your transaction application.
+         * @param executor [Executor] to provide the thread the callback is invoked on.
+         * @param listener [TransactionCommittedListener] instance that is invoked when the
+         * transaction has been committed.
+         */
+        @Suppress("PairedRegistration")
+        fun addTransactionCommittedListener(
+            executor: Executor,
+            listener: TransactionCommittedListener
+        ): Transaction {
+            mImpl.addTransactionCommittedListener(executor, listener)
+            return this
+        }
+
+        /**
+         * Updates the region for the content on this surface updated in this transaction. The
+         * damage region is the area of the buffer that has changed since the previously
+         * sent buffer. This can be used to reduce the amount of recomposition that needs to
+         * happen when only a small region of the buffer is being updated, such as for a small
+         * blinking cursor or a loading indicator.
+         * @param surfaceControl Target [SurfaceControlImpl] to set damage region of.
+         * @param region The region to be set. If null, the entire buffer is assumed dirty. This is
+         * equivalent to not setting a damage region at all.
+         */
+        fun setDamageRegion(
+            surfaceControl: SurfaceControlCompat,
+            region: Region?
+        ): Transaction {
+            mImpl.setDamageRegion(surfaceControl.scImpl, region)
+            return this
+        }
+
+        /**
+         * Set the alpha for a given surface. If the alpha is non-zero the SurfaceControl will
+         * be blended with the Surfaces under it according to the specified ratio.
+         * @param surfaceControl Target [SurfaceControlImpl] to set the alpha of.
+         * @param alpha The alpha to set. Value is between 0.0 and 1.0 inclusive.
+         */
+        fun setAlpha(
+            surfaceControl: SurfaceControlCompat,
+            alpha: Float
+        ): Transaction {
+            mImpl.setAlpha(surfaceControl.scImpl, alpha)
+            return this
+        }
+
+        /**
+         * Commit the transaction, clearing it's state, and making it usable as a new transaction.
+         * This will not release any resources and [SurfaceControlCompat.Transaction.close] must be
+         * called to release the transaction.
+         */
+        fun commit() {
+            mImpl.commit()
+        }
+
+        /**
+         * Release the native transaction object, without committing it.
+         */
+        override fun close() {
+            mImpl.close()
+        }
+
+        /**
+         * Consume the passed in transaction, and request the View hierarchy to apply it atomically
+         * with the next draw. This transaction will be merged with the buffer transaction from the
+         * ViewRoot and they will show up on-screen atomically synced. This will not cause a draw to
+         * be scheduled, and if there are no other changes to the View hierarchy you may need to
+         * call View.invalidate()
+         * @param attachedSurfaceControl [AttachedSurfaceControl] associated with the ViewRoot that
+         * will apply the provided transaction on the next draw pass
+         */
+        @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+        fun commitTransactionOnDraw(attachedSurfaceControl: AttachedSurfaceControl) {
+            mImpl.commitTransactionOnDraw(attachedSurfaceControl)
+        }
+
+        internal companion object {
+            @RequiresApi(Build.VERSION_CODES.Q)
+            fun createImpl(): SurfaceControlImpl.Transaction =
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+                    SurfaceControlVerificationHelper.createTransactionV33()
+                } else {
+                    SurfaceControlVerificationHelper.createTransactionV29()
+                }
+        }
+    }
+}
+
+/**
+ * Helper class to avoid class verification failures
+ */
+internal class SurfaceControlVerificationHelper private constructor() {
+
+    companion object {
+        @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+        @androidx.annotation.DoNotInline
+        fun createBuilderV33(): SurfaceControlImpl.Builder = SurfaceControlV33.Builder()
+
+        @RequiresApi(Build.VERSION_CODES.Q)
+        @androidx.annotation.DoNotInline
+        fun createBuilderV29(): SurfaceControlImpl.Builder = SurfaceControlV29.Builder()
+
+        @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+        @androidx.annotation.DoNotInline
+        fun createTransactionV33(): SurfaceControlImpl.Transaction = SurfaceControlV33.Transaction()
+
+        @RequiresApi(Build.VERSION_CODES.Q)
+        @androidx.annotation.DoNotInline
+        fun createTransactionV29(): SurfaceControlImpl.Transaction = SurfaceControlV29.Transaction()
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt
new file mode 100644
index 0000000..be1fee5
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt
@@ -0,0 +1,261 @@
+/*
+ * Copyright 2022 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.graphics.surface
+
+import android.graphics.Region
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.view.AttachedSurfaceControl
+import android.view.Surface
+import android.view.SurfaceControl
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import androidx.graphics.lowlatency.SyncFenceCompat
+import androidx.graphics.lowlatency.SyncFenceImpl
+import androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener
+import java.util.concurrent.Executor
+
+/**
+ * Interface that abstracts the implementation of the [SurfaceControl] APIs depending on API level
+ */
+internal interface SurfaceControlImpl {
+
+    /**
+     * Check whether this instance points to a valid layer with the system-compositor.
+     * For example this may be false if the layer was released ([release]).
+     */
+    fun isValid(): Boolean
+
+    /**
+     * Release the local reference to the server-side surface. The [Surface] may continue to exist
+     * on-screen as long as its parent continues to exist. To explicitly remove a [Surface] from the
+     * screen use [Transaction.reparent] with a null-parent. After release, [isValid] will return
+     * false and other methods will throw an exception. Always call [release] when you are done with
+     * a [SurfaceControlCompat] instance.
+     */
+    fun release()
+
+    /**
+     * Interface that abstracts the implementation of [SurfaceControl.Builder] APIs depending on
+     * API level
+     */
+    interface Builder {
+
+        /**
+         * Set a parent [Surface] from the provided [SurfaceView] for our new
+         * [SurfaceControlImpl]. Child surfaces are constrained to the onscreen region of their
+         * parent. Furthermore they stack relatively in Z order, and inherit the transformation of
+         * the parent.
+         * @param surfaceView Target [SurfaceView] used to provide the [Surface] this
+         * [SurfaceControlImpl] is associated with.
+         */
+        fun setParent(surfaceView: SurfaceView): Builder
+
+        /**
+         * Set a debugging-name for the [SurfaceControlImpl].
+         * @param name Debugging name configured on the [SurfaceControlCompat] instance.
+         */
+        fun setName(name: String): Builder
+
+        /**
+         * Construct a new [SurfaceControlImpl] with the set parameters.
+         * The builder remains valid after the [SurfaceControlImpl] instance is created.
+         */
+        fun build(): SurfaceControlImpl
+    }
+
+    @RequiresApi(Build.VERSION_CODES.KITKAT)
+    interface Transaction : AutoCloseable {
+
+        /**
+         * Indicates whether the surface must be considered opaque, even if its pixel format is
+         * set to translucent. This can be useful if an application needs full RGBA 8888 support for
+         * instance but will still draw every pixel opaque.
+         * This flag only determines whether opacity will be sampled from the alpha channel.
+         * Plane-alpha from calls to setAlpha() can still result in blended composition regardless
+         * of the opaque setting. Combined effects are (assuming a buffer format with an alpha
+         * channel):
+         *
+         * OPAQUE + alpha(1.0) == opaque composition
+         * OPAQUE + alpha(0.x) == blended composition
+         * OPAQUE + alpha(0.0) == no composition
+         * !OPAQUE + alpha(1.0) == blended composition
+         * !OPAQUE + alpha(0.x) == blended composition
+         * !OPAQUE + alpha(0.0) == no composition
+         * If the underlying buffer lacks an alpha channel, it is as if setOpaque(true) were set
+         * automatically.
+         *
+         * @param surfaceControl Target [SurfaceControlCompat] to change the opaque flag for
+         * @param isOpaque Flag indicating if the [SurfaceControlCompat] should be fully opaque or
+         * transparent
+         */
+        fun setOpaque(surfaceControl: SurfaceControlImpl, isOpaque: Boolean): Transaction
+
+        /**
+         * Toggle the visibility of a given Layer and it's sub-tree.
+         * @param surfaceControl Target [SurfaceControlImpl]
+         */
+        fun setVisibility(surfaceControl: SurfaceControlImpl, visible: Boolean): Transaction
+
+        /**
+         * Re-parents a given [SurfaceControlImpl] to a new parent. Children inherit transform
+         * (position, scaling) crop, visibility, and Z-ordering from their parents, as if the
+         * children were pixels within the parent [Surface].
+         * @param surfaceControl Target [SurfaceControlImpl] instance to reparent
+         * @param newParent Parent [SurfaceControlImpl] that the target [SurfaceControlCompat]
+         * instance is added to. This can be null indicating that the target [SurfaceControlCompat]
+         * should be removed from the scene.
+         */
+        fun reparent(
+            surfaceControl: SurfaceControlImpl,
+            newParent: SurfaceControlImpl?
+        ): Transaction
+
+        /**
+         * Re-parents a given [SurfaceControlImpl] to be a child of the [Surface] associated with
+         * the provided [SurfaceView]. Children inherit transform
+         * (position, scaling) crop, visibility, and Z-ordering from their parents, as if the
+         * children were pixels within the parent [Surface].
+         * @param surfaceControl Target [SurfaceControlImpl] instance to reparent
+         * @param surfaceView [SurfaceView] instance that acts as the new parent of the provided
+         * [SurfaceControlImpl] instance.
+         */
+        fun reparent(surfaceControl: SurfaceControlImpl, surfaceView: SurfaceView): Transaction
+
+        /**
+         * Re-parents a given [SurfaceControlImpl] to be a child of the [AttachedSurfaceControl].
+         * Children inherit transform (position, scaling) crop, visibility, and Z-ordering from
+         * their parents, as if the children were pixels within the parent [Surface].
+         * @param surfaceControl Target [SurfaceControlImpl] instance to reparent
+         * @param attachedSurfaceControl [AttachedSurfaceControl] instance that acts as the new
+         * parent of the provided [SurfaceControlImpl] instance.
+         */
+        @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+        fun reparent(
+            surfaceControl: SurfaceControlImpl,
+            attachedSurfaceControl: AttachedSurfaceControl
+        ): Transaction
+
+        /**
+         * Updates the [HardwareBuffer] displayed for the [SurfaceControlImpl]. Note that the
+         * buffer must be allocated with [HardwareBuffer.USAGE_COMPOSER_OVERLAY] as well as
+         * [HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE] as the surface control might be composited using
+         * either an overlay or using the GPU. A presentation fence may be passed to improve
+         * performance by allowing the buffer to complete rendering while it is waiting for the
+         * transaction to be applied. For example, if the buffer is being produced by rendering with
+         * OpenGL ES then a fence created with the eglDupNativeFenceFDANDROID EGL extension API
+         * can be used to allow the GPU rendering to be concurrent with the transaction.
+         * The compositor will wait for the fence to be signaled before the buffer is displayed.
+         * If multiple buffers are set as part of the same transaction, the presentation fences of
+         * all of them must signal before any buffer is displayed. That is, the entire transaction
+         * is delayed until all presentation fences have signaled, ensuring the transaction remains
+         * consistent.
+         *
+         * @param surfaceControl Target [SurfaceControlImpl] to configure the provided buffer.
+         * @param buffer [HardwareBuffer] instance to be rendered by the [SurfaceControlImpl]
+         * instance.
+         * @param fence Optional [SyncFenceCompat] that serves as the presentation fence. If set,
+         * the [SurfaceControlCompat.Transaction] will not apply until the fence signals.
+         * @param releaseCallback Optional callback invoked when the buffer is ready for re-use
+         * after being presented to the display.
+         */
+        fun setBuffer(
+            surfaceControl: SurfaceControlImpl,
+            buffer: HardwareBuffer,
+            fence: SyncFenceImpl? = null,
+            releaseCallback: (() -> Unit)? = null
+        ): Transaction
+
+        /**
+         * Set the Z-order for a given [SurfaceControlImpl], relative to it's siblings.
+         * If two siblings share the same Z order the ordering is undefined.
+         * [Surface]s with a negative Z will be placed below the parent [Surface].
+         */
+        fun setLayer(
+            surfaceControl: SurfaceControlImpl,
+            z: Int
+        ): Transaction
+
+        /**
+         * Request to add a [SurfaceControlCompat.TransactionCommittedListener]. The callback is
+         * invoked when transaction is applied and the updates are ready to be presented.
+         * This callback does not mean buffers have been released! It simply means that any new
+         * transactions applied will not overwrite the transaction for which we are receiving a
+         * callback and instead will be included in the next frame.
+         * If you are trying to avoid dropping frames (overwriting transactions), and unable to
+         * use timestamps (Which provide a more efficient solution), then this method provides a
+         * method to pace your transaction application.
+         * @param executor [Executor] to provide the thread the callback is invoked on.
+         * @param listener [TransactionCommittedListener] instance that is invoked when the
+         * transaction has been committed.
+         */
+        fun addTransactionCommittedListener(
+            executor: Executor,
+            listener: TransactionCommittedListener
+        ): Transaction
+
+        /**
+         * Updates the region for the content on this surface updated in this transaction. The
+         * damage region is the area of the buffer that has changed since the previously
+         * sent buffer. This can be used to reduce the amount of recomposition that needs to
+         * happen when only a small region of the buffer is being updated, such as for a small
+         * blinking cursor or a loading indicator.
+         * @param surfaceControl Target [SurfaceControlImpl] to set damage region of.
+         * @param region The region to be set. If null, the entire buffer is assumed dirty. This is
+         * equivalent to not setting a damage region at all.
+         */
+        fun setDamageRegion(
+            surfaceControl: SurfaceControlImpl,
+            region: Region?
+        ): Transaction
+
+        /**
+         * Set the alpha for a given surface. If the alpha is non-zero the SurfaceControl will
+         * be blended with the Surfaces under it according to the specified ratio.
+         * @param surfaceControl Target [SurfaceControlImpl] to set the alpha of.
+         * @param alpha The alpha to set. Value is between 0.0 and 1.0 inclusive.
+         */
+        fun setAlpha(
+            surfaceControl: SurfaceControlImpl,
+            alpha: Float
+        ): Transaction
+
+        /**
+         * Commit the transaction, clearing it's state, and making it usable as a new transaction.
+         * This will not release any resources and [SurfaceControlImpl.Transaction.close] must be
+         * called to release the transaction.
+         */
+        fun commit()
+
+        /**
+         * Release the native transaction object, without committing it.
+         */
+        override fun close()
+
+        /**
+         * Consume the passed in transaction, and request the View hierarchy to apply it atomically
+         * with the next draw. This transaction will be merged with the buffer transaction from the
+         * ViewRoot and they will show up on-screen atomically synced. This will not cause a draw to
+         * be scheduled, and if there are no other changes to the View hierarchy you may need to
+         * call View.invalidate()
+         * @param attachedSurfaceControl [AttachedSurfaceControl] associated with the ViewRoot that
+         * will apply the provided transaction on the next draw pass
+         */
+        @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+        fun commitTransactionOnDraw(attachedSurfaceControl: AttachedSurfaceControl)
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt
new file mode 100644
index 0000000..1257c221
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt
@@ -0,0 +1,279 @@
+/*
+ * Copyright 2022 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.graphics.surface
+
+import android.graphics.Region
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.view.AttachedSurfaceControl
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import androidx.graphics.lowlatency.SyncFenceImpl
+import androidx.graphics.lowlatency.SyncFenceV19
+import androidx.hardware.SyncFence
+import java.util.concurrent.Executor
+
+/**
+ * Implementation of [SurfaceControlImpl] that wraps the [SurfaceControlWrapper] API.
+ */
+@RequiresApi(Build.VERSION_CODES.Q)
+internal class SurfaceControlV29 internal constructor(
+    internal val surfaceControl: SurfaceControlWrapper
+) : SurfaceControlImpl {
+
+    /**
+     * See [SurfaceControlWrapper.isValid]
+     */
+    override fun isValid(): Boolean = surfaceControl.isValid()
+
+    /**
+     * See [SurfaceControlWrapper.release]
+     */
+    override fun release() {
+        surfaceControl.release()
+    }
+
+    /**
+     * See [SurfaceControlWrapper.Builder]
+     */
+    class Builder : SurfaceControlImpl.Builder {
+        private var builder = SurfaceControlWrapper.Builder()
+
+        /**
+         * See [SurfaceControlWrapper.Builder.setParent]
+         */
+        override fun setParent(surfaceView: SurfaceView): SurfaceControlImpl.Builder {
+            builder.setParent(surfaceView.holder.surface)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Builder.setDebugName]
+         */
+        override fun setName(name: String): SurfaceControlImpl.Builder {
+            builder.setDebugName(name)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Builder.build]
+         */
+        override fun build(): SurfaceControlImpl = SurfaceControlV29(builder.build())
+    }
+
+    /**
+     * See [SurfaceControlWrapper.Transaction]
+     */
+    class Transaction : SurfaceControlImpl.Transaction {
+        private val transaction = SurfaceControlWrapper.Transaction()
+        private val bufferCallbacks = ArrayList<(() -> Unit)>()
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.commit]
+         */
+        override fun commit() {
+            if (bufferCallbacks.size > 0) {
+                val callbackListener = object : SurfaceControlCompat.TransactionCompletedListener {
+                    override fun onTransactionCompleted() {
+                        for (callback in bufferCallbacks) {
+                            callback.invoke()
+                        }
+
+                        bufferCallbacks.clear()
+                    }
+                }
+
+                this.addTransactionCompletedListener(callbackListener)
+            }
+            transaction.commit()
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.setVisibility]
+         */
+        override fun setVisibility(
+            surfaceControl: SurfaceControlImpl,
+            visible: Boolean
+        ): SurfaceControlImpl.Transaction {
+            transaction.setVisibility(surfaceControl.asWrapperSurfaceControl(), visible)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.reparent]
+         */
+        override fun reparent(
+            surfaceControl: SurfaceControlImpl,
+            newParent: SurfaceControlImpl?
+        ): SurfaceControlImpl.Transaction {
+            transaction.reparent(
+                surfaceControl.asWrapperSurfaceControl(),
+                newParent?.asWrapperSurfaceControl()
+            )
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.reparent]
+         */
+        override fun reparent(
+            surfaceControl: SurfaceControlImpl,
+            surfaceView: SurfaceView
+        ): SurfaceControlImpl.Transaction {
+            transaction.reparent(
+                surfaceControl.asWrapperSurfaceControl(),
+                SurfaceControlWrapper.Builder()
+                    .setParent(surfaceView.holder.surface)
+                    .setDebugName(surfaceView.toString())
+                    .build()
+            )
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.setBuffer]
+         */
+        override fun setBuffer(
+            surfaceControl: SurfaceControlImpl,
+            buffer: HardwareBuffer,
+            fence: SyncFenceImpl?,
+            releaseCallback: (() -> Unit)?
+        ): SurfaceControlImpl.Transaction {
+            if (releaseCallback != null) {
+                bufferCallbacks.add { releaseCallback() }
+            }
+
+            // Ensure if we have a null value, we default to the default value for SyncFence
+            // argument to prevent null pointer dereference
+            if (fence == null) {
+                transaction.setBuffer(surfaceControl.asWrapperSurfaceControl(), buffer)
+            } else {
+                transaction.setBuffer(
+                    surfaceControl.asWrapperSurfaceControl(),
+                    buffer,
+                    fence.asSyncFenceCompat()
+                )
+            }
+
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.setLayer]
+         */
+        override fun setLayer(
+            surfaceControl: SurfaceControlImpl,
+            z: Int
+        ): SurfaceControlImpl.Transaction {
+            transaction.setLayer(surfaceControl.asWrapperSurfaceControl(), z)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.addTransactionCommittedListener]
+         */
+        @RequiresApi(Build.VERSION_CODES.S)
+        override fun addTransactionCommittedListener(
+            executor: Executor,
+            listener: SurfaceControlCompat.TransactionCommittedListener
+        ): SurfaceControlImpl.Transaction {
+            transaction.addTransactionCommittedListener(executor, listener)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.addTransactionCompletedListener]
+         */
+        fun addTransactionCompletedListener(
+            listener: SurfaceControlCompat.TransactionCompletedListener
+        ): SurfaceControlImpl.Transaction {
+            transaction.addTransactionCompletedListener(listener)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.setDamageRegion]
+         */
+        override fun setDamageRegion(
+            surfaceControl: SurfaceControlImpl,
+            region: Region?
+        ): SurfaceControlImpl.Transaction {
+            transaction.setDamageRegion(surfaceControl.asWrapperSurfaceControl(), region)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.setOpaque]
+         */
+        override fun setOpaque(
+            surfaceControl: SurfaceControlImpl,
+            isOpaque: Boolean
+        ): SurfaceControlImpl.Transaction {
+            transaction.setOpaque(surfaceControl.asWrapperSurfaceControl(), isOpaque)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.setAlpha]
+         */
+        override fun setAlpha(
+            surfaceControl: SurfaceControlImpl,
+            alpha: Float
+        ): SurfaceControlImpl.Transaction {
+            transaction.setAlpha(surfaceControl.asWrapperSurfaceControl(), alpha)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlWrapper.Transaction.close]
+         */
+        override fun close() {
+            transaction.close()
+        }
+
+        override fun reparent(
+            surfaceControl: SurfaceControlImpl,
+            attachedSurfaceControl: AttachedSurfaceControl
+        ): SurfaceControlImpl.Transaction {
+            throw UnsupportedOperationException(
+                "Reparenting to an AttachedSurfaceControl is only available on Android T+."
+            )
+        }
+
+        override fun commitTransactionOnDraw(attachedSurfaceControl: AttachedSurfaceControl) {
+            throw UnsupportedOperationException(
+                "Committing transactions synchronously with the draw pass of an " +
+                    "AttachedSurfaceControl is only available on Android T+."
+            )
+        }
+
+        private fun SurfaceControlImpl.asWrapperSurfaceControl(): SurfaceControlWrapper =
+            if (this is SurfaceControlV29) {
+                surfaceControl
+            } else {
+                throw IllegalArgumentException("Parent implementation is only for Android T+.")
+            }
+
+        private fun SyncFenceImpl.asSyncFenceCompat(): SyncFence =
+            if (this is SyncFenceV19) {
+                mSyncFence
+            } else {
+                throw IllegalArgumentException("Expected SyncFenceCompat implementation " +
+                    "for API level 19")
+            }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV33.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV33.kt
new file mode 100644
index 0000000..34ed9c7
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV33.kt
@@ -0,0 +1,253 @@
+/*
+ * Copyright 2022 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.graphics.surface
+
+import android.graphics.Region
+import android.hardware.HardwareBuffer
+import android.hardware.SyncFence
+import android.os.Build
+import android.view.AttachedSurfaceControl
+import android.view.SurfaceControl
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import androidx.graphics.lowlatency.SyncFenceImpl
+import androidx.graphics.lowlatency.SyncFenceV33
+import java.util.concurrent.Executor
+
+/**
+ * Implementation of [SurfaceControlImpl] that wraps the SDK's [SurfaceControl] API.
+ */
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+internal class SurfaceControlV33 internal constructor(
+    internal val surfaceControl: SurfaceControl
+) : SurfaceControlImpl {
+
+    /**
+     * See [SurfaceControlImpl.isValid]
+     */
+    override fun isValid(): Boolean = surfaceControl.isValid
+
+    /**
+     * See [SurfaceControlImpl.release]
+     */
+    override fun release() {
+        surfaceControl.release()
+    }
+
+    /**
+     * See [SurfaceControlImpl.Builder]
+     */
+    class Builder : SurfaceControlImpl.Builder {
+
+        private val builder = SurfaceControl.Builder()
+
+        /**
+         * See [SurfaceControlImpl.Builder.setParent]
+         */
+        override fun setParent(surfaceView: SurfaceView): SurfaceControlImpl.Builder {
+            builder.setParent(surfaceView.surfaceControl)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Builder.setName]
+         */
+        override fun setName(name: String): Builder {
+            builder.setName(name)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Builder.build]
+         */
+        override fun build(): SurfaceControlImpl = SurfaceControlV33(builder.build())
+    }
+
+    /**
+     * See [SurfaceControlImpl.Transaction]
+     */
+    class Transaction : SurfaceControlImpl.Transaction {
+
+        private val mTransaction = SurfaceControl.Transaction()
+
+        /**
+         * See [SurfaceControlImpl.Transaction.setOpaque]
+         */
+        override fun setOpaque(
+            surfaceControl: SurfaceControlImpl,
+            isOpaque: Boolean
+        ): SurfaceControlImpl.Transaction {
+            mTransaction.setOpaque(surfaceControl.asFrameworkSurfaceControl(), isOpaque)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.setVisibility]
+         */
+        override fun setVisibility(
+            surfaceControl: SurfaceControlImpl,
+            visible: Boolean
+        ): SurfaceControlImpl.Transaction {
+            mTransaction.setVisibility(surfaceControl.asFrameworkSurfaceControl(), visible)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.setBuffer]
+         */
+        override fun setBuffer(
+            surfaceControl: SurfaceControlImpl,
+            buffer: HardwareBuffer,
+            fence: SyncFenceImpl?,
+            releaseCallback: (() -> Unit)?
+        ): Transaction {
+            mTransaction.setBuffer(
+                surfaceControl.asFrameworkSurfaceControl(),
+                buffer,
+                fence?.asSyncFence()
+            ) {
+                releaseCallback?.invoke()
+            }
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.setLayer]
+         */
+        override fun setLayer(
+            surfaceControl: SurfaceControlImpl,
+            z: Int
+        ): SurfaceControlImpl.Transaction {
+            mTransaction.setLayer(surfaceControl.asFrameworkSurfaceControl(), z)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.reparent]
+         */
+        override fun reparent(
+            surfaceControl: SurfaceControlImpl,
+            newParent: SurfaceControlImpl?
+        ): Transaction {
+            mTransaction.reparent(
+                surfaceControl.asFrameworkSurfaceControl(),
+                newParent?.asFrameworkSurfaceControl()
+            )
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.reparent]
+         */
+        override fun reparent(
+            surfaceControl: SurfaceControlImpl,
+            surfaceView: SurfaceView
+        ): SurfaceControlImpl.Transaction {
+            mTransaction.reparent(
+                surfaceControl.asFrameworkSurfaceControl(),
+                surfaceView.surfaceControl
+            )
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.reparent]
+         */
+        override fun reparent(
+            surfaceControl: SurfaceControlImpl,
+            attachedSurfaceControl: AttachedSurfaceControl
+        ): SurfaceControlImpl.Transaction {
+            val reparentTransaction = attachedSurfaceControl
+                .buildReparentTransaction(surfaceControl.asFrameworkSurfaceControl())
+            if (reparentTransaction != null) {
+                mTransaction.merge(reparentTransaction)
+            }
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.addTransactionCommittedListener]
+         */
+        override fun addTransactionCommittedListener(
+            executor: Executor,
+            listener: SurfaceControlCompat.TransactionCommittedListener
+        ): SurfaceControlImpl.Transaction {
+            mTransaction.addTransactionCommittedListener(executor) {
+                listener.onTransactionCommitted()
+            }
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.setDamageRegion]
+         */
+        override fun setDamageRegion(
+            surfaceControl: SurfaceControlImpl,
+            region: Region?
+        ): SurfaceControlImpl.Transaction {
+            mTransaction.setDamageRegion(surfaceControl.asFrameworkSurfaceControl(), region)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.setAlpha]
+         */
+        override fun setAlpha(
+            surfaceControl: SurfaceControlImpl,
+            alpha: Float
+        ): SurfaceControlImpl.Transaction {
+            mTransaction.setAlpha(surfaceControl.asFrameworkSurfaceControl(), alpha)
+            return this
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.commit]
+         */
+        override fun commit() {
+            mTransaction.apply()
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.close]
+         */
+        override fun close() {
+            mTransaction.close()
+        }
+
+        /**
+         * See [SurfaceControlImpl.Transaction.commitTransactionOnDraw]
+         */
+        override fun commitTransactionOnDraw(attachedSurfaceControl: AttachedSurfaceControl) {
+            attachedSurfaceControl.applyTransactionOnDraw(mTransaction)
+        }
+
+        private fun SurfaceControlImpl.asFrameworkSurfaceControl(): SurfaceControl =
+            if (this is SurfaceControlV33) {
+                surfaceControl
+            } else {
+                throw IllegalArgumentException("Parent implementation is not for Android T")
+            }
+
+        private fun SyncFenceImpl.asSyncFence(): SyncFence =
+            if (this is SyncFenceV33) {
+                mSyncFence
+            } else {
+                throw
+                IllegalArgumentException("Expected SyncFenceCompat implementation for API level 33")
+            }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlWrapper.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlWrapper.kt
new file mode 100644
index 0000000..7e28b7d
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlWrapper.kt
@@ -0,0 +1,490 @@
+/*
+ * 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.graphics.surface
+
+import android.graphics.Rect
+import android.graphics.Region
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.view.Surface
+import android.view.SurfaceControl
+import androidx.annotation.RequiresApi
+import androidx.hardware.SyncFence
+import java.util.concurrent.Executor
+
+internal class JniBindings {
+    companion object {
+        external fun nCreate(surfaceControl: Long, debugName: String): Long
+        external fun nCreateFromSurface(surface: Surface, debugName: String): Long
+        external fun nRelease(surfaceControl: Long)
+
+        external fun nTransactionCreate(): Long
+        external fun nTransactionDelete(surfaceTransaction: Long)
+        external fun nTransactionApply(surfaceTransaction: Long)
+        external fun nTransactionReparent(
+            surfaceTransaction: Long,
+            surfaceControl: Long,
+            newParent: Long
+        )
+
+        external fun nTransactionSetOnComplete(
+            surfaceTransaction: Long,
+            listener: SurfaceControlCompat.TransactionCompletedListener
+        )
+
+        external fun nTransactionSetOnCommit(
+            surfaceTransaction: Long,
+            listener: SurfaceControlCompat.TransactionCommittedListener
+        )
+
+        external fun nExtractFenceFd(
+            syncFence: SyncFence
+        ): Int
+
+        external fun nSetBuffer(
+            surfaceTransaction: Long,
+            surfaceControl: Long,
+            hardwareBuffer: HardwareBuffer,
+            acquireFieldFd: SyncFence
+        )
+
+        external fun nSetVisibility(
+            surfaceTransaction: Long,
+            surfaceControl: Long,
+            visibility: Byte
+        )
+
+        external fun nSetZOrder(surfaceTransaction: Long, surfaceControl: Long, zOrder: Int)
+        external fun nSetDamageRegion(
+            surfaceTransaction: Long,
+            surfaceControl: Long,
+            rect: Rect?
+        )
+
+        external fun nSetDesiredPresentTime(
+            surfaceTransaction: Long,
+            desiredPresentTime: Long
+        )
+
+        external fun nSetBufferTransparency(
+            surfaceTransaction: Long,
+            surfaceControl: Long,
+            transparency: Byte,
+        )
+
+        external fun nSetBufferAlpha(
+            surfaceTransaction: Long,
+            surfaceControl: Long,
+            alpha: Float
+        )
+
+        init {
+            System.loadLibrary("graphics-core")
+        }
+    }
+}
+
+/**
+ * Handle to an on-screen Surface managed by the system compositor. By constructing
+ * a [Surface] from this [SurfaceControlWrapper] you can submit buffers to be composited. Using
+ * [SurfaceControlWrapper.Transaction] you can manipulate various properties of how the buffer will be
+ * displayed on-screen. SurfaceControls are arranged into a scene-graph like hierarchy, and
+ * as such any SurfaceControl may have a parent. Geometric properties like transform, crop, and
+ * Z-ordering will be inherited from the parent, as if the child were content in the parents
+ * buffer stream.
+ *
+ * Compatibility class for [SurfaceControl]. This differs by being built upon the equivalent API
+ * within the Android NDK. It introduces some APIs into earlier platform releases than what was
+ * initially exposed for SurfaceControl.
+ */
+@RequiresApi(Build.VERSION_CODES.Q)
+internal class SurfaceControlWrapper internal constructor(
+    surface: Surface,
+    debugName: String
+) {
+    private var mNativeSurfaceControl: Long = 0
+
+    init {
+        mNativeSurfaceControl = JniBindings.nCreateFromSurface(surface, debugName)
+
+        if (mNativeSurfaceControl == 0L) {
+            throw IllegalArgumentException()
+        }
+    }
+
+    /**
+     * Compatibility class for ASurfaceTransaction.
+     */
+    class Transaction() {
+        private var mNativeSurfaceTransaction: Long
+
+        init {
+            mNativeSurfaceTransaction = JniBindings.nTransactionCreate()
+            if (mNativeSurfaceTransaction == 0L) {
+                throw java.lang.IllegalArgumentException()
+            }
+        }
+
+        /**
+         * Commits the updates accumulated in this transaction.
+         *
+         * This is the equivalent of ASurfaceTransaction_apply.
+         *
+         * Note that the transaction is guaranteed to be applied atomically. The
+         * transactions which are applied on the same thread are als guaranteed to be applied
+         * in order.
+         */
+        fun commit() {
+            JniBindings.nTransactionApply(mNativeSurfaceTransaction)
+        }
+
+        // Suppression of PairedRegistration below is in order to match existing
+        // framework implementation of no remove method for listeners
+
+        /**
+         * Sets the callback that is invoked once the updates from this transaction are
+         * presented.
+         *
+         * @param listener The callback that will be invoked when the transaction has
+         * been completed. This value cannot be null.
+         */
+        @Suppress("PairedRegistration")
+        internal fun addTransactionCompletedListener(
+            listener: SurfaceControlCompat.TransactionCompletedListener
+        ): Transaction {
+            JniBindings.nTransactionSetOnComplete(mNativeSurfaceTransaction, listener)
+            return this
+        }
+
+        /**
+         * Sets the callback that is invoked once the updates from this transaction are
+         * applied and ready to be presented. This callback is invoked before the
+         * setOnCompleteListener callback.
+         *
+         * @param executor The executor that the callback should be invoked on.
+         * This value can be null, where it will run on the default thread. Callback and
+         * listener events are dispatched through this Executor, providing an easy way
+         * to control which thread is used.
+         *
+         * @param listener The callback that will be invoked when the transaction has
+         * been completed. This value cannot be null.
+         */
+        @RequiresApi(Build.VERSION_CODES.S)
+        @Suppress("PairedRegistration")
+        fun addTransactionCommittedListener(
+            executor: Executor?,
+            listener: SurfaceControlCompat.TransactionCommittedListener
+        ): Transaction {
+            var listenerWrapper = listener
+            if (executor != null) {
+                listenerWrapper = object : SurfaceControlCompat.TransactionCommittedListener {
+                    override fun onTransactionCommitted() {
+                        executor.execute { (listener::onTransactionCommitted)() }
+                    }
+                }
+            }
+            JniBindings.nTransactionSetOnCommit(mNativeSurfaceTransaction, listenerWrapper)
+            return this
+        }
+
+        /**
+         * Updates the [HardwareBuffer] displayed for the provided surfaceControl. Takes an
+         * optional [SyncFence] that is signalled when all pending work for the buffer
+         * is complete and the buffer can be safely read.
+         *
+         * The frameworks takes ownership of the syncFence passed and is responsible for closing
+         * it.
+         *
+         * Note that the buffer must be allocated with [HardwareBuffer.USAGE_COMPOSER_OVERLAY] and
+         * [HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE] as the surface control might be
+         * composited using an overlay or the GPU.
+         *
+         * @param surfaceControl The surfaceControl to update. Can not be null.
+         *
+         * @param hardwareBuffer The buffer to be displayed. This can not be null.
+         *
+         * @param syncFence The presentation fence. If null or invalid, this is equivalent to not
+         * including it.
+         */
+        @JvmOverloads
+        fun setBuffer(
+            surfaceControl: SurfaceControlWrapper,
+            hardwareBuffer: HardwareBuffer,
+            syncFence: SyncFence = SyncFence(-1)
+        ): Transaction {
+            JniBindings.nSetBuffer(
+                mNativeSurfaceTransaction,
+                surfaceControl.mNativeSurfaceControl,
+                hardwareBuffer,
+                syncFence
+            )
+            return this
+        }
+
+        /**
+         * Updates the visibility of the given [SurfaceControlWrapper]. If visibility is set to
+         * false, the [SurfaceControlWrapper] and all surfaces in the subtree will be hidden.
+         * By default SurfaceControls are visible.
+         *
+         * @param surfaceControl The SurfaceControl for which to set the visibility
+         * This value cannot be null.
+         *
+         * @param visibility the new visibility. A value of true means the surface and its children
+         * will be visible.
+         */
+        fun setVisibility(
+            surfaceControl: SurfaceControlWrapper,
+            visibility: Boolean
+        ): Transaction {
+            JniBindings.nSetVisibility(
+                mNativeSurfaceTransaction,
+                surfaceControl.mNativeSurfaceControl,
+                if (visibility) 1 else 0
+            )
+            return this
+        }
+
+        /**
+         * Updates z order index for [SurfaceControlWrapper]. Note that the z order for a
+         * surface is relative to other surfaces that are siblings of this surface.
+         * Behavior of siblings with the same z order is undefined.
+         *
+         * Z orders can range from Integer.MIN_VALUE to Integer.MAX_VALUE. Default z order
+         * index is 0. [SurfaceControlWrapper] instances are positioned back-to-front. That is
+         * lower z order values are rendered below other [SurfaceControlWrapper] instances with
+         * higher z order values.
+         *
+         * @param surfaceControl surface control to set the z order of.
+         *
+         * @param zOrder desired layer z order to set the surfaceControl.
+         */
+        fun setLayer(surfaceControl: SurfaceControlWrapper, zOrder: Int): Transaction {
+            JniBindings.nSetZOrder(
+                mNativeSurfaceTransaction,
+                surfaceControl.mNativeSurfaceControl,
+                zOrder
+            )
+            return this
+        }
+
+        /**
+         * Updates the region for content on this surface updated in this transaction. If
+         * unspecified, the complete surface will be assumed to be damaged. The damage region is
+         * the area of the buffer that has changed since the previously sent buffer. This can be
+         * used to reduce the amount of recomposition that needs to happen when only a small
+         * region of the buffer is being updated, such as for a small blinking cursor or
+         * a loading indicator.
+         *
+         * @param surfaceControl The surface control for which we want to set the damage region of.
+         *
+         * @param region The region to set. If null, the entire buffer is assumed dirty. This
+         * is equivalent to not setting a damage region at all.
+         */
+        fun setDamageRegion(
+            surfaceControl: SurfaceControlWrapper,
+            region: Region?
+        ): Transaction {
+            JniBindings.nSetDamageRegion(
+                mNativeSurfaceTransaction,
+                surfaceControl.mNativeSurfaceControl,
+                region?.bounds
+            )
+            return this
+        }
+
+        /**
+         * Re-parents a given layer to a new parent. Children inherit transform
+         * (position, scaling) crop, visibility, and Z-ordering from their parents, as
+         * if the children were pixels within the parent Surface.
+         *
+         * Any children of the reparented surfaceControl will remain children of
+         * the surfaceControl.
+         *
+         * The newParent can be null. Surface controls with a null parent do not
+         * appear on the display.
+         *
+         * @param surfaceControl The surface control to reparent
+         *
+         * @param newParent the new parent we want to set the surface control to. Can be null.
+         */
+        fun reparent(
+            surfaceControl: SurfaceControlWrapper,
+            newParent: SurfaceControlWrapper?
+        ): Transaction {
+            JniBindings.nTransactionReparent(
+                mNativeSurfaceTransaction,
+                surfaceControl.mNativeSurfaceControl,
+                newParent?.mNativeSurfaceControl ?: 0L
+            )
+            return this
+        }
+
+        /**
+         * Specifies a desiredPresentTime for the transaction. The framework will try to present
+         * the transaction at or after the time specified.
+         *
+         * Transactions will not be presented until all acquire fences have signaled even if the
+         * app requests an earlier present time.
+         *
+         * If an earlier transaction has a desired present time of x, and a later transaction
+         * has a desired present time that is before x, the later transaction will not preempt the
+         * earlier transaction.
+         *
+         * @param desiredPresentTimeNano The present time in nanoseconds to try to present the
+         * Transaction at.
+         */
+        fun setDesiredPresentTime(desiredPresentTimeNano: Long): Transaction {
+            JniBindings.nSetDesiredPresentTime(mNativeSurfaceTransaction, desiredPresentTimeNano)
+            return this
+        }
+
+        /**
+         * Update whether the content in the buffer associated with this surface is completely
+         * opaque. If true, every pixel of content in the buffer must be opaque or visual errors
+         * can occur.
+         *
+         * @param surfaceControl surface control to set the transparency of.
+         *
+         * @param isOpaque true if buffers alpha should be ignored
+         */
+        fun setOpaque(
+            surfaceControl: SurfaceControlWrapper,
+            isOpaque: Boolean
+        ): Transaction {
+            JniBindings.nSetBufferTransparency(
+                mNativeSurfaceTransaction,
+                surfaceControl.mNativeSurfaceControl,
+                if (isOpaque) 2 else 0
+            )
+            return this
+        }
+
+        /**
+         * Sets the alpha for the buffer. It uses a premultiplied blending.
+         *
+         * The passsed in alpha must be inclusively between 0.0 and 1.0.
+         *
+         * @paaram surfaceControl The surface control that we want to set the alpha of.
+         *
+         * @param alpha alpha value within the range [0, 1].
+         *
+         * @throws IllegalArgumentException if alpha is out of range.
+         */
+        fun setAlpha(
+            surfaceControl: SurfaceControlWrapper,
+            alpha: Float
+        ): Transaction {
+            if (alpha < 0.0f || alpha > 1.0f) {
+                throw IllegalArgumentException("Alpha value must be between 0.0 and 1.0.")
+            } else {
+                JniBindings.nSetBufferAlpha(
+                    mNativeSurfaceTransaction,
+                    surfaceControl.mNativeSurfaceControl,
+                    alpha
+                )
+            }
+            return this
+        }
+
+        /**
+         * Destroys the transaction object.
+         */
+        fun close() {
+            if (mNativeSurfaceTransaction != 0L) {
+                JniBindings.nTransactionDelete(mNativeSurfaceTransaction)
+                mNativeSurfaceTransaction = 0L
+            }
+        }
+
+        fun finalize() {
+            close()
+        }
+    }
+
+    /**
+     * Check whether this instance points to a valid layer with the system-compositor.
+     */
+    fun isValid(): Boolean = mNativeSurfaceControl != 0L
+
+    override fun equals(other: Any?): Boolean {
+        if (other == this) {
+            return true
+        }
+        if ((other == null) or
+            (other?.javaClass != SurfaceControlWrapper::class.java)
+        ) {
+            return false
+        }
+
+        other as SurfaceControlWrapper
+        if (other.mNativeSurfaceControl == this.mNativeSurfaceControl) {
+            return true
+        }
+
+        return false
+    }
+
+    override fun hashCode(): Int {
+        return mNativeSurfaceControl.hashCode()
+    }
+
+    /**
+     * Release the local reference to the server-side surface. The surface may continue to exist
+     * on-screen as long as its parent continues to exist. To explicitly remove a surface from the
+     * screen use [Transaction.reparent] with a null-parent. After release, [isValid] will return
+     * false and other methods will throw an exception. Always call release() when you're done with
+     * a SurfaceControl.
+     */
+    fun release() {
+        if (mNativeSurfaceControl != 0L) {
+            JniBindings.nRelease(mNativeSurfaceControl)
+            mNativeSurfaceControl = 0
+        }
+    }
+
+    protected fun finalize() {
+        release()
+    }
+
+    /**
+     * Builder class for [SurfaceControlWrapper].
+     *
+     * Requires a debug name.
+     */
+    class Builder {
+        private lateinit var mSurface: Surface
+        private lateinit var mDebugName: String
+
+        fun setParent(surface: Surface): Builder {
+            mSurface = surface
+            return this
+        }
+
+        @Suppress("MissingGetterMatchingBuilder")
+        fun setDebugName(debugName: String): Builder {
+            mDebugName = debugName
+            return this
+        }
+
+        /**
+         * Builds the [SurfaceControlWrapper] object
+         */
+        fun build(): SurfaceControlWrapper {
+            return SurfaceControlWrapper(mSurface, mDebugName)
+        }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/hardware/SyncFence.kt b/graphics/graphics-core/src/main/java/androidx/hardware/SyncFence.kt
new file mode 100644
index 0000000..4ba6353
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/hardware/SyncFence.kt
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2022 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.
+ */
+
+/*
+ * Copyright 2022 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.hardware
+
+import android.os.Build
+import androidx.annotation.RequiresApi
+import java.util.concurrent.TimeUnit
+
+/**
+ * A SyncFence represents a synchronization primitive which signals when hardware buffers have
+ * completed work on a particular resource.
+ *
+ * For example, GPU rendering to a frame buffer may generate a synchronization fence which signals
+ * when rendering has completed.
+ *
+ * When the fence signals, then the backing storage for the framebuffer may be safely read from,
+ * such as for display or media encoding.
+ */
+@RequiresApi(Build.VERSION_CODES.KITKAT)
+class SyncFence(private var fd: Int) : AutoCloseable {
+
+    /**
+     * Checks if the SyncFence object is valid.
+     * @return `true` if it is valid, `false` otherwise
+     */
+    fun isValid(): Boolean = fd != -1
+
+    /**
+     * Returns the time that the fence signaled in the [CLOCK_MONOTONIC] time domain.
+     * This returns [SyncFence.SIGNAL_TIME_INVALID] if the SyncFence is invalid.
+     */
+    fun getSignalTime(): Long =
+        if (isValid()) {
+            nGetSignalTime(fd)
+        } else {
+            SIGNAL_TIME_INVALID
+        }
+
+    /**
+     * Waits for a SyncFence to signal for up to the [timeoutNanos] duration. An invalid SyncFence,
+     * that is if [isValid] is `false`, is treated equivalently to a SyncFence that has already
+     * signaled. That is, wait() will immediately return `true`.
+     *
+     * @param timeoutNanos Timeout duration in nanoseconds. Providing a negative value will wait
+     * indefinitely until the fence is signaled
+     * @return `true` if the fence signaled or is not valid, `false` otherwise
+     */
+    fun await(timeoutNanos: Long): Boolean {
+        if (isValid()) {
+            val timeout: Int
+            if (timeoutNanos < 0) {
+                timeout = -1
+            } else {
+                timeout = TimeUnit.NANOSECONDS.toMillis(timeoutNanos).toInt()
+            }
+            return nWait(fd, timeout)
+        } else {
+            // invalid file descriptors will always return true
+            return true
+        }
+    }
+
+    /**
+     * Waits forever for a SyncFence to signal. An invalid SyncFence is treated equivalently to a
+     * SyncFence that has already signaled. That is, wait() will immediately return `true`.
+     *
+     * @return `true` if the fence signaled or isn't valid, `false` otherwise
+     */
+    fun awaitForever(): Boolean = await(-1)
+
+    /**
+     * Close the SyncFence instance. After this method is invoked the fence is invalid. That
+     * is subsequent calls to [isValid] will return `false`
+     */
+    override fun close() {
+        nClose(fd)
+        fd = -1
+    }
+
+    // SyncFence in the framework implements timeoutNanos as a long but
+    // it is casted down to an int within native code and eventually calls into
+    // the poll API which consumes a timeout in nanoseconds as an int.
+    private external fun nWait(fd: Int, timeoutMillis: Int): Boolean
+    private external fun nGetSignalTime(fd: Int): Long
+    private external fun nClose(fd: Int)
+
+    companion object {
+
+        /**
+         * An invalid signal time. Represents either the signal time for a SyncFence that isn't
+         * valid (that is, [isValid] is `false`), or if an error occurred while attempting to
+         * retrieve the signal time.
+         */
+        const val SIGNAL_TIME_INVALID: Long = -1L
+
+        /**
+         * A pending signal time. This is equivalent to the max value of a long, representing an
+         * infinitely far point in the future.
+         */
+        const val SIGNAL_TIME_PENDING: Long = Long.MAX_VALUE
+
+        init {
+            System.loadLibrary("sync-fence")
+        }
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/opengl/EGLExt.kt b/graphics/graphics-core/src/main/java/androidx/opengl/EGLExt.kt
new file mode 100644
index 0000000..0f48ee3
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/opengl/EGLExt.kt
@@ -0,0 +1,692 @@
+/*
+ * Copyright 2022 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.opengl
+
+import android.hardware.HardwareBuffer
+import android.opengl.EGLDisplay
+import android.os.Build
+import androidx.annotation.IntDef
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EGLConfigAttributes
+import androidx.hardware.SyncFence
+import androidx.opengl.EGLExt.Companion.eglCreateSyncKHR
+
+/**
+ * Utility class that provides some helper methods for interacting EGL Extension APIs
+ */
+@Suppress("AcronymName")
+class EGLExt private constructor() {
+
+    companion object {
+
+        /**
+         * Determines if applications can query the age of the back buffer contents for an
+         * EGL surface as the number of frames elapsed since the contents were recently defined
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_buffer_age.txt
+         */
+        const val EGL_EXT_BUFFER_AGE = "EGL_EXT_buffer_age"
+
+        /**
+         * Allows for efficient partial updates to an area of a **buffer** that has changed since
+         * the last time the buffer was used
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_partial_update.txt
+         */
+        const val EGL_KHR_PARTIAL_UPDATE = "EGL_KHR_partial_update"
+
+        /**
+         * Allows for efficient partial updates to an area of a **surface** that changes between
+         * frames for the surface. This relates to the differences between two buffers, the current
+         * back buffer and the current front buffer.
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_swap_buffers_with_damage.txt
+         */
+        const val EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE = "EGL_KHR_swap_buffers_with_damage"
+
+        /**
+         * Determines whether to use sRGB format default framebuffers to render sRGB
+         * content to display devices. Supports creation of EGLSurfaces which will be rendered to in
+         * sRGB by OpenGL contexts supporting that capability.
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_gl_colorspace.txt
+         */
+        const val EGL_KHR_GL_COLORSPACE = "EGL_KHR_gl_colorspace"
+
+        /**
+         * Determines whether creation of GL and ES contexts without an EGLConfig is allowed
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_no_config_context.txt
+         */
+        const val EGL_KHR_NO_CONFIG_CONTEXT = "EGL_KHR_no_config_context"
+
+        /**
+         * Determines whether floating point RGBA components are supported
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_pixel_format_float.txt
+         */
+        const val EGL_EXT_PIXEL_FORMAT_FLOAT = "EGL_EXT_pixel_format_float"
+
+        /**
+         * Determines whether extended sRGB color spaces are supported options for EGL Surfaces
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_gl_colorspace_scrgb.txt
+         */
+        const val EGL_EXT_GL_COLORSPACE_SCRGB = "EGL_EXT_gl_colorspace_scrgb"
+
+        /**
+         * Determines whether the underlying platform can support rendering framebuffers in the
+         * non-linear Display-P3 color space
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_gl_colorspace_display_p3_passthrough.txt
+         */
+        const val EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH =
+            "EGL_EXT_gl_colorspace_display_p3_passthrough"
+
+        /**
+         * Determines whether the platform framebuffers support rendering in a larger color gamut
+         * specified in the BT.2020 color space
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_gl_colorspace_bt2020_linear.txt
+         */
+        const val EGL_EXT_GL_COLORSPACE_BT2020_PQ = "EGL_EXT_gl_colorspace_bt2020_pq"
+
+        /**
+         * Determines whether an EGLContext can be created with a priority hint. Not all
+         * implementations are guaranteed to honor the hint.
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/IMG/EGL_IMG_context_priority.txt
+         */
+        const val EGL_IMG_CONTEXT_PRIORITY = "EGL_IMG_context_priority"
+
+        /**
+         * Determines whether creation of an EGL Context without a surface is supported.
+         * This is useful for applications that only want to render to client API targets (such as
+         * OpenGL framebuffer objects) and avoid the need to a throw-away EGL surface just to get
+         * a current context.
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_surfaceless_context.txt
+         */
+        const val EGL_KHR_SURFACELESS_CONTEXT = "EGL_KHR_surfaceless_context"
+
+        /**
+         * Determines whether sync objects are supported. Sync objects are synchronization
+         * primitives that represent events whose completion can be tested or waited upon.
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+         */
+        const val EGL_KHR_FENCE_SYNC = "EGL_KHR_fence_sync"
+
+        /**
+         * Determines whether waiting for signaling of sync objects is supported. This form of wait
+         * does not necessarily block the application thread which issued the wait. Therefore
+         * applications may continue to issue commands to the client API or perform other work
+         * in parallel leading to increased performance.
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_wait_sync.txt
+         */
+        const val EGL_KHR_WAIT_SYNC = "EGL_KHR_wait_sync"
+
+        /**
+         * Determines whether creation of platform specific sync objects are supported. These
+         * objects that are associated with a native synchronization fence object using a file
+         * descriptor.
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt
+         */
+        const val EGL_ANDROID_NATIVE_FENCE_SYNC = "EGL_ANDROID_native_fence_sync"
+
+        /**
+         * Enables using an Android window buffer (struct ANativeWindowBuffer) as an EGLImage source
+         *
+         * See: https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_image_native_buffer.txt
+         */
+        const val EGL_ANDROID_IMAGE_NATIVE_BUFFER = "EGL_ANDROID_image_native_buffer"
+
+        /**
+         * Extension for supporting a new EGL resource type that is suitable for
+         * sharing 2D arrays of image data between client APIs, the EGLImage.
+         * Although the intended purpose is sharing 2D image data, the
+         * underlying interface makes no assumptions about the format or
+         * purpose of the resource being shared, leaving those decisions to
+         * the application and associated client APIs.
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_image_base.txt
+         */
+        const val EGL_KHR_IMAGE_BASE = "EGL_KHR_image_base"
+
+        /**
+         * Extension that defines a new EGL resource type that is suitable for
+         * sharing 2D arrays of image data between client APIs, the EGLImage,
+         * and allows creating EGLImages from EGL native pixmaps.
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_image.txt
+         */
+        const val EGL_KHR_IMAGE = "EGL_KHR_image"
+
+        /**
+         * Specifies the types of attributes that can be queried in [eglGetSyncAttribKHR]
+         *
+         * @hide
+         */
+        @Suppress("AcronymName")
+        @IntDef(value = [EGL_SYNC_TYPE_KHR, EGL_SYNC_STATUS_KHR, EGL_SYNC_CONDITION_KHR])
+        annotation class EGLSyncAttribute
+
+        /**
+         * Attribute that can be queried in [eglGetSyncAttribKHR].
+         * The results can be either [EGL_SYNC_FENCE_KHR] or [EGL_SYNC_NATIVE_FENCE_ANDROID].
+         *
+         * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+         */
+        const val EGL_SYNC_TYPE_KHR = 0x30F7
+
+        /**
+         * Attribute that can be queried in [eglGetSyncAttribKHR].
+         * The results can be either [EGL_SIGNALED_KHR] or [EGL_UNSIGNALED_KHR] representing
+         * whether or not the sync object has been signalled or not.
+         * This can be queried on all sync object types.
+         *
+         * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+         */
+        const val EGL_SYNC_STATUS_KHR = 0x30F1
+
+        /**
+         * Attribute that can be queried in [eglGetSyncAttribKHR].
+         * This attribute can only be queried on sync objects of the type [EGL_SYNC_FENCE_KHR].
+         *
+         * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+         */
+        const val EGL_SYNC_CONDITION_KHR = 0x30F8
+
+        /**
+         * Return value when [eglGetSyncAttribKHR] is called with [EGL_SYNC_STATUS_KHR] indicating
+         * that the sync object has already been signalled.
+         *
+         * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+         */
+        const val EGL_SIGNALED_KHR = 0x30F2
+
+        /**
+         * Return value when [eglGetSyncAttribKHR] is called with [EGL_SYNC_STATUS_KHR] indicating
+         * that the sync object has not yet been signalled.
+         *
+         * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+         */
+        const val EGL_UNSIGNALED_KHR = 0x30F3
+
+        /**
+         * Return value when [eglGetSyncAttribKHR] is called with [EGL_SYNC_CONDITION_KHR].
+         * This indicates that the sync object will signal on the condition of the completion
+         * of the fence command on the corresponding sync object and all preceding commands
+         * in th EGL client API's command stream.
+         */
+        const val EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR = 0x30F0
+
+        /**
+         * Specifies the type of fence to create in [eglCreateSyncKHR]
+         *
+         * @hide
+         */
+        @Suppress("AcronymName")
+        @IntDef(value = [EGL_SYNC_FENCE_KHR, EGL_SYNC_NATIVE_FENCE_ANDROID])
+        annotation class EGLFenceType
+
+        /**
+         * Create an EGL fence sync object for signalling one time events. The fence object
+         * created is not associated with the Android Sync fence object and is not recommended
+         * for waiting for events in a portable manner across Android/EGL boundaries but rather
+         * other EGL primitives.
+         *
+         * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+         */
+        const val EGL_SYNC_FENCE_KHR = 0x30F9
+
+        /**
+         * This extension enables the creation of EGL fence sync objects that are
+         * associated with a native synchronization fence object that is referenced
+         * using a file descriptor.  These EGL fence sync objects have nearly
+         * identical semantics to those defined by the KHR_fence_sync extension,
+         * except that they have an additional attribute storing the file descriptor
+         * referring to the native fence object. This differs from EGL_SYNC_FENCE_KHR
+         * as the fence sync object is associated with an Android Sync HAL fence object.
+         *
+         * This extension assumes the existence of a native fence synchronization
+         * object that behaves similarly to an EGL fence sync object.  These native
+         * objects must have a signal status like that of an EGLSyncKHR object that
+         * indicates whether the fence has ever been signaled.  Once signaled the
+         * native object's signal status may not change again.
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt
+         */
+        const val EGL_SYNC_NATIVE_FENCE_ANDROID = 0x3144
+
+        /**
+         * Value that can be sent as the timeoutNanos parameter of [eglClientWaitSyncKHR]
+         * indicating that waiting on the sync object to signal will never time out.
+         */
+        // Note EGL has EGL_FOREVER_KHR defined as 0xFFFFFFFFFFFFFFFFuL. However, Java does not
+        // support unsigned long types. So use -1 as the constant value here as it will be casted
+        // as an EGLTimeKHR type which is uint64 in the corresponding JNI method
+        const val EGL_FOREVER_KHR = -1L
+
+        /**
+         * Specifies various return values for the [eglClientWaitSyncKHR] method
+         *
+         * @hide
+         */
+        @Target(AnnotationTarget.TYPE)
+        @Suppress("AcronymName")
+        @IntDef(value = [EGL_CONDITION_SATISFIED_KHR, EGL_TIMEOUT_EXPIRED_KHR, EGL_FALSE])
+        annotation class EGLClientWaitResult
+
+        /**
+         * Return value used in [eglClientWaitSyncKHR] to indicate that the specified timeout period
+         * had expired before a sync object was signalled.
+         */
+        const val EGL_TIMEOUT_EXPIRED_KHR = 0x30F5
+
+        /**
+         * Return value used in [eglClientWaitSyncKHR] to indicate that the sync object had
+         * signalled before the timeout expired. This includes the case where the sync object had
+         * already signalled before [eglClientWaitSyncKHR] was called.
+         */
+        const val EGL_CONDITION_SATISFIED_KHR = 0x30F6
+
+        /**
+         * Accepted in the flags parameter of [eglClientWaitSyncKHR]. This will implicitly ensure
+         * pending commands are flushed to prevent [eglClientWaitSyncKHR] from potentially blocking
+         * forever. See [eglClientWaitSyncKHR] for details.
+         */
+        const val EGL_SYNC_FLUSH_COMMANDS_BIT_KHR = 0x0001
+
+        /**
+         * Constant indicating true within EGL. This is often returned in success cases.
+         */
+        const val EGL_TRUE = 1
+
+        /**
+         * Constant indicating false within EGL. This is often returned in failure cases.
+         */
+        const val EGL_FALSE = 0
+
+        /**
+         * Creates an EGLImage from the provided [HardwareBuffer]. This handles
+         * internally creating an EGLClientBuffer and an [EGLImageKHR] from the client buffer.
+         *
+         * When this [EGLImageKHR] instance is no longer necessary, consumers should be sure to
+         * call the corresponding method [eglDestroyImageKHR] to deallocate the resource.
+         *
+         * @param eglDisplay EGLDisplay connection associated with the EGLImage to create
+         * @param hardwareBuffer Backing [HardwareBuffer] for the generated EGLImage instance
+         *
+         * @return an [EGLImageKHR] instance representing the [EGLImageKHR] created from the
+         * HardwareBuffer. Because this is created internally through EGL's eglCreateImageKR method,
+         * this has the KHR suffix.
+         *
+         * This can return null if the EGL_ANDROID_image_native_buffer and EGL_KHR_image_base
+         * extensions are not supported or if allocation of the buffer fails.
+         *
+         * See
+         * www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_get_native_client_buffer.txt
+         */
+        @JvmStatic
+        @RequiresApi(Build.VERSION_CODES.O)
+        fun eglCreateImageFromHardwareBuffer(
+            eglDisplay: EGLDisplay,
+            hardwareBuffer: HardwareBuffer
+        ): EGLImageKHR? {
+            val handle = EGLBindings.nCreateImageFromHardwareBuffer(
+                eglDisplay.obtainNativeHandle(), hardwareBuffer
+            )
+            return if (handle == 0L) {
+                null
+            } else {
+                EGLImageKHR(handle)
+            }
+        }
+
+        /**
+         * Destroy the given [EGLImageKHR] instance. Once destroyed, the image may not be used to
+         * create any additional [EGLImageKHR] target resources within any client API contexts,
+         * although existing [EGLImageKHR] siblings may continue to be used. `True` is returned
+         * if DestroyImageKHR succeeds, `false` indicates failure. This can return `false` if
+         * the [EGLImageKHR] is not associated with the default display.
+         *
+         * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_image_base.txt
+         *
+         * @param eglDisplay EGLDisplay that this EGLImage is connected to
+         * @param image EGLImageKHR to be destroyed
+         *
+         * @return True if the destruction of the EGLImageKHR object was successful, false otherwise
+         */
+        @JvmStatic
+        @Suppress("AcronymName")
+        fun eglDestroyImageKHR(
+            eglDisplay: EGLDisplay,
+            image: EGLImageKHR
+        ): Boolean = EGLBindings.nDestroyImageKHR(
+            eglDisplay.obtainNativeHandle(),
+            image.nativeHandle
+        )
+
+        /**
+         * Upload a given EGLImage to the currently bound GLTexture
+         *
+         * This method requires either of the following EGL extensions to be supported:
+         * EGL_KHR_image_base or EGL_KHR_image
+         *
+         * See: https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt
+         */
+        @JvmStatic
+        @Suppress("AcronymName")
+        fun glEGLImageTargetTexture2DOES(target: Int, image: EGLImageKHR) {
+            EGLBindings.nImageTargetTexture2DOES(target, image.nativeHandle)
+        }
+
+        /**
+         * Creates a sync object of the specified type associated with the
+         * specified display, and returns a handle to the new object.
+         * The configuration of the returned [EGLSyncKHR] object is specified by the provided
+         * attributes.
+         *
+         * Consumers should ensure that the EGL_KHR_fence_sync EGL extension is supported before
+         * invoking this method otherwise a null EGLSyncFenceKHR object is returned.
+         *
+         * Additionally when the [EGLSyncKHR] instance is no longer necessary, consumers are
+         * encouraged to call [eglDestroySyncKHR] to deallocate this resource.
+         *
+         * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+         *
+         * @param eglDisplay EGLDisplay to associate the sync object with
+         * @param type Indicates the type of sync object that is returned
+         * @param attributes Specifies the configuration of the sync object returned
+         *
+         * @return the EGLSyncKHR object to be used as a fence or null if this extension
+         * is not supported
+         */
+        @JvmStatic
+        @Suppress("AcronymName")
+        fun eglCreateSyncKHR(
+            eglDisplay: EGLDisplay,
+            @EGLFenceType type: Int,
+            attributes: EGLConfigAttributes?
+        ): EGLSyncKHR? {
+            val handle = EGLBindings.nCreateSyncKHR(
+                eglDisplay.obtainNativeHandle(), type, attributes?.attrs
+            )
+            return if (handle == 0L) {
+                null
+            } else {
+                EGLSyncKHR(handle)
+            }
+        }
+
+        /**
+         * Query attributes of the provided sync object. Accepted attributes to query depend
+         * on the type of sync object. If no errors are generated, this returns true and the
+         * value of the queried attribute is stored in the value array at the offset position.
+         * If this method returns false, the provided value array is unmodified.
+         *
+         * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+         *
+         * @param eglDisplay EGLDisplay to associate the sync object with
+         * @param sync EGLSyncKHR object to query attributes
+         * @param attribute Corresponding EGLSyncKHR attribute to query on [sync]
+         * @param value Integer array used to store the result of the query
+         * @param offset Index within the value array to store the result of the attribute query
+         *
+         * @return True if the attribute was queried successfully, false otherwise. Failure cases
+         * include attempting to call this method on an invalid sync object, or the display provided
+         * not matching the display that was used to create this sync object. Additionally if the
+         * queried attribute is not supported for the sync object, false is returned.
+         */
+        @JvmStatic
+        @Suppress("AcronymName")
+        fun eglGetSyncAttribKHR(
+            eglDisplay: EGLDisplay,
+            sync: EGLSyncKHR,
+            @EGLSyncAttribute attribute: Int,
+            value: IntArray,
+            offset: Int
+        ): Boolean =
+            EGLBindings.nGetSyncAttribKHR(
+                eglDisplay.obtainNativeHandle(),
+                sync.nativeHandle,
+                attribute,
+                value,
+                offset
+            )
+
+        /**
+         * Blocks the calling thread until the specified sync object is signalled or until
+         * [timeoutNanos] nanoseconds have passed.
+         * More than one [eglClientWaitSyncKHR] may be outstanding on the same [sync] at any given
+         * time. When there are multiple threads blocked on the same [sync] and the [sync] object
+         * has signalled, all such threads are released, but the order in which they are released is
+         * not defined.
+         *
+         * If the value of [timeoutNanos] is zero, then [eglClientWaitSyncKHR] simply tests the
+         * current status of sync. If the value of [timeoutNanos] is the special value
+         * [EGL_FOREVER_KHR], then [eglClientWaitSyncKHR] does not time out. For all other values,
+         * [timeoutNanos] is adjusted to the closest value allowed by the implementation-dependent
+         * timeout accuracy, which may be substantially longer than one nanosecond.
+         *
+         * [eglClientWaitSyncKHR] returns one of three status values describing the reason for
+         * returning. A return value of [EGL_TIMEOUT_EXPIRED_KHR] indicates that the specified
+         * timeout period expired before [sync] was signalled, or if [timeoutNanos] is zero,
+         * indicates that [sync] is not signaled. A return value of [EGL_CONDITION_SATISFIED_KHR]
+         * indicates that [sync] was signaled before the timeout expired, which includes the case
+         * when [sync] was already signaled when [eglClientWaitSyncKHR] was called. If an error
+         * occurs then an error is generated and [EGL_FALSE] is returned.
+         *
+         * If the sync object being blocked upon will not be signaled in finite time (for example
+         * by an associated fence command issued previously, but not yet flushed to the graphics
+         * pipeline), then [eglClientWaitSyncKHR] may wait forever. To help prevent this behavior,
+         * if the [EGL_SYNC_FLUSH_COMMANDS_BIT_KHR] is set on the flags parameter and the [sync] is
+         * unsignaled when [eglClientWaitSyncKHR] is called, then the equivalent flush will be
+         * performed for the current EGL context before blocking on sync. If no context is
+         * current bound for the API, the [EGL_SYNC_FLUSH_COMMANDS_BIT_KHR] bit is ignored.
+         *
+         * @param eglDisplay EGLDisplay to associate the sync object with
+         * @param sync EGLSyncKHR object to wait on
+         * @param flags Optional flags to provide to handle flushing of pending commands
+         * @param timeoutNanos Optional timeout value to wait before this method returns, measured
+         * in nanoseconds. This value is always consumed as an unsigned long value so even negative
+         * values will be converted to their unsigned equivalent.
+         *
+         * @return Result code indicating the status of the wait request. Either
+         * [EGL_CONDITION_SATISFIED_KHR], if the sync did signal within the specified timeout,
+         * [EGL_TIMEOUT_EXPIRED_KHR] if the sync did not signal within the specified timeout,
+         * or [EGL_FALSE] if an error occurs.
+         */
+        @JvmStatic
+        @Suppress("AcronymName")
+        fun eglClientWaitSyncKHR(
+            eglDisplay: EGLDisplay,
+            sync: EGLSyncKHR,
+            flags: Int,
+            timeoutNanos: Long
+        ): @EGLClientWaitResult Int =
+            EGLBindings.nClientWaitSyncKHR(
+                eglDisplay.obtainNativeHandle(),
+                sync.nativeHandle,
+                flags,
+                timeoutNanos
+            )
+
+        /**
+         * Creates a native synchronization fence referenced through a file descriptor
+         * that is associated with an EGL fence sync object.
+         *
+         * See:
+         * https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt
+         *
+         * @param display The EGLDisplay connection
+         * @param sync The EGLSyncKHR to fetch the [SyncFence] from
+         * @return A [SyncFence] representing the native fence.
+         *  If [sync] is not a valid sync object for [display], an invalid [SyncFence]
+         *  instance is returned and an EGL_BAD_PARAMETER error is generated.
+         *  If the EGL_SYNC_NATIVE_FENCE_FD_ANDROID attribute of [sync] is
+         *  EGL_NO_NATIVE_FENCE_FD_ANDROID, an invalid [SyncFence] is
+         *  returned and an EGL_BAD_PARAMETER error is generated.
+         *  If [display] does not match the display passed to [eglCreateSyncKHR]
+         *  when [sync] was created, the behavior is undefined.
+         */
+        @JvmStatic
+        @Suppress("AcronymName")
+        @RequiresApi(Build.VERSION_CODES.KITKAT)
+        fun eglDupNativeFenceFDANDROID(display: EGLDisplay, sync: EGLSyncKHR): SyncFence {
+            val fd = EGLBindings.nDupNativeFenceFDANDROID(
+                display.obtainNativeHandle(),
+                sync.nativeHandle
+            )
+            return if (fd >= 0) {
+                SyncFence(fd)
+            } else {
+                SyncFence(-1)
+            }
+        }
+
+        /**
+         * Destroys the given sync object associated with the specified display
+         *
+         * Consumers should ensure that the EGL_KHR_fence_sync EGL extension is supported before
+         * invoking this method otherwise a null EGLSyncFenceKHR object is returned.
+         * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+         *
+         * @param eglDisplay EGLDisplay instance associated with the fence
+         * @param eglSync Fence object to be destroyed
+         *
+         * @return true if the EGLSyncKHR object was destroyed successfully false otherwise. This
+         * can return false if the sync object is not a valid sync object for the provided display
+         * or if the display provided in this method does not match the display used to create this
+         * sync in eglCreateSyncKHR.
+         */
+        @JvmStatic
+        @Suppress("AcronymName")
+        fun eglDestroySyncKHR(
+            eglDisplay: EGLDisplay,
+            eglSync: EGLSyncKHR
+        ): Boolean = EGLBindings.nDestroySyncKHR(
+            eglDisplay.obtainNativeHandle(),
+            eglSync.nativeHandle
+        )
+
+        /**
+         * Returns a set of supported supported extensions from a space separated string
+         * that represents the set of OpenGL extensions supported
+         */
+        @JvmStatic
+        fun parseExtensions(queryString: String): Set<String> =
+            HashSet<String>().apply { addAll(queryString.split(' ')) }
+
+        /**
+         * Helper method to obtain the corresponding native handle. Newer versions of Android
+         * represent the native pointer as a long instead of an integer to support 64 bits.
+         * For OS levels that support the wider bit format, invoke it otherwise cast the int
+         * to a long.
+         *
+         * This is internal to avoid synthetic accessors
+         */
+        internal fun EGLDisplay.obtainNativeHandle(): Long =
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                EGLDisplayVerificationHelper.getNativeHandle(this)
+            } else {
+                @Suppress("DEPRECATION")
+                handle.toLong()
+            }
+    }
+}
+
+/**
+ * Helper class to configure JNI bindings to be invoked within the EGLUtils
+ * public API. This class is provided to separate responsibilities of jni method registration
+ * and helps to avoid synthetic accessor warnings
+ */
+internal class EGLBindings {
+    companion object {
+        external fun nCreateImageFromHardwareBuffer(
+            eglDisplayPtr: Long,
+            hardwareBuffer: HardwareBuffer
+        ): Long
+
+        // Note this API is explicitly a GL API and not an EGL API which is the reason
+        // why this has the GL prefix vs EGL
+        external fun nImageTargetTexture2DOES(target: Int, eglImagePtr: Long)
+        external fun nDupNativeFenceFDANDROID(eglDisplayPtr: Long, syncPtr: Long): Int
+        external fun nCreateSyncKHR(eglDisplayPtr: Long, type: Int, attrs: IntArray?): Long
+        external fun nGetSyncAttribKHR(
+            eglDisplayPtr: Long,
+            syncPtr: Long,
+            attrib: Int,
+            result: IntArray,
+            offset: Int
+        ): Boolean
+        external fun nClientWaitSyncKHR(
+            eglDisplayPtr: Long,
+            syncPtr: Long,
+            flags: Int,
+            timeout: Long
+        ): Int
+        external fun nDestroySyncKHR(eglDisplayPtr: Long, syncPtr: Long): Boolean
+        external fun nDestroyImageKHR(eglDisplayPtr: Long, eglImagePtr: Long): Boolean
+        external fun nSupportsEglGetNativeClientBufferAndroid(): Boolean
+        external fun nSupportsDupNativeFenceFDANDROID(): Boolean
+        external fun nSupportsEglCreateImageKHR(): Boolean
+        external fun nSupportsEglDestroyImageKHR(): Boolean
+        external fun nSupportsGlImageTargetTexture2DOES(): Boolean
+        external fun nSupportsEglCreateSyncKHR(): Boolean
+        external fun nSupportsEglGetSyncAttribKHR(): Boolean
+        external fun nSupportsEglClientWaitSyncKHR(): Boolean
+        external fun nSupportsEglDestroySyncKHR(): Boolean
+        external fun nEqualToNativeForeverTimeout(timeoutNanos: Long): Boolean
+
+        init {
+            System.loadLibrary("graphics-core")
+        }
+    }
+}
+
+/**
+ * Helper class to avoid class verification failures
+ */
+@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
+private class EGLDisplayVerificationHelper private constructor() {
+
+    companion object {
+        @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
+        @androidx.annotation.DoNotInline
+        fun getNativeHandle(eglDisplay: EGLDisplay): Long = eglDisplay.nativeHandle
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/opengl/EGLHandle.kt b/graphics/graphics-core/src/main/java/androidx/opengl/EGLHandle.kt
new file mode 100644
index 0000000..e799fb7
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/opengl/EGLHandle.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2022 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.opengl
+
+/**
+ * Interface used to wrap native EGL objects to create type safe objects
+ */
+@Suppress("AcronymName")
+interface EGLHandle {
+    /**
+     * Returns the native handle of the wrapped EGL object. This handle can be
+     * cast to the corresponding native type on the native side.
+     *
+     * For example, EGLDisplay dpy = (EGLDisplay)handle;
+     *
+     * @return the native handle of the wrapped EGL object.
+     */
+    val nativeHandle: Long
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/opengl/EGLImageKHR.kt b/graphics/graphics-core/src/main/java/androidx/opengl/EGLImageKHR.kt
new file mode 100644
index 0000000..3a27e89
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/opengl/EGLImageKHR.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2022 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.opengl
+
+/**
+ * EGLImageKHR is an object which can be used to create EGLImage
+ * target resources (inside client APIs).
+ * This is similar to EGL's EGLImage API except the KHR suffix indicates it is generated
+ * as part of the extension APIs namely through [EGLExt.eglCreateImageFromHardwareBuffer]
+ */
+@Suppress("AcronymName")
+class EGLImageKHR(override val nativeHandle: Long) : EGLHandle {
+
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other !is EGLImageKHR) return false
+
+        if (nativeHandle != other.nativeHandle) return false
+
+        return true
+    }
+
+    override fun hashCode(): Int {
+        return nativeHandle.hashCode()
+    }
+
+    override fun toString(): String {
+        return "EGLImageKHR(nativeHandle=$nativeHandle)"
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/opengl/EGLSyncKHR.kt b/graphics/graphics-core/src/main/java/androidx/opengl/EGLSyncKHR.kt
new file mode 100644
index 0000000..262dfbc
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/opengl/EGLSyncKHR.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2022 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.opengl
+
+/**
+ * EGLHandle to wrap native EGLSync objects.
+ * This is similar to EGL's EGLSync API except the KHR suffix indicates it is generated
+ * as part of the extension APIs namely through [EGLExt.eglCreateSyncKHR].
+ */
+@Suppress("AcronymName")
+class EGLSyncKHR(override val nativeHandle: Long) : EGLHandle {
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other !is EGLSyncKHR) return false
+
+        if (nativeHandle != other.nativeHandle) return false
+
+        return true
+    }
+
+    override fun hashCode(): Int {
+        return nativeHandle.hashCode()
+    }
+
+    override fun toString(): String {
+        return "EGLSyncKHR(nativeHandle=$nativeHandle)"
+    }
+}
\ No newline at end of file
diff --git a/gridlayout/gridlayout/lint-baseline.xml b/gridlayout/gridlayout/lint-baseline.xml
index d089f4c..7ead648 100644
--- a/gridlayout/gridlayout/lint-baseline.xml
+++ b/gridlayout/gridlayout/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
diff --git a/health/health-connect-client/lint-baseline.xml b/health/health-connect-client/lint-baseline.xml
index ab2b0f0..5f4b191 100644
--- a/health/health-connect-client/lint-baseline.xml
+++ b/health/health-connect-client/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/health/health-connect-client/samples/build.gradle b/health/health-connect-client/samples/build.gradle
index b8d661a..1fa6318 100644
--- a/health/health-connect-client/samples/build.gradle
+++ b/health/health-connect-client/samples/build.gradle
@@ -36,7 +36,7 @@
 androidx {
     name = "AndroidX Health Connect Library Samples"
     type = LibraryType.SAMPLES
-    publish = Publish.NONE
+    mavenVersion = LibraryVersions.HEALTH_CONNECT_CLIENT
     mavenGroup = LibraryGroups.HEALTH
     inceptionYear = "2022"
     description = "Contains the sample code for the Androidx Health Connect Library"
diff --git a/health/health-connect-client/samples/src/main/java/androidx/health/connect/client/samples/AggregationSamples.kt b/health/health-connect-client/samples/src/main/java/androidx/health/connect/client/samples/AggregationSamples.kt
new file mode 100644
index 0000000..829941f5
--- /dev/null
+++ b/health/health-connect-client/samples/src/main/java/androidx/health/connect/client/samples/AggregationSamples.kt
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2022 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.
+ */
+
+@file:Suppress("UNUSED_VARIABLE")
+
+package androidx.health.connect.client.samples
+
+import androidx.annotation.Sampled
+import androidx.health.connect.client.HealthConnectClient
+import androidx.health.connect.client.records.DistanceRecord
+import androidx.health.connect.client.records.HeartRateRecord
+import androidx.health.connect.client.records.StepsRecord
+import androidx.health.connect.client.request.AggregateRequest
+import androidx.health.connect.client.request.AggregateGroupByDurationRequest
+import androidx.health.connect.client.request.AggregateGroupByPeriodRequest
+import androidx.health.connect.client.time.TimeRangeFilter
+import java.time.Duration
+import java.time.Instant
+import java.time.Period
+
+@Sampled
+suspend fun AggregateDistance(
+    healthConnectClient: HealthConnectClient,
+    startTime: Instant,
+    endTime: Instant
+) {
+    val response =
+        healthConnectClient.aggregate(
+            AggregateRequest(
+                metrics = setOf(DistanceRecord.DISTANCE_TOTAL),
+                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
+            )
+        )
+    // The result may be null if no data is available in the time range.
+    val distanceTotalInMeters = response[DistanceRecord.DISTANCE_TOTAL]?.inMeters
+}
+
+@Sampled
+suspend fun AggregateHeartRate(
+    healthConnectClient: HealthConnectClient,
+    startTime: Instant,
+    endTime: Instant
+) {
+    val response =
+        healthConnectClient.aggregate(
+            AggregateRequest(
+                setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN),
+                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
+            )
+        )
+    // The result may be null if no data is available in the time range.
+    val minimumHeartRate = response[HeartRateRecord.BPM_MIN]
+    val maximumHeartRate = response[HeartRateRecord.BPM_MAX]
+}
+
+@Sampled
+suspend fun AggregateIntoMinutes(
+    healthConnectClient: HealthConnectClient,
+    startTime: Instant,
+    endTime: Instant
+) {
+    val response =
+        healthConnectClient.aggregateGroupByDuration(
+            AggregateGroupByDurationRequest(
+                metrics = setOf(StepsRecord.COUNT_TOTAL),
+                timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
+                timeRangeSlicer = Duration.ofMinutes(1)
+            )
+        )
+    for (monthlyResult in response) {
+        // The result may be null if no data is available in the time range.
+        val totalSteps = monthlyResult.result[StepsRecord.COUNT_TOTAL]
+    }
+}
+
+@Sampled
+suspend fun AggregateIntoMonths(
+    healthConnectClient: HealthConnectClient,
+    startTime: Instant,
+    endTime: Instant
+) {
+    val response =
+        healthConnectClient.aggregateGroupByPeriod(
+            AggregateGroupByPeriodRequest(
+                metrics = setOf(StepsRecord.COUNT_TOTAL),
+                timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
+                timeRangeSlicer = Period.ofMonths(1)
+            )
+        )
+    for (monthlyResult in response) {
+        // The result may be null if no data is available in the time range.
+        val totalSteps = monthlyResult.result[StepsRecord.COUNT_TOTAL]
+    }
+}
diff --git a/health/health-connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt b/health/health-connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
index c3dff53..d81a5a3a 100644
--- a/health/health-connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
+++ b/health/health-connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
@@ -160,6 +160,12 @@
      * Reads [AggregateMetric]s according to requested read criteria: [Record]s from
      * [AggregateRequest.dataOriginFilter] and within [AggregateRequest.timeRangeFilter].
      *
+     * Example code to aggregate cumulative data like distance:
+     * @sample androidx.health.connect.client.samples.AggregateDistance
+     *
+     * Example code to retrieve statistical aggregates like maximum or minimum heart rate:
+     * @sample androidx.health.connect.client.samples.AggregateHeartRate
+     *
      * @param request [AggregateRequest] object specifying [AggregateMetric]s to aggregate and other
      * filters.
      *
@@ -182,6 +188,9 @@
      * An [AggregationResultGroupedByDuration] is returned only if there are [Record] to aggregate
      * within start and end time of the row.
      *
+     * Example code to retrieve cumulative step count for each minute within provided time range:
+     * @sample androidx.health.connect.client.samples.AggregateIntoMinutes
+     *
      * @param request [AggregateGroupByDurationRequest] object specifying [AggregateMetric]s to
      * aggregate and other filters.
      *
@@ -207,6 +216,9 @@
      * An [AggregationResultGroupedByPeriod] is returned only if there are [Record] to aggregate
      * within start and end time of the row.
      *
+     * Example code to retrieve cumulative step count for each month within provided time range:
+     * @sample androidx.health.connect.client.samples.AggregateIntoMonths
+     *
      * @param request [AggregateGroupByPeriodRequest] object specifying [AggregateMetric]s to
      * aggregate and other filters.
      *
diff --git a/health/health-services-client/lint-baseline.xml b/health/health-services-client/lint-baseline.xml
index bc9039d..1fbcd64 100644
--- a/health/health-services-client/lint-baseline.xml
+++ b/health/health-services-client/lint-baseline.xml
@@ -1,28 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="BanKeepAnnotation"
-        message="Uses @Keep annotation"
-        errorLine1="@Keep"
-        errorLine2="~~~~~">
-        <location
-            file="src/main/java/androidx/health/services/client/data/AggregateDataPoints.kt"/>
-    </issue>
-
-    <issue
-        id="BanKeepAnnotation"
-        message="Uses @Keep annotation"
-        errorLine1="@Keep"
-        errorLine2="~~~~~">
-        <location
-            file="src/main/java/androidx/health/services/client/data/DataPoints.kt"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanParcelableUsage"
         message="Class implements android.os.Parcelable"
-        errorLine1="public data class ExerciseGoalRequest(val packageName: String, val exerciseGoal: ExerciseGoal) :"
+        errorLine1="public data class ExerciseGoalRequest(val packageName: String, val exerciseGoal: ExerciseGoal&lt;*>) :"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/health/services/client/impl/request/ExerciseGoalRequest.kt"/>
@@ -34,24 +16,6 @@
         errorLine1="        @Synchronized"
         errorLine2="        ^">
         <location
-            file="src/main/java/androidx/health/services/client/impl/ExerciseUpdateListenerStub.kt"/>
-    </issue>
-
-    <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="        @Synchronized"
-        errorLine2="        ^">
-        <location
-            file="src/main/java/androidx/health/services/client/impl/ExerciseUpdateListenerStub.kt"/>
-    </issue>
-
-    <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="        @Synchronized"
-        errorLine2="        ^">
-        <location
             file="src/main/java/androidx/health/services/client/impl/MeasureCallbackStub.kt"/>
     </issue>
 
@@ -138,15 +102,6 @@
 
     <issue
         id="SyntheticAccessor"
-        message="Access to `private` constructor of class `ExerciseUpdateListenerStub` requires synthetic accessor"
-        errorLine1="            return listeners.getOrPut(listener) { ExerciseUpdateListenerStub(listener, executor) }"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/health/services/client/impl/ExerciseUpdateListenerStub.kt"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
         message="Access to `private` constructor of class `MeasureCallbackStub` requires synthetic accessor"
         errorLine1="                measureCallbackStub = MeasureCallbackStub(callbackKey, measureCallback)"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~">
diff --git a/heifwriter/heifwriter/lint-baseline.xml b/heifwriter/heifwriter/lint-baseline.xml
index 90fe3a3..3a578ac 100644
--- a/heifwriter/heifwriter/lint-baseline.xml
+++ b/heifwriter/heifwriter/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/heifwriter/heifwriter/src/androidTest/java/androidx/heifwriter/HeifWriterTest.java b/heifwriter/heifwriter/src/androidTest/java/androidx/heifwriter/HeifWriterTest.java
index fd65713..af40a5a 100644
--- a/heifwriter/heifwriter/src/androidTest/java/androidx/heifwriter/HeifWriterTest.java
+++ b/heifwriter/heifwriter/src/androidTest/java/androidx/heifwriter/HeifWriterTest.java
@@ -459,7 +459,11 @@
                 }
                 mWidth = mBitmaps[0].getWidth();
                 mHeight = mBitmaps[0].getHeight();
-                retriever.release();
+                try {
+                    retriever.release();
+                } catch (IOException e) {
+                    // Nothing we can  do about it.
+                }
             }
 
             private void cleanupStaleOutputs() {
@@ -702,7 +706,11 @@
         assertEquals("Wrong primary index", primary,
                 Integer.parseInt(retriever.extractMetadata(
                         MediaMetadataRetriever.METADATA_KEY_IMAGE_PRIMARY)));
-        retriever.release();
+        try {
+            retriever.release();
+        } catch (IOException e) {
+            // Nothing we can  do about it.
+        }
 
         if (useGrid) {
             MediaExtractor extractor = new MediaExtractor();
diff --git a/leanback/leanback-preference/lint-baseline.xml b/leanback/leanback-preference/lint-baseline.xml
index 549e0a5..c24d1486 100644
--- a/leanback/leanback-preference/lint-baseline.xml
+++ b/leanback/leanback-preference/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="MissingLeanbackLauncher"
diff --git a/leanback/leanback/lint-baseline.xml b/leanback/leanback/lint-baseline.xml
index 6dab066..47d8c0e 100644
--- a/leanback/leanback/lint-baseline.xml
+++ b/leanback/leanback/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (7.1.0-beta02)" variant="all" version="7.1.0-beta02">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
@@ -20,69 +20,6 @@
     </issue>
 
     <issue
-        id="NewApi"
-        message="Call requires API level 24 (current min is 17): `android.app.Activity#enterPictureInPictureMode`"
-        errorLine1="                    getActivity().enterPictureInPictureMode();"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/leanback/app/PlaybackTestFragment.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 24 (current min is 17): `android.app.Activity#enterPictureInPictureMode`"
-        errorLine1="                    getActivity().enterPictureInPictureMode();"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/leanback/app/PlaybackTestSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 19 (current min is 17): `java.util.Objects#equals`"
-        errorLine1="            if (!Objects.equals(mPreviousQuery, newQuery)) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/leanback/app/SearchFragmentTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 19 (current min is 17): `java.util.Objects#equals`"
-        errorLine1="            if (!Objects.equals(mPreviousQuery, query)) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/leanback/app/SearchFragmentTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 19 (current min is 17): `java.util.Objects#equals`"
-        errorLine1="            if (!Objects.equals(mPreviousQuery, newQuery)) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/leanback/app/SearchSupportFragmentTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 19 (current min is 17): `java.util.Objects#equals`"
-        errorLine1="            if (!Objects.equals(mPreviousQuery, query)) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/leanback/app/SearchSupportFragmentTest.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PlaybackBannerControlGlue.PLAYBACK_SPEED_INVALID, PlaybackBannerControlGlue.PLAYBACK_SPEED_PAUSED, PlaybackBannerControlGlue.PLAYBACK_SPEED_NORMAL, PlaybackBannerControlGlue.PLAYBACK_SPEED_FAST_L0, PlaybackBannerControlGlue.PLAYBACK_SPEED_FAST_L1, PlaybackBannerControlGlue.PLAYBACK_SPEED_FAST_L2, PlaybackBannerControlGlue.PLAYBACK_SPEED_FAST_L3, PlaybackBannerControlGlue.PLAYBACK_SPEED_FAST_L4"
-        errorLine1="                mPlaybackSpeed = -PLAYBACK_SPEED_FAST_L0;"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
         id="ClassVerificationFailure"
         message="This call references a method added in API level 19; however, the containing class androidx.leanback.widget.BackgroundHelper is reachable from earlier API levels and will fail run-time class verification."
         errorLine1="                drawable.setAlpha(view.getBackground().getAlpha());"
@@ -120,69 +57,6 @@
 
     <issue
         id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.leanback.app.FragmentUtil is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return fragment.getContext();"
-        errorLine2="                            ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/FragmentUtil.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 26; however, the containing class androidx.leanback.widget.GuidedActionsStylist is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    vh.mTitleView.setAutofillHints(action.getAutofillHints());"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 26; however, the containing class androidx.leanback.widget.GuidedActionsStylist is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    vh.mTitleView.setAutofillHints((String[]) null);"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 26; however, the containing class androidx.leanback.widget.GuidedActionsStylist is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                vh.mTitleView.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 26; however, the containing class androidx.leanback.widget.GuidedActionsStylist is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    vh.mDescriptionView.setAutofillHints(action.getAutofillHints());"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 26; however, the containing class androidx.leanback.widget.GuidedActionsStylist is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    vh.mDescriptionView.setAutofillHints((String[]) null);"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 26; however, the containing class androidx.leanback.widget.GuidedActionsStylist is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                vh.mTitleView.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
         message="This call references a method added in API level 21; however, the containing class androidx.leanback.app.GuidedStepFragment is reachable from earlier API levels and will fail run-time class verification."
         errorLine1="                ft.addSharedElement(subView, transitionName);"
         errorLine2="                   ~~~~~~~~~~~~~~~~">
@@ -353,411 +227,6 @@
     </issue>
 
     <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return window.getSharedElementEnterTransition();"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            window.setSharedElementEnterTransition((Transition) transition);"
-        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return window.getSharedElementReturnTransition();"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            window.setSharedElementReturnTransition((Transition) transition);"
-        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return window.getSharedElementExitTransition();"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return window.getSharedElementReenterTransition();"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return window.getEnterTransition();"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            window.setEnterTransition((Transition) transition);"
-        errorLine2="                   ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return window.getReturnTransition();"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            window.setReturnTransition((Transition) transition);"
-        errorLine2="                   ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return window.getExitTransition();"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return window.getReenterTransition();"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            Scene scene = new Scene(sceneRoot);"
-        errorLine2="                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            scene.setEnterAction(r);"
-        errorLine2="                  ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            changeBounds.setReparent(reparent);"
-        errorLine2="                         ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new ChangeTransform();"
-        errorLine2="                   ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            TransitionSet set = new TransitionSet();"
-        errorLine2="                                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            set.setOrdering(sequential ? TransitionSet.ORDERING_SEQUENTIAL"
-        errorLine2="                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new ChangeTransform();"
-        errorLine2="                   ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((TransitionSet) transitionSet).addTransition((Transition) transition);"
-        errorLine2="                                            ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((Transition) transition).excludeTarget(targetId, exclude);"
-        errorLine2="                                      ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((Transition) transition).excludeTarget(targetView, exclude);"
-        errorLine2="                                      ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((Transition) transition).excludeChildren(targetId, exclude);"
-        errorLine2="                                      ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((Transition) transition).excludeChildren(targetView, exclude);"
-        errorLine2="                                      ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((Transition) transition).addTarget(targetId);"
-        errorLine2="                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((Transition) transition).addTarget(targetView);"
-        errorLine2="                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((Transition) transition).setStartDelay(startDelay);"
-        errorLine2="                                      ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((Transition) transition).setDuration(duration);"
-        errorLine2="                                      ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new AutoTransition();"
-        errorLine2="                   ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return new Fade(fadeMode);"
-        errorLine2="                   ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            t.addListener((Transition.TransitionListener) listener.mImpl);"
-        errorLine2="              ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            t.removeListener((Transition.TransitionListener) listener.mImpl);"
-        errorLine2="              ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            TransitionManager.go((Scene) scene, (Transition) transition);"
-        errorLine2="                              ~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((Transition) transition).setInterpolator((TimeInterpolator) timeInterpolator);"
-        errorLine2="                                      ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((Transition) transition).addTarget(view);"
-        errorLine2="                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return TransitionInflater.from(context).inflateTransition(resId);"
-        errorLine2="                                      ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return TransitionInflater.from(context).inflateTransition(resId);"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            fragment.setEnterTransition((Transition) transition);"
-        errorLine2="                     ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            fragment.setExitTransition((Transition) transition);"
-        errorLine2="                     ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            fragment.setSharedElementEnterTransition((Transition) transition);"
-        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ft.addSharedElement(view, transitionName);"
-        errorLine2="               ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            TransitionManager.beginDelayedTransition(sceneRoot, transition);"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            viewGroup.setTransitionGroup(transitionGroup);"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                ((Transition) transition).setEpicenterCallback(null);"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.leanback.transition.TransitionHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                ((Transition) transition).setEpicenterCallback(new Transition.EpicenterCallback() {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
-    </issue>
-
-    <issue
         id="PrivateConstructorForUtilityClass"
         message="Utility class is missing private constructor"
         errorLine1="public class FocusHighlightHelper {"
@@ -777,15 +246,6 @@
 
     <issue
         id="KotlinPropertyAccess"
-        message="This method should be called `getHasStableIds` such that `hasStableIds` can be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes"
-        errorLine1="    public final boolean hasStableIds() {"
-        errorLine2="                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="KotlinPropertyAccess"
         message="This getter should be public such that `pageCount` can be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes"
         errorLine1="    int getPageCount() {"
         errorLine2="        ~~~~~~~~~~~~">
@@ -819,15 +279,6 @@
 
     <issue
         id="KotlinPropertyAccess"
-        message="This method should be called `getSecondaryActionsHidden` such that `secondaryActionsHidden` can be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes"
-        errorLine1="    public boolean areSecondaryActionsHidden() {"
-        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="KotlinPropertyAccess"
         message="This method should be called `getIs24Hour` such that `is24Hour` can be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes"
         errorLine1="    public boolean is24Hour() {"
         errorLine2="                   ~~~~~~~~">
@@ -837,15 +288,6 @@
 
     <issue
         id="LambdaLast"
-        message="Functional interface parameters (such as parameter 2, &quot;what&quot;, in androidx.leanback.graphics.CompositeDrawable.scheduleDrawable) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions"
-        errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
-        errorLine2="                                                              ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="LambdaLast"
         message="Functional interface parameters (such as parameter 3, &quot;focusListener&quot;, in androidx.leanback.widget.GuidedActionAdapter.GuidedActionAdapter) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions"
         errorLine1="            FocusListener focusListener, GuidedActionsStylist presenter, boolean isSubAdapter) {"
         errorLine2="                                                                         ~~~~~~~~~~~~~~~~~~~~">
@@ -855,124 +297,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(final View view) {"
-        errorLine2="                                ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public TextView getTitle() {"
-        errorLine2="               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public TextView getSubtitle() {"
-        errorLine2="               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public TextView getBody() {"
-        errorLine2="               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="                 ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="                                               ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected abstract void onBindDescription(ViewHolder vh, Object item);"
-        errorLine2="                                              ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected abstract void onBindDescription(ViewHolder vh, Object item);"
-        errorLine2="                                                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {}"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onViewAttachedToWindow(Presenter.ViewHolder holder) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onViewDetachedFromWindow(Presenter.ViewHolder holder) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setActionPresenter(Presenter actionPresenter) {"
         errorLine2="                                   ~~~~~~~~~">
         <location
@@ -981,7 +306,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Presenter getActionPresenter() {"
         errorLine2="           ~~~~~~~~~">
         <location
@@ -990,7 +315,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
@@ -999,7 +324,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void notifyActionChanged(MultiActionsProvider.MultiAction action) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1008,7 +333,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View getSelectorView() {"
         errorLine2="               ~~~~">
         <location
@@ -1017,7 +342,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ViewFlipper getMediaItemNumberViewFlipper() {"
         errorLine2="               ~~~~~~~~~~~">
         <location
@@ -1026,7 +351,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public TextView getMediaItemNumberView() {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1035,7 +360,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View getMediaItemPausedView() {"
         errorLine2="               ~~~~">
         <location
@@ -1044,7 +369,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View getMediaItemPlayingView() {"
         errorLine2="               ~~~~">
         <location
@@ -1053,7 +378,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public TextView getMediaItemNameView() {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1062,7 +387,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public TextView getMediaItemDurationView() {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1071,7 +396,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View getMediaItemDetailsView() {"
         errorLine2="               ~~~~">
         <location
@@ -1080,7 +405,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View getMediaItemRowSeparator() {"
         errorLine2="               ~~~~">
         <location
@@ -1089,7 +414,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ViewGroup getMediaItemActionsContainer() {"
         errorLine2="               ~~~~~~~~~">
         <location
@@ -1098,7 +423,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MultiActionsProvider.MultiAction[] getMediaItemRowActions() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1107,7 +432,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1116,7 +441,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
@@ -1125,25 +450,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
-        errorLine2="                                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onBindRowActions(ViewHolder vh) {"
         errorLine2="                                    ~~~~~~~~~~">
         <location
@@ -1152,7 +459,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected abstract void onBindMediaDetails(ViewHolder vh, Object item);"
         errorLine2="                                               ~~~~~~~~~~">
         <location
@@ -1161,7 +468,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected abstract void onBindMediaDetails(ViewHolder vh, Object item);"
         errorLine2="                                                              ~~~~~~">
         <location
@@ -1170,7 +477,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onUnbindMediaDetails(ViewHolder vh) {"
         errorLine2="                                        ~~~~~~~~~~">
         <location
@@ -1179,7 +486,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onBindMediaPlayState(ViewHolder vh) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
@@ -1188,7 +495,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onUnbindMediaPlayState(ViewHolder vh) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
@@ -1197,7 +504,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected int getMediaPlayState(Object item) {"
         errorLine2="                                    ~~~~~~">
         <location
@@ -1206,7 +513,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
@@ -1215,7 +522,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public TextView getHeaderView() {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1224,7 +531,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public AbstractMediaListHeaderPresenter(Context context, int mThemeResId) {"
         errorLine2="                                            ~~~~~~~">
         <location
@@ -1233,7 +540,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1242,7 +549,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
@@ -1251,25 +558,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
-        errorLine2="                                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected abstract void onBindMediaListHeaderViewHolder(ViewHolder vh, Object item);"
         errorLine2="                                                            ~~~~~~~~~~">
         <location
@@ -1278,7 +567,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected abstract void onBindMediaListHeaderViewHolder(ViewHolder vh, Object item);"
         errorLine2="                                                                           ~~~~~~">
         <location
@@ -1287,223 +576,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Action(long id, CharSequence label) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Action(long id, CharSequence label1, CharSequence label2) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Action(long id, CharSequence label1, CharSequence label2) {"
-        errorLine2="                                                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) {"
-        errorLine2="                                                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) {"
-        errorLine2="                                                                     ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setLabel1(CharSequence label) {"
-        errorLine2="                                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final CharSequence getLabel1() {"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setLabel2(CharSequence label) {"
-        errorLine2="                                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final CharSequence getLabel2() {"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setIcon(Drawable icon) {"
-        errorLine2="                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final Drawable getIcon() {"
-        errorLine2="                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Action.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ArrayObjectAdapter(PresenterSelector presenterSelector) {"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ArrayObjectAdapter(Presenter presenter) {"
-        errorLine2="                              ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Object get(int index) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int indexOf(Object item) {"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void add(Object item) {"
-        errorLine2="                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void add(int index, Object item) {"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addAll(int index, Collection items) {"
-        errorLine2="                                  ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean remove(Object item) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void replace(int position, Object item) {"
-        errorLine2="                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public &lt;E> List&lt;E> unmodifiableList() {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setItems(final List itemList, final DiffCallback callback) {"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setItems(final List itemList, final DiffCallback callback) {"
-        errorLine2="                                                    ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void setBackgroundPreservingAlpha(View view, Drawable drawable) {"
         errorLine2="                                                    ~~~~">
         <location
@@ -1512,7 +585,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void setBackgroundPreservingAlpha(View view, Drawable drawable) {"
         errorLine2="                                                               ~~~~~~~~">
         <location
@@ -1521,7 +594,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static BackgroundManager getInstance(Activity activity) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
@@ -1530,7 +603,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static BackgroundManager getInstance(Activity activity) {"
         errorLine2="                                                ~~~~~~~~">
         <location
@@ -1539,7 +612,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void attach(Window window) {"
         errorLine2="                       ~~~~~~">
         <location
@@ -1548,7 +621,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void attachToView(View sceneRoot) {"
         errorLine2="                             ~~~~">
         <location
@@ -1557,34 +630,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setDimLayer(Drawable drawable) {"
-        errorLine2="                            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getDimLayer() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getDefaultDimLayer() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setDrawable(Drawable drawable) {"
         errorLine2="                            ~~~~~~~~">
         <location
@@ -1593,7 +639,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setBitmap(Bitmap bitmap) {"
         errorLine2="                          ~~~~~~">
         <location
@@ -1602,7 +648,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -1611,7 +657,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BaseCardView(Context context) {"
         errorLine2="                        ~~~~~~~">
         <location
@@ -1620,7 +666,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BaseCardView(Context context, AttributeSet attrs) {"
         errorLine2="                        ~~~~~~~">
         <location
@@ -1629,7 +675,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BaseCardView(Context context, AttributeSet attrs) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
@@ -1638,7 +684,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BaseCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                        ~~~~~~~">
         <location
@@ -1647,7 +693,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BaseCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
@@ -1656,70 +702,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected int[] onCreateDrawableState(int extraSpace) {"
-        errorLine2="              ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateDefaultLayoutParams() {"
-        errorLine2="              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
-        errorLine2="              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -1728,7 +711,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
@@ -1737,7 +720,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams p) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1746,7 +729,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
@@ -1755,43 +738,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onCreate(Bundle savedInstanceState) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected Object createEntranceTransition() {"
-        errorLine2="              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final ProgressBarManager getProgressBarManager() {"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1800,7 +747,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,"
         errorLine2="                                                            ~~~~~~">
         <location
@@ -1809,7 +756,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                              RowPresenter.ViewHolder rowViewHolder, T row);"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1818,7 +765,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1827,7 +774,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
         errorLine2="                                                                    ~~~~~~">
         <location
@@ -1836,7 +783,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                               RowPresenter.ViewHolder rowViewHolder, T row);"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1845,7 +792,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
@@ -1854,7 +801,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected Object createEntranceTransition() {"
         errorLine2="              ~~~~~~">
         <location
@@ -1863,7 +810,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
         errorLine2="                                         ~~~~~~">
         <location
@@ -1872,7 +819,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ProgressBarManager getProgressBarManager() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~">
         <location
@@ -1881,997 +828,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public static ValueRule inheritFromParent(float fraction) {"
-        errorLine2="                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public static ValueRule absoluteValue(int absoluteValue) {"
-        errorLine2="                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public static ValueRule inheritFromParentWithOffset(float fraction, int value) {"
-        errorLine2="                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void calculateBounds(Rect rect, Rect result) {"
-        errorLine2="                                ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void calculateBounds(Rect rect, Rect result) {"
-        errorLine2="                                           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public BoundsRule(BoundsRule boundsRule) {"
-        errorLine2="                      ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ValueRule left;"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ValueRule top;"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ValueRule right;"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ValueRule bottom;"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                Bundle savedInstanceState) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                 ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                            Bundle savedInstanceState) {"
-        errorLine2="                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTitleView(View titleView) {"
-        errorLine2="                             ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View getTitleView() {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public TitleViewAdapter getTitleViewAdapter() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle outState) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setBadgeDrawable(Drawable drawable) {"
-        errorLine2="                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getBadgeDrawable() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTitle(CharSequence title) {"
-        errorLine2="                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getTitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnSearchClickedListener(View.OnClickListener listener) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSearchAffordanceColors(SearchOrbView.Colors colors) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SearchOrbView.Colors getSearchAffordanceColors() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                Bundle savedInstanceState) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                 ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                            Bundle savedInstanceState) {"
-        errorLine2="                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTitleView(View titleView) {"
-        errorLine2="                             ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View getTitleView() {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public TitleViewAdapter getTitleViewAdapter() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle outState) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setBadgeDrawable(Drawable drawable) {"
-        errorLine2="                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getBadgeDrawable() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTitle(CharSequence title) {"
-        errorLine2="                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getTitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnSearchClickedListener(View.OnClickListener listener) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSearchAffordanceColors(SearchOrbView.Colors colors) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SearchOrbView.Colors getSearchAffordanceColors() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void notifyViewCreated(MainFragmentAdapter fragmentAdapter);"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void notifyDataReady(MainFragmentAdapter fragmentAdapter);"
-        errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final FragmentHost getFragmentHost() {"
-        errorLine2="                     ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        MainFragmentAdapter getMainFragmentAdapter();"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        MainFragmentRowsAdapter getMainFragmentRowsAdapter();"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void setAdapter(ObjectAdapter adapter) {"
-        errorLine2="                               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
-        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                        final Presenter.ViewHolderTask rowHolderTask) {"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public RowPresenter.ViewHolder findRowViewHolderByPosition(int position) {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public abstract T createFragment(Object row);"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public RowsFragment createFragment(Object row) {"
-        errorLine2="               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public RowsFragment createFragment(Object row) {"
-        errorLine2="                                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void registerFragment(Class&lt;?> rowClass, FragmentFactory factory) {"
-        errorLine2="                                     ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void registerFragment(Class&lt;?> rowClass, FragmentFactory factory) {"
-        errorLine2="                                                        ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Fragment createFragment(Object item) {"
-        errorLine2="               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Fragment createFragment(Object item) {"
-        errorLine2="                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
-        errorLine2="                                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
-        errorLine2="                           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final MainFragmentAdapterRegistry getMainFragmentRegistry() {"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ObjectAdapter getAdapter() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public OnItemViewSelectedListener getOnItemViewSelectedListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public RowsFragment getRowsFragment() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Fragment getMainFragment() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public HeadersFragment getHeadersFragment() {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public OnItemViewClickedListener getOnItemViewClickedListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setBrowseTransitionListener(BrowseTransitionListener listener) {"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle outState) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onCreate(Bundle savedInstanceState) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public HeadersFragment onCreateHeadersFragment() {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setHeaderPresenterSelector(PresenterSelector headerPresenterSelector) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public RowPresenter.ViewHolder getSelectedRowViewHolder() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            final Presenter.ViewHolderTask rowHolderTask) {"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected Object createEntranceTransition() {"
-        errorLine2="              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        View onFocusSearch(View focused, int direction);"
-        errorLine2="        ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        View onFocusSearch(View focused, int direction);"
-        errorLine2="                           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                Rect previouslyFocusedRect);"
-        errorLine2="                ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void onRequestChildFocus(View child, View focused);"
-        errorLine2="                                 ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void onRequestChildFocus(View child, View focused);"
-        errorLine2="                                             ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public BrowseFrameLayout(Context context) {"
-        errorLine2="                             ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public BrowseFrameLayout(Context context, AttributeSet attrs) {"
-        errorLine2="                             ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public BrowseFrameLayout(Context context, AttributeSet attrs) {"
-        errorLine2="                                              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public BrowseFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
-        errorLine2="                             ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public BrowseFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
-        errorLine2="                                              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnFocusSearchListener(OnFocusSearchListener listener) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public OnFocusSearchListener getOnFocusSearchListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnChildFocusListener(OnChildFocusListener listener) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public OnChildFocusListener getOnChildFocusListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Rect previouslyFocusedRect) {"
-        errorLine2="            ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View focusSearch(View focused, int direction) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View focusSearch(View focused, int direction) {"
-        errorLine2="                            ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void requestChildFocus(View child, View focused) {"
-        errorLine2="                                  ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void requestChildFocus(View child, View focused) {"
-        errorLine2="                                              ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
-        errorLine2="                                    ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnDispatchKeyListener(OnKeyListener listener) {"
-        errorLine2="                                         ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BrowseRowsFrameLayout(Context context) {"
         errorLine2="                                 ~~~~~~~">
         <location
@@ -2880,7 +837,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BrowseRowsFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                 ~~~~~~~">
         <location
@@ -2889,7 +846,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BrowseRowsFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                                  ~~~~~~~~~~~~">
         <location
@@ -2898,7 +855,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BrowseRowsFrameLayout(Context context, AttributeSet attrs,"
         errorLine2="                                 ~~~~~~~">
         <location
@@ -2907,7 +864,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BrowseRowsFrameLayout(Context context, AttributeSet attrs,"
         errorLine2="                                                  ~~~~~~~~~~~~">
         <location
@@ -2916,16 +873,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void measureChildWithMargins(View child,"
-        errorLine2="                                           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void notifyViewCreated(MainFragmentAdapter fragmentAdapter);"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2934,7 +882,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void notifyDataReady(MainFragmentAdapter fragmentAdapter);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2943,7 +891,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final FragmentHost getFragmentHost() {"
         errorLine2="                     ~~~~~~~~~~~~">
         <location
@@ -2952,7 +900,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        MainFragmentAdapter getMainFragmentAdapter();"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2961,7 +909,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        MainFragmentRowsAdapter getMainFragmentRowsAdapter();"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2970,7 +918,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                               ~~~~~~~~~~~~~">
         <location
@@ -2979,7 +927,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2988,7 +936,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2997,7 +945,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                                        final Presenter.ViewHolderTask rowHolderTask) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3006,7 +954,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RowPresenter.ViewHolder findRowViewHolderByPosition(int position) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3015,7 +963,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract T createFragment(Object row);"
         errorLine2="                                         ~~~~~~">
         <location
@@ -3024,7 +972,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RowsSupportFragment createFragment(Object row) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3033,7 +981,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RowsSupportFragment createFragment(Object row) {"
         errorLine2="                                                  ~~~~~~">
         <location
@@ -3042,7 +990,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void registerFragment(Class&lt;?> rowClass, FragmentFactory factory) {"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -3051,7 +999,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void registerFragment(Class&lt;?> rowClass, FragmentFactory factory) {"
         errorLine2="                                                        ~~~~~~~~~~~~~~~">
         <location
@@ -3060,7 +1008,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Fragment createFragment(Object item) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -3069,7 +1017,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Fragment createFragment(Object item) {"
         errorLine2="                                       ~~~~~~">
         <location
@@ -3078,7 +1026,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
         errorLine2="                  ~~~~~~">
         <location
@@ -3087,7 +1035,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
         errorLine2="                                    ~~~~~~">
         <location
@@ -3096,7 +1044,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Bundle createArgs(Bundle args, String title, int headersState) {"
         errorLine2="                                                 ~~~~~~">
         <location
@@ -3105,7 +1053,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
@@ -3114,7 +1062,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final MainFragmentAdapterRegistry getMainFragmentRegistry() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3123,7 +1071,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
@@ -3132,7 +1080,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3141,7 +1089,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public OnItemViewSelectedListener getOnItemViewSelectedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3150,7 +1098,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RowsSupportFragment getRowsSupportFragment() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3159,7 +1107,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Fragment getMainFragment() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -3168,7 +1116,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public HeadersSupportFragment getHeadersSupportFragment() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3177,7 +1125,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3186,7 +1134,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public OnItemViewClickedListener getOnItemViewClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3195,7 +1143,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setBrowseTransitionListener(BrowseTransitionListener listener) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3204,16 +1152,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle outState) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
@@ -3222,7 +1161,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public HeadersSupportFragment onCreateHeadersSupportFragment() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3231,7 +1170,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
@@ -3240,7 +1179,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
@@ -3249,7 +1188,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
@@ -3258,7 +1197,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
@@ -3267,7 +1206,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setHeaderPresenterSelector(PresenterSelector headerPresenterSelector) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~">
         <location
@@ -3276,7 +1215,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RowPresenter.ViewHolder getSelectedRowViewHolder() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3285,7 +1224,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            final Presenter.ViewHolderTask rowHolderTask) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3294,7 +1233,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected Object createEntranceTransition() {"
         errorLine2="              ~~~~~~">
         <location
@@ -3303,7 +1242,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
         errorLine2="                                         ~~~~~~">
         <location
@@ -3312,7 +1251,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ClassPresenterSelector addClassPresenter(Class&lt;?> cls, Presenter presenter) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3321,7 +1260,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ClassPresenterSelector addClassPresenter(Class&lt;?> cls, Presenter presenter) {"
         errorLine2="                                                    ~~~~~~~~">
         <location
@@ -3330,7 +1269,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ClassPresenterSelector addClassPresenter(Class&lt;?> cls, Presenter presenter) {"
         errorLine2="                                                                  ~~~~~~~~~">
         <location
@@ -3339,7 +1278,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ClassPresenterSelector addClassPresenterSelector(Class&lt;?> cls,"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3348,7 +1287,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ClassPresenterSelector addClassPresenterSelector(Class&lt;?> cls,"
         errorLine2="                                                            ~~~~~~~~">
         <location
@@ -3357,7 +1296,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            PresenterSelector presenterSelector) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
@@ -3366,25 +1305,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter getPresenter(Object item) {"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter getPresenter(Object item) {"
-        errorLine2="                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Presenter[] getPresenters() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
@@ -3393,7 +1314,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static ColorFilterCache getColorFilterCache(int color) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~">
         <location
@@ -3402,7 +1323,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ColorFilter getFilterForLevel(float level) {"
         errorLine2="           ~~~~~~~~~~~">
         <location
@@ -3411,7 +1332,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static ColorFilterDimmer createDefault(Context context) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
@@ -3420,7 +1341,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static ColorFilterDimmer createDefault(Context context) {"
         errorLine2="                                                  ~~~~~~~">
         <location
@@ -3429,7 +1350,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static ColorFilterDimmer create(ColorFilterCache dimmer,"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
@@ -3438,7 +1359,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static ColorFilterDimmer create(ColorFilterCache dimmer,"
         errorLine2="                                           ~~~~~~~~~~~~~~~~">
         <location
@@ -3447,7 +1368,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void applyFilterToView(View view) {"
         errorLine2="                                  ~~~~">
         <location
@@ -3456,7 +1377,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ColorFilter getColorFilter() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
@@ -3465,7 +1386,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Paint getPaint() {"
         errorLine2="           ~~~~~">
         <location
@@ -3474,7 +1395,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static ColorOverlayDimmer createDefault(Context context) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
@@ -3483,7 +1404,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static ColorOverlayDimmer createDefault(Context context) {"
         errorLine2="                                                   ~~~~~~~">
         <location
@@ -3492,7 +1413,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static ColorOverlayDimmer createColorOverlayDimmer(int dimColor, float activeLevel,"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
@@ -3501,7 +1422,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Paint getPaint() {"
         errorLine2="           ~~~~~">
         <location
@@ -3510,7 +1431,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void drawColorOverlay(Canvas c, View v, boolean includePadding) {"
         errorLine2="                                 ~~~~~~">
         <location
@@ -3519,7 +1440,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void drawColorOverlay(Canvas c, View v, boolean includePadding) {"
         errorLine2="                                           ~~~~">
         <location
@@ -3528,79 +1449,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ConstantState getConstantState() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable mutate() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addChildDrawable(Drawable drawable) {"
-        errorLine2="                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setChildDrawableAt(int index, Drawable drawable) {"
-        errorLine2="                                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getDrawable(int index) {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ChildDrawable getChildAt(int index) {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void removeDrawable(Drawable drawable) {"
-        errorLine2="                               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void draw(Canvas canvas) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onBoundsChange(Rect bounds) {"
         errorLine2="                                  ~~~~">
         <location
@@ -3609,97 +1458,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setColorFilter(ColorFilter colorFilter) {"
-        errorLine2="                               ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void invalidateDrawable(Drawable who) {"
-        errorLine2="                                   ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
-        errorLine2="                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void scheduleDrawable(Drawable who, Runnable what, long when) {"
-        errorLine2="                                               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void unscheduleDrawable(Drawable who, Runnable what) {"
-        errorLine2="                                   ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void unscheduleDrawable(Drawable who, Runnable what) {"
-        errorLine2="                                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ChildDrawable(Drawable drawable, CompositeDrawable parent) {"
-        errorLine2="                             ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ChildDrawable(Drawable drawable, CompositeDrawable parent) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public BoundsRule getBoundsRule() {"
-        errorLine2="               ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Drawable getDrawable() {"
-        errorLine2="               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onChildFocusedListener(View child, View focused);"
         errorLine2="                                           ~~~~">
         <location
@@ -3708,7 +1467,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onChildFocusedListener(View child, View focused);"
         errorLine2="                                                       ~~~~">
         <location
@@ -3717,7 +1476,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Presenter getPrimaryPresenter() {"
         errorLine2="           ~~~~~~~~~">
         <location
@@ -3726,7 +1485,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Presenter getSecondaryPresenter() {"
         errorLine2="           ~~~~~~~~~">
         <location
@@ -3735,25 +1494,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter getPresenter(Object item) {"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter getPresenter(Object item) {"
-        errorLine2="                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Presenter[] getPresenters() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
@@ -3762,7 +1503,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected abstract void bindColumns(Cursor cursor);"
         errorLine2="                                        ~~~~~~">
         <location
@@ -3771,7 +1512,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected abstract Object bind(Cursor cursor);"
         errorLine2="                       ~~~~~~">
         <location
@@ -3780,7 +1521,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected abstract Object bind(Cursor cursor);"
         errorLine2="                                   ~~~~~~">
         <location
@@ -3789,7 +1530,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Object convert(Cursor cursor) {"
         errorLine2="           ~~~~~~">
         <location
@@ -3798,7 +1539,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Object convert(Cursor cursor) {"
         errorLine2="                          ~~~~~~">
         <location
@@ -3807,7 +1548,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CursorObjectAdapter(PresenterSelector presenterSelector) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~">
         <location
@@ -3816,7 +1557,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CursorObjectAdapter(Presenter presenter) {"
         errorLine2="                               ~~~~~~~~~">
         <location
@@ -3825,7 +1566,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void changeCursor(Cursor cursor) {"
         errorLine2="                             ~~~~~~">
         <location
@@ -3834,7 +1575,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Cursor swapCursor(Cursor cursor) {"
         errorLine2="           ~~~~~~">
         <location
@@ -3843,7 +1584,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Cursor swapCursor(Cursor cursor) {"
         errorLine2="                             ~~~~~~">
         <location
@@ -3852,7 +1593,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="     public final Cursor getCursor() {"
         errorLine2="                  ~~~~~~">
         <location
@@ -3861,7 +1602,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setMapper(CursorMapper mapper) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
@@ -3870,7 +1611,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final CursorMapper getMapper() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
@@ -3879,16 +1620,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Object get(int index) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public DatePicker(Context context, AttributeSet attrs) {"
         errorLine2="                      ~~~~~~~">
         <location
@@ -3897,7 +1629,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public DatePicker(Context context, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
@@ -3906,7 +1638,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public DatePicker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                      ~~~~~~~">
         <location
@@ -3915,7 +1647,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public DatePicker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
@@ -3924,7 +1656,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setDatePickerFormat(String datePickerFormat) {"
         errorLine2="                                    ~~~~~~">
         <location
@@ -3933,7 +1665,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public String getDatePickerFormat() {"
         errorLine2="           ~~~~~~">
         <location
@@ -3942,808 +1674,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
-        errorLine2="                           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ObjectAdapter getAdapter() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public BaseOnItemViewClickedListener getOnItemViewClickedListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onCreate(Bundle savedInstanceState) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="              ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                                         ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                   Bundle savedInstanceState) {"
-        errorLine2="                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void setupPresenter(Presenter rowPresenter) {"
-        errorLine2="                                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void setupDetailsOverviewRowPresenter(FullWidthDetailsOverviewRowPresenter presenter) {"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public RowsFragment getRowsFragment() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
-        errorLine2="                                  ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
-        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onSetDetailsOverviewRowStatus(FullWidthDetailsOverviewRowPresenter presenter,"
-        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            FullWidthDetailsOverviewRowPresenter.ViewHolder viewHolder, int adapterPosition,"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected Object createEntranceTransition() {"
-        errorLine2="              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public DetailsParallax getParallax() {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public DetailsFragmentBackgroundController(DetailsFragment fragment) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final PlaybackGlue getPlaybackGlue() {"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final Drawable getCoverDrawable() {"
-        errorLine2="                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final Drawable getBottomDrawable() {"
-        errorLine2="                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Fragment onCreateVideoFragment() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlaybackGlueHost onCreateGlueHost() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final Fragment findOrCreateVideoFragment() {"
-        errorLine2="                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setCoverBitmap(Bitmap bitmap) {"
-        errorLine2="                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final Bitmap getCoverBitmap() {"
-        errorLine2="                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        protected FullWidthDetailsOverviewRowPresenter mParentPresenter;"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        protected FullWidthDetailsOverviewRowPresenter.ViewHolder mParentViewHolder;"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(View view) {"
-        errorLine2="                          ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public FullWidthDetailsOverviewRowPresenter getParentPresenter() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public FullWidthDetailsOverviewRowPresenter.ViewHolder getParentViewHolder() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(ViewGroup parent) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(ViewGroup parent) {"
-        errorLine2="                             ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="                                                   ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setContext(ViewHolder viewHolder,"
-        errorLine2="                           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            FullWidthDetailsOverviewRowPresenter.ViewHolder parentViewHolder,"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            FullWidthDetailsOverviewRowPresenter parentPresenter) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean isBoundToImage(ViewHolder viewHolder, DetailsOverviewRow row) {"
-        errorLine2="                                  ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean isBoundToImage(ViewHolder viewHolder, DetailsOverviewRow row) {"
-        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onImageDrawableChanged(DetailsOverviewRow row) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onItemChanged(DetailsOverviewRow row) {"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onActionsAdapterChanged(DetailsOverviewRow row) {"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public DetailsOverviewRow(Object item) {"
-        errorLine2="                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final Object getItem() {"
-        errorLine2="                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setItem(Object item) {"
-        errorLine2="                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setImageDrawable(Drawable drawable) {"
-        errorLine2="                                       ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setImageBitmap(Context context, Bitmap bm) {"
-        errorLine2="                                     ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setImageBitmap(Context context, Bitmap bm) {"
-        errorLine2="                                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final Drawable getImageDrawable() {"
-        errorLine2="                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void addAction(Action action) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void addAction(int pos, Action action) {"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final boolean removeAction(Action action) {"
-        errorLine2="                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final List&lt;Action> getActions() {"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final ObjectAdapter getActionsAdapter() {"
-        errorLine2="                 ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setActionsAdapter(ObjectAdapter adapter) {"
-        errorLine2="                                        ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Action getActionForKeyCode(int keyCode) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(View rootView, Presenter detailsPresenter) {"
-        errorLine2="                          ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(View rootView, Presenter detailsPresenter) {"
-        errorLine2="                                         ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public DetailsOverviewRowPresenter(Presenter detailsPresenter) {"
-        errorLine2="                                       ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnActionClickedListener(OnActionClickedListener listener) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public OnActionClickedListener getOnActionClickedListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setSharedElementEnterTransition(Activity activity,"
-        errorLine2="                                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            String sharedElementName, long timeoutMs) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setSharedElementEnterTransition(Activity activity,"
-        errorLine2="                                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            String sharedElementName) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewSelected(RowPresenter.ViewHolder vh, boolean selected) {"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
-        errorLine2="                                                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
-        errorLine2="                                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onSelectLevelChanged(RowPresenter.ViewHolder holder) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Parallax.IntProperty getOverviewRowTop() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -4752,7 +1683,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Parallax.IntProperty getOverviewRowBottom() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -4761,124 +1692,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
-        errorLine2="                                   ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                   Drawable coverDrawable,"
-        errorLine2="                                   ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                   ParallaxTarget coverDrawableParallaxTarget) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
-        errorLine2="                                   ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                   Drawable coverDrawable, Drawable bottomDrawable,"
-        errorLine2="                                   ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                   Drawable coverDrawable, Drawable bottomDrawable,"
-        errorLine2="                                                           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                   ParallaxTarget coverDrawableParallaxTarget) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax) {"
-        errorLine2="                                   ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public DetailsParallaxDrawable(Context context, DetailsParallax parallax) {"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getCoverDrawable() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getBottomDrawable() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
@@ -4887,7 +1701,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
@@ -4896,7 +1710,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -4905,7 +1719,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -4914,7 +1728,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BaseOnItemViewClickedListener getOnItemViewClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -4923,7 +1737,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
@@ -4932,7 +1746,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
@@ -4941,7 +1755,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
@@ -4950,7 +1764,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
@@ -4959,7 +1773,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
@@ -4968,79 +1782,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="              ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                                         ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
-        errorLine2="                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                   Bundle savedInstanceState) {"
-        errorLine2="                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void setupPresenter(Presenter rowPresenter) {"
         errorLine2="                                  ~~~~~~~~~">
         <location
@@ -5049,7 +1791,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void setupDetailsOverviewRowPresenter(FullWidthDetailsOverviewRowPresenter presenter) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5058,7 +1800,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RowsSupportFragment getRowsSupportFragment() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5067,7 +1809,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
@@ -5076,7 +1818,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5085,7 +1827,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onSetDetailsOverviewRowStatus(FullWidthDetailsOverviewRowPresenter presenter,"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5094,7 +1836,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            FullWidthDetailsOverviewRowPresenter.ViewHolder viewHolder, int adapterPosition,"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5103,7 +1845,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected Object createEntranceTransition() {"
         errorLine2="              ~~~~~~">
         <location
@@ -5112,7 +1854,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
         errorLine2="                                         ~~~~~~">
         <location
@@ -5121,7 +1863,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public DetailsParallax getParallax() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
@@ -5130,7 +1872,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public DetailsSupportFragmentBackgroundController(DetailsSupportFragment fragment) {"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5139,7 +1881,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final PlaybackGlue getPlaybackGlue() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
@@ -5148,7 +1890,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Drawable getCoverDrawable() {"
         errorLine2="                 ~~~~~~~~">
         <location
@@ -5157,7 +1899,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Drawable getBottomDrawable() {"
         errorLine2="                 ~~~~~~~~">
         <location
@@ -5166,7 +1908,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Fragment onCreateVideoSupportFragment() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -5175,7 +1917,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackGlueHost onCreateGlueHost() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
@@ -5184,7 +1926,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Fragment findOrCreateVideoSupportFragment() {"
         errorLine2="                 ~~~~~~~~">
         <location
@@ -5193,7 +1935,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setCoverBitmap(Bitmap bitmap) {"
         errorLine2="                                     ~~~~~~">
         <location
@@ -5202,7 +1944,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Bitmap getCoverBitmap() {"
         errorLine2="                 ~~~~~~">
         <location
@@ -5211,313 +1953,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Object getChangePayload(@NonNull Value oldItem, @NonNull Value newItem) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DiffCallback.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="                                                   ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setBackgroundDrawable(Drawable drawable) {"
-        errorLine2="                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getBackgroundDrawable() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setImageDrawable(Drawable drawable) {"
-        errorLine2="                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getImageDrawable() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setMessage(CharSequence message) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getMessage() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setButtonText(String text) {"
-        errorLine2="                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public String getButtonText() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setButtonClickListener(View.OnClickListener clickListener) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View.OnClickListener getButtonClickListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setBackgroundDrawable(Drawable drawable) {"
-        errorLine2="                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getBackgroundDrawable() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setImageDrawable(Drawable drawable) {"
-        errorLine2="                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getImageDrawable() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setMessage(CharSequence message) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getMessage() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setButtonText(String text) {"
-        errorLine2="                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public String getButtonText() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setButtonClickListener(View.OnClickListener clickListener) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View.OnClickListener getButtonClickListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public FadeAndShortSlide(Context context, AttributeSet attrs) {"
         errorLine2="                             ~~~~~~~">
         <location
@@ -5526,7 +1962,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public FadeAndShortSlide(Context context, AttributeSet attrs) {"
         errorLine2="                                              ~~~~~~~~~~~~">
         <location
@@ -5535,160 +1971,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setEpicenterCallback(EpicenterCallback epicenterCallback) {"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void captureStartValues(TransitionValues transitionValues) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void captureEndValues(TransitionValues transitionValues) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
-        errorLine2="                             ~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
-        errorLine2="                                                  ~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
-        errorLine2="                                                             ~~~~~~~~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            TransitionValues endValues) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
-        errorLine2="                                ~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
-        errorLine2="                                                     ~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
-        errorLine2="                                                                ~~~~~~~~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            TransitionValues endValues) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Transition addListener(TransitionListener listener) {"
-        errorLine2="           ~~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Transition addListener(TransitionListener listener) {"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Transition removeListener(TransitionListener listener) {"
-        errorLine2="           ~~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Transition removeListener(TransitionListener listener) {"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Transition clone() {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -5697,7 +1980,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ConstantState getConstantState() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
@@ -5706,7 +1989,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable mutate() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -5715,7 +1998,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setBitmap(Bitmap bitmap) {"
         errorLine2="                          ~~~~~~">
         <location
@@ -5724,7 +2007,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Bitmap getBitmap() {"
         errorLine2="           ~~~~~~">
         <location
@@ -5733,7 +2016,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSource(Rect source) {"
         errorLine2="                          ~~~~">
         <location
@@ -5742,7 +2025,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Rect getSource() {"
         errorLine2="           ~~~~">
         <location
@@ -5751,7 +2034,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void draw(Canvas canvas) {"
         errorLine2="                     ~~~~~~">
         <location
@@ -5760,7 +2043,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setColorFilter(ColorFilter colorFilter) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
@@ -5769,7 +2052,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void setupBrowseItemFocusHighlight(ItemBridgeAdapter adapter, int zoomIndex,"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~">
         <location
@@ -5778,25 +2061,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setupHeaderItemFocusHighlight(VerticalGridView gridView) {"
-        errorLine2="                                                     ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setupHeaderItemFocusHighlight(VerticalGridView gridView,"
-        errorLine2="                                                     ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void setupHeaderItemFocusHighlight(ItemBridgeAdapter adapter) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~">
         <location
@@ -5805,7 +2070,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void setupHeaderItemFocusHighlight(ItemBridgeAdapter adapter,"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~">
         <location
@@ -5814,7 +2079,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onBindLogo(ViewHolder vh) {"
         errorLine2="                               ~~~~~~~~~~">
         <location
@@ -5823,7 +2088,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        protected DetailsOverviewRow.Listener createRowListener() {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5832,34 +2097,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            public void onImageDrawableChanged(DetailsOverviewRow row) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            public void onItemChanged(DetailsOverviewRow row) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            public void onActionsAdapterChanged(DetailsOverviewRow row) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ViewHolder(View rootView, Presenter detailsPresenter,"
         errorLine2="                          ~~~~">
         <location
@@ -5868,7 +2106,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ViewHolder(View rootView, Presenter detailsPresenter,"
         errorLine2="                                         ~~~~~~~~~">
         <location
@@ -5877,7 +2115,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                DetailsOverviewLogoPresenter logoPresenter) {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5886,7 +2124,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final ViewGroup getOverviewView() {"
         errorLine2="                     ~~~~~~~~~">
         <location
@@ -5895,7 +2133,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final DetailsOverviewLogoPresenter.ViewHolder getLogoViewHolder() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5904,7 +2142,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final Presenter.ViewHolder getDetailsDescriptionViewHolder() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5913,7 +2151,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final ViewGroup getDetailsDescriptionFrame() {"
         errorLine2="                     ~~~~~~~~~">
         <location
@@ -5922,7 +2160,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final ViewGroup getActionsRow() {"
         errorLine2="                     ~~~~~~~~~">
         <location
@@ -5931,7 +2169,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public FullWidthDetailsOverviewRowPresenter(Presenter detailsPresenter) {"
         errorLine2="                                                ~~~~~~~~~">
         <location
@@ -5940,7 +2178,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public FullWidthDetailsOverviewRowPresenter(Presenter detailsPresenter,"
         errorLine2="                                                ~~~~~~~~~">
         <location
@@ -5949,7 +2187,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            DetailsOverviewLogoPresenter logoPresenter) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5958,7 +2196,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnActionClickedListener(OnActionClickedListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5967,7 +2205,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public OnActionClickedListener getOnActionClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5976,7 +2214,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setListener(Listener listener) {"
         errorLine2="                                  ~~~~~~~~">
         <location
@@ -5985,7 +2223,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -5994,7 +2232,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
@@ -6003,34 +2241,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
-        errorLine2="                                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onSelectLevelChanged(RowPresenter.ViewHolder holder) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6039,25 +2250,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void notifyOnBindLogo(ViewHolder viewHolder) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
@@ -6066,7 +2259,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onLayoutLogo(ViewHolder viewHolder, int oldState, boolean logoChanged) {"
         errorLine2="                                ~~~~~~~~~~">
         <location
@@ -6075,7 +2268,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onLayoutOverviewFrame(ViewHolder viewHolder, int oldState, boolean logoChanged) {"
         errorLine2="                                         ~~~~~~~~~~">
         <location
@@ -6084,7 +2277,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setState(ViewHolder viewHolder, int state) {"
         errorLine2="                               ~~~~~~~~~~">
         <location
@@ -6093,7 +2286,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onStateChanged(ViewHolder viewHolder, int oldState) {"
         errorLine2="                                  ~~~~~~~~~~">
         <location
@@ -6102,16 +2295,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setEntranceTransitionState(RowPresenter.ViewHolder holder,"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSharedElementEnterTransition(Activity activity, String sharedElementName) {"
         errorLine2="                                                ~~~~~~~~">
         <location
@@ -6120,7 +2304,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSharedElementEnterTransition(Activity activity, String sharedElementName) {"
         errorLine2="                                                                   ~~~~~~">
         <location
@@ -6129,7 +2313,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSharedElementEnterTransition(Activity activity, String sharedElementName,"
         errorLine2="                                                ~~~~~~~~">
         <location
@@ -6138,7 +2322,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSharedElementEnterTransition(Activity activity, String sharedElementName,"
         errorLine2="                                                                   ~~~~~~">
         <location
@@ -6147,7 +2331,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onBindLogo(ViewHolder vh) {"
         errorLine2="                           ~~~~~~~~~~">
         <location
@@ -6156,367 +2340,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
-        errorLine2="                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
-        errorLine2="                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
-        errorLine2="                                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
-        errorLine2="                                                                             ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public String getTitle() {"
-        errorLine2="               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public String getDescription() {"
-        errorLine2="               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public String getBreadcrumb() {"
-        errorLine2="               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Drawable getIconDrawable() {"
-        errorLine2="               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView("
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            final LayoutInflater inflater, ViewGroup container, Guidance guidance) {"
-        errorLine2="                  ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            final LayoutInflater inflater, ViewGroup container, Guidance guidance) {"
-        errorLine2="                                           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            final LayoutInflater inflater, ViewGroup container, Guidance guidance) {"
-        errorLine2="                                                                ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public TextView getTitleView() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public TextView getDescriptionView() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public TextView getBreadcrumbView() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ImageView getIconView() {"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public BuilderBase(Context context) {"
-        errorLine2="                           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Context getContext() {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        protected final void applyValues(GuidedAction action) {"
-        errorLine2="                                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public B title(CharSequence title) {"
-        errorLine2="                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public B editTitle(CharSequence editTitle) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public B description(CharSequence description) {"
-        errorLine2="                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public B editDescription(CharSequence description) {"
-        errorLine2="                                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public B intent(Intent intent) {"
-        errorLine2="                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public B icon(Drawable icon) {"
-        errorLine2="                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public B iconResourceId(@DrawableRes int iconResourceId, Context context) {"
-        errorLine2="                                                                 ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public B subActions(List&lt;GuidedAction> subActions) {"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public B autofillHints(String... hints) {"
-        errorLine2="                               ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Builder(Context context) {"
-        errorLine2="                       ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public GuidedAction build() {"
-        errorLine2="               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getTitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTitle(CharSequence title) {"
-        errorLine2="                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getEditTitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setEditTitle(CharSequence editTitle) {"
-        errorLine2="                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getEditDescription() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setEditDescription(CharSequence editDescription) {"
-        errorLine2="                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getDescription() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setDescription(CharSequence description) {"
-        errorLine2="                               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Intent getIntent() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setIntent(Intent intent) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public String[] getAutofillHints() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -6525,61 +2349,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSubActions(List&lt;GuidedAction> actions) {"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public List&lt;GuidedAction> getSubActions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle bundle, String key) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle bundle, String key) {"
-        errorLine2="                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onRestoreInstanceState(Bundle bundle, String key) {"
-        errorLine2="                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onRestoreInstanceState(Bundle bundle, String key) {"
-        errorLine2="                                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void onGuidedActionClicked(GuidedAction action);"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
@@ -6588,34 +2358,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void onGuidedActionFocused(GuidedAction action);"
-        errorLine2="                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void onGuidedActionEditCanceled(GuidedAction action);"
-        errorLine2="                                        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        long onGuidedActionEditedAndProceed(GuidedAction action);"
-        errorLine2="                                            ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GuidedActionAdapter(List&lt;GuidedAction> actions, ClickListener clickListener,"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~">
         <location
@@ -6624,7 +2367,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GuidedActionAdapter(List&lt;GuidedAction> actions, ClickListener clickListener,"
         errorLine2="                                                           ~~~~~~~~~~~~~">
         <location
@@ -6633,7 +2376,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            FocusListener focusListener, GuidedActionsStylist presenter, boolean isSubAdapter) {"
         errorLine2="            ~~~~~~~~~~~~~">
         <location
@@ -6642,7 +2385,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            FocusListener focusListener, GuidedActionsStylist presenter, boolean isSubAdapter) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6651,7 +2394,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setDiffCallback(DiffCallback&lt;GuidedAction> diffCallback) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6660,7 +2403,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setActions(final List&lt;GuidedAction> actions) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
         <location
@@ -6669,7 +2412,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GuidedAction getItem(int position) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -6678,7 +2421,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int indexOf(GuidedAction action) {"
         errorLine2="                       ~~~~~~~~~~~~">
         <location
@@ -6687,7 +2430,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GuidedActionsStylist getGuidedActionsStylist() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6696,7 +2439,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setClickListener(ClickListener clickListener) {"
         errorLine2="                                 ~~~~~~~~~~~~~">
         <location
@@ -6705,7 +2448,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setFocusListener(FocusListener focusListener) {"
         errorLine2="                                 ~~~~~~~~~~~~~">
         <location
@@ -6714,7 +2457,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public List&lt;GuidedAction> getActions() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
@@ -6723,7 +2466,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -6732,7 +2475,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
@@ -6741,7 +2484,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onBindViewHolder(ViewHolder holder, int position) {"
         errorLine2="                                 ~~~~~~~~~~">
         <location
@@ -6750,7 +2493,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GuidedActionsStylist.ViewHolder findSubChildViewHolder(View v) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6759,7 +2502,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GuidedActionsStylist.ViewHolder findSubChildViewHolder(View v) {"
         errorLine2="                                                                  ~~~~">
         <location
@@ -6768,7 +2511,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void handleCheckedActions(GuidedActionsStylist.ViewHolder avh) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6777,7 +2520,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void performOnActionClick(GuidedActionsStylist.ViewHolder avh) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -6786,115 +2529,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addAdpter(GuidedActionAdapter adapter1, GuidedActionAdapter adapter2) {"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addAdpter(GuidedActionAdapter adapter1, GuidedActionAdapter adapter2) {"
-        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedActionAdapter getNextAdapter(GuidedActionAdapter adapter) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedActionAdapter getNextAdapter(GuidedActionAdapter adapter) {"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setEditListener(EditListener listener) {"
-        errorLine2="                                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void openIme(GuidedActionAdapter adapter, GuidedActionsStylist.ViewHolder avh) {"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void openIme(GuidedActionAdapter adapter, GuidedActionsStylist.ViewHolder avh) {"
-        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void closeIme(View v) {"
-        errorLine2="                         ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void fillAndStay(GuidedActionAdapter adapter, TextView v) {"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void fillAndStay(GuidedActionAdapter adapter, TextView v) {"
-        errorLine2="                                                         ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void fillAndGoNext(GuidedActionAdapter adapter, TextView v) {"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void fillAndGoNext(GuidedActionAdapter adapter, TextView v) {"
-        errorLine2="                                                           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void onAutofill(View view);"
         errorLine2="                        ~~~~">
         <location
@@ -6903,7 +2538,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setOnAutofillListener(OnAutofillListener listener);"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~">
         <location
@@ -6912,16 +2547,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static GuidedActionDiffCallback getInstance() {"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionDiffCallback.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GuidedActionEditText(Context ctx) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -6930,7 +2556,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GuidedActionEditText(Context ctx, AttributeSet attrs) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -6939,7 +2565,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GuidedActionEditText(Context ctx, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
@@ -6948,7 +2574,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GuidedActionEditText(Context ctx, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -6957,7 +2583,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GuidedActionEditText(Context ctx, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
@@ -6966,7 +2592,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setImeKeyListener(ImeKeyListener listener) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
@@ -6975,25 +2601,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKeyPreIme(int keyCode, KeyEvent event) {"
-        errorLine2="                                            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {"
         errorLine2="                                                                  ~~~~">
         <location
@@ -7002,7 +2610,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnAutofillListener(OnAutofillListener autofillListener) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~">
         <location
@@ -7011,1519 +2619,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void autofill(AutofillValue values) {"
-        errorLine2="                         ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {"
-        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(View v) {"
-        errorLine2="                          ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(View v, boolean isSubAction) {"
-        errorLine2="                          ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public View getContentView() {"
-        errorLine2="               ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public TextView getTitleView() {"
-        errorLine2="               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public EditText getEditableTitleView() {"
-        errorLine2="               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public TextView getDescriptionView() {"
-        errorLine2="               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public EditText getEditableDescriptionView() {"
-        errorLine2="               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ImageView getIconView() {"
-        errorLine2="               ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ImageView getCheckmarkView() {"
-        errorLine2="               ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ImageView getChevronView() {"
-        errorLine2="               ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public View getEditingView() {"
-        errorLine2="               ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public GuidedAction getAction() {"
-        errorLine2="               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Object getFacet(Class&lt;?> facetClass) {"
-        errorLine2="               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Object getFacet(Class&lt;?> facetClass) {"
-        errorLine2="                               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container) {"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container) {"
-        errorLine2="                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public VerticalGridView getActionsGridView() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public VerticalGridView getSubActionsGridView() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int getItemViewType(GuidedAction action) {"
-        errorLine2="                               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="                                         ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
-        errorLine2="           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
-        errorLine2="                                         ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                 ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void openInEditMode(GuidedAction action) {"
-        errorLine2="                               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void setupImeOptions(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                   ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void setupImeOptions(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                                  ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setEditingMode(ViewHolder vh, GuidedAction action, boolean editing) {"
-        errorLine2="                               ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setEditingMode(ViewHolder vh, GuidedAction action, boolean editing) {"
-        errorLine2="                                              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onEditingModeChange(ViewHolder vh, GuidedAction action, boolean editing) {"
-        errorLine2="                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onEditingModeChange(ViewHolder vh, GuidedAction action, boolean editing) {"
-        errorLine2="                                                      ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onEditingModeChange(ViewHolder vh, boolean editing, boolean withTransition) {"
-        errorLine2="                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onAnimateItemFocused(ViewHolder vh, boolean focused) {"
-        errorLine2="                                     ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onAnimateItemPressed(ViewHolder vh, boolean pressed) {"
-        errorLine2="                                     ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onAnimateItemPressedCancelled(ViewHolder vh) {"
-        errorLine2="                                              ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onAnimateItemChecked(ViewHolder vh, boolean checked) {"
-        errorLine2="                                     ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindCheckMarkView(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                    ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindCheckMarkView(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindActivatorView(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                    ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindActivatorView(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onUpdateActivatorView(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                         ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onUpdateActivatorView(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                                        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setEditListener(EditListener listener) {"
-        errorLine2="                                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindChevronView(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                  ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindChevronView(ViewHolder vh, GuidedAction action) {"
-        errorLine2="                                                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setExpandedViewHolder(ViewHolder avh) {"
-        errorLine2="                                      ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void startExpandedTransition(ViewHolder avh) {"
-        errorLine2="                                        ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void expandAction(GuidedAction action, final boolean withTransition) {"
-        errorLine2="                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedAction getExpandedAction() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onUpdateExpandedViewHolder(ViewHolder avh) {"
-        errorLine2="                                           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public BuilderBase(Context context) {"
-        errorLine2="                           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public B datePickerFormat(String format) {"
-        errorLine2="                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        protected final void applyDatePickerValues(GuidedDatePickerAction action) {"
-        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Builder(Context context) {"
-        errorLine2="                       ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public GuidedDatePickerAction build() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public String getDatePickerFormat() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle bundle, String key) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle bundle, String key) {"
-        errorLine2="                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onRestoreInstanceState(Bundle bundle, String key) {"
-        errorLine2="                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onRestoreInstanceState(Bundle bundle, String key) {"
-        errorLine2="                                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="               ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                 ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                Bundle savedInstanceState) {"
-        errorLine2="                ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidanceStylist onCreateGuidanceStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedActionsStylist onCreateActionsStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedActionsStylist onCreateButtonActionsStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public @NonNull Guidance onCreateGuidance(Bundle savedInstanceState) {"
-        errorLine2="                                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onCreateActions(@NonNull List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
-        errorLine2="                                                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onGuidedActionClicked(GuidedAction action) {"
-        errorLine2="                                      ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onSubGuidedActionClicked(GuidedAction action) {"
-        errorLine2="                                            ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void expandSubActions(GuidedAction action) {"
-        errorLine2="                                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void expandAction(GuidedAction action, boolean withTransition) {"
-        errorLine2="                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onGuidedActionFocused(GuidedAction action) {"
-        errorLine2="                                      ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onGuidedActionEdited(GuidedAction action) {"
-        errorLine2="                                     ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onGuidedActionEditCanceled(GuidedAction action) {"
-        errorLine2="                                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public long onGuidedActionEditedAndProceed(GuidedAction action) {"
-        errorLine2="                                               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment) {"
-        errorLine2="                          ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment) {"
-        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment, int id) {"
-        errorLine2="                          ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment, int id) {"
-        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepFragment"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepFragment"
-        errorLine2="                                                                        ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int addAsRoot(Activity activity, GuidedStepFragment fragment, int id) {"
-        errorLine2="                                ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int addAsRoot(Activity activity, GuidedStepFragment fragment, int id) {"
-        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static GuidedStepFragment getCurrentGuidedStepFragment(FragmentManager fm) {"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static GuidedStepFragment getCurrentGuidedStepFragment(FragmentManager fm) {"
-        errorLine2="                                                                  ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidanceStylist getGuidanceStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedActionsStylist getGuidedActionsStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public List&lt;GuidedAction> getButtonActions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedAction findButtonActionById(long id) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedActionsStylist getGuidedButtonActionsStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setButtonActions(List&lt;GuidedAction> actions) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View getButtonActionItemView(int position) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public List&lt;GuidedAction> getActions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedAction findActionById(long id) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setActions(List&lt;GuidedAction> actions) {"
-        errorLine2="                           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setActionsDiffCallback(DiffCallback&lt;GuidedAction> diffCallback) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View getActionItemView(int position) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                       ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                                ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onCreate(Bundle savedInstanceState) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle outState) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void popBackStackToGuidedStepFragment(Class&lt;?> guidedStepFragmentClass,"
-        errorLine2="                                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void openInEditMode(GuidedAction action) {"
-        errorLine2="                               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="               ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                 ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                Bundle savedInstanceState) {"
-        errorLine2="                ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidanceStylist onCreateGuidanceStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedActionsStylist onCreateActionsStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedActionsStylist onCreateButtonActionsStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public @NonNull Guidance onCreateGuidance(Bundle savedInstanceState) {"
-        errorLine2="                                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onCreateActions(@NonNull List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
-        errorLine2="                                                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onGuidedActionClicked(GuidedAction action) {"
-        errorLine2="                                      ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onSubGuidedActionClicked(GuidedAction action) {"
-        errorLine2="                                            ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void expandSubActions(GuidedAction action) {"
-        errorLine2="                                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void expandAction(GuidedAction action, boolean withTransition) {"
-        errorLine2="                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onGuidedActionFocused(GuidedAction action) {"
-        errorLine2="                                      ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onGuidedActionEdited(GuidedAction action) {"
-        errorLine2="                                     ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onGuidedActionEditCanceled(GuidedAction action) {"
-        errorLine2="                                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public long onGuidedActionEditedAndProceed(GuidedAction action) {"
-        errorLine2="                                               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment) {"
-        errorLine2="                          ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment) {"
-        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment, int id) {"
-        errorLine2="                          ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment, int id) {"
-        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepSupportFragment"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepSupportFragment"
-        errorLine2="                                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int addAsRoot(FragmentActivity activity, GuidedStepSupportFragment fragment, int id) {"
-        errorLine2="                                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static int addAsRoot(FragmentActivity activity, GuidedStepSupportFragment fragment, int id) {"
-        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static GuidedStepSupportFragment getCurrentGuidedStepSupportFragment(FragmentManager fm) {"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static GuidedStepSupportFragment getCurrentGuidedStepSupportFragment(FragmentManager fm) {"
-        errorLine2="                                                                                ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidanceStylist getGuidanceStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedActionsStylist getGuidedActionsStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public List&lt;GuidedAction> getButtonActions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedAction findButtonActionById(long id) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedActionsStylist getGuidedButtonActionsStylist() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setButtonActions(List&lt;GuidedAction> actions) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View getButtonActionItemView(int position) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public List&lt;GuidedAction> getActions() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public GuidedAction findActionById(long id) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setActions(List&lt;GuidedAction> actions) {"
-        errorLine2="                           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setActionsDiffCallback(DiffCallback&lt;GuidedAction> diffCallback) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View getActionItemView(int position) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                       ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                                ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onCreate(Bundle savedInstanceState) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle outState) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void popBackStackToGuidedStepSupportFragment(Class&lt;?> guidedStepFragmentClass,"
-        errorLine2="                                                        ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void openInEditMode(GuidedAction action) {"
-        errorLine2="                               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public HeaderItem(long id, String name) {"
         errorLine2="                               ~~~~~~">
         <location
@@ -8532,7 +2628,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public HeaderItem(String name) {"
         errorLine2="                      ~~~~~~">
         <location
@@ -8541,7 +2637,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final String getName() {"
         errorLine2="                 ~~~~~~">
         <location
@@ -8550,7 +2646,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getContentDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -8559,7 +2655,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setContentDescription(CharSequence contentDescription) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
@@ -8568,7 +2664,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setDescription(CharSequence description) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
@@ -8577,7 +2673,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -8586,61 +2682,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
-        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
-        errorLine2="                                                                       ~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
-        errorLine2="                                                                        ~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnHeaderClickedListener(OnHeaderClickedListener listener) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnHeaderViewSelectedListener(OnHeaderViewSelectedListener listener) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8649,7 +2691,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                                                                       ~~~">
         <location
@@ -8658,7 +2700,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8667,7 +2709,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
         errorLine2="                                                                        ~~~">
         <location
@@ -8676,7 +2718,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnHeaderClickedListener(OnHeaderClickedListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8685,7 +2727,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnHeaderViewSelectedListener(OnHeaderViewSelectedListener listener) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -8694,7 +2736,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void insertView(View view) {"
         errorLine2="                              ~~~~">
         <location
@@ -8703,7 +2745,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onViewSelected(View view) {"
         errorLine2="                                  ~~~~">
         <location
@@ -8712,7 +2754,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void select(HorizontalGridView gridView, View childView, Object object) {"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~">
         <location
@@ -8721,7 +2763,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void select(HorizontalGridView gridView, View childView, Object object) {"
         errorLine2="                                                    ~~~~">
         <location
@@ -8730,7 +2772,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void select(HorizontalGridView gridView, View childView, Object object) {"
         errorLine2="                                                                    ~~~~~~">
         <location
@@ -8739,178 +2781,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ImageCardView(Context context, int themeResId) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ImageCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ImageCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
-        errorLine2="                                          ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ImageCardView(Context context) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ImageCardView(Context context, AttributeSet attrs) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ImageCardView(Context context, AttributeSet attrs) {"
-        errorLine2="                                          ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final ImageView getMainImageView() {"
-        errorLine2="                 ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setMainImageScaleType(ScaleType scaleType) {"
-        errorLine2="                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setMainImage(Drawable drawable) {"
-        errorLine2="                             ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setMainImage(Drawable drawable, boolean fade) {"
-        errorLine2="                             ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getMainImage() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getInfoAreaBackground() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setInfoAreaBackground(Drawable drawable) {"
-        errorLine2="                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTitleText(CharSequence text) {"
-        errorLine2="                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getTitleText() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setContentText(CharSequence text) {"
-        errorLine2="                               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getContentText() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setBadgeImage(Drawable drawable) {"
-        errorLine2="                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getBadgeImage() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract boolean onKeyPreIme(EditText editText, int keyCode, KeyEvent event);"
         errorLine2="                                            ~~~~~~~~">
         <location
@@ -8919,7 +2790,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract boolean onKeyPreIme(EditText editText, int keyCode, KeyEvent event);"
         errorLine2="                                                                            ~~~~~~~~">
         <location
@@ -8928,7 +2799,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setImeKeyListener(ImeKeyListener listener);"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
@@ -8937,7 +2808,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~">
         <location
@@ -8946,7 +2817,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                             ~~~~~~~~~">
         <location
@@ -8955,7 +2826,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onAddPresenter(Presenter presenter, int type) {"
         errorLine2="                                   ~~~~~~~~~">
         <location
@@ -8964,7 +2835,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onCreate(ViewHolder viewHolder) {"
         errorLine2="                             ~~~~~~~~~~">
         <location
@@ -8973,7 +2844,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onBind(ViewHolder viewHolder) {"
         errorLine2="                           ~~~~~~~~~~">
         <location
@@ -8982,7 +2853,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onBind(ViewHolder viewHolder, List payloads) {"
         errorLine2="                           ~~~~~~~~~~">
         <location
@@ -8991,7 +2862,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onBind(ViewHolder viewHolder, List payloads) {"
         errorLine2="                                                  ~~~~">
         <location
@@ -9000,7 +2871,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onUnbind(ViewHolder viewHolder) {"
         errorLine2="                             ~~~~~~~~~~">
         <location
@@ -9009,7 +2880,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onAttachedToWindow(ViewHolder viewHolder) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
@@ -9018,7 +2889,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onDetachedFromWindow(ViewHolder viewHolder) {"
         errorLine2="                                         ~~~~~~~~~~">
         <location
@@ -9027,7 +2898,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract View createWrapper(View root);"
         errorLine2="                        ~~~~">
         <location
@@ -9036,7 +2907,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract View createWrapper(View root);"
         errorLine2="                                           ~~~~">
         <location
@@ -9045,7 +2916,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract void wrap(View wrapper, View wrapped);"
         errorLine2="                                  ~~~~">
         <location
@@ -9054,7 +2925,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract void wrap(View wrapper, View wrapped);"
         errorLine2="                                                ~~~~">
         <location
@@ -9063,7 +2934,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final Presenter getPresenter() {"
         errorLine2="                     ~~~~~~~~~">
         <location
@@ -9072,7 +2943,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final Presenter.ViewHolder getViewHolder() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9081,7 +2952,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final Object getItem() {"
         errorLine2="                     ~~~~~~">
         <location
@@ -9090,7 +2961,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final Object getExtraObject() {"
         errorLine2="                     ~~~~~~">
         <location
@@ -9099,7 +2970,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setExtraObject(Object object) {"
         errorLine2="                                   ~~~~~~">
         <location
@@ -9108,7 +2979,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="               ~~~~~~">
         <location
@@ -9117,7 +2988,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="                               ~~~~~~~~">
         <location
@@ -9126,7 +2997,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ItemBridgeAdapter(ObjectAdapter adapter, PresenterSelector presenterSelector) {"
         errorLine2="                             ~~~~~~~~~~~~~">
         <location
@@ -9135,7 +3006,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ItemBridgeAdapter(ObjectAdapter adapter, PresenterSelector presenterSelector) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
         <location
@@ -9144,7 +3015,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ItemBridgeAdapter(ObjectAdapter adapter) {"
         errorLine2="                             ~~~~~~~~~~~~~">
         <location
@@ -9153,7 +3024,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
@@ -9162,7 +3033,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPresenter(PresenterSelector presenterSelector) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~">
         <location
@@ -9171,7 +3042,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setWrapper(Wrapper wrapper) {"
         errorLine2="                           ~~~~~~~">
         <location
@@ -9180,7 +3051,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Wrapper getWrapper() {"
         errorLine2="           ~~~~~~~">
         <location
@@ -9189,7 +3060,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPresenterMapper(ArrayList&lt;Presenter> presenters) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9198,7 +3069,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ArrayList&lt;Presenter> getPresenterMapper() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9207,7 +3078,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onAddPresenter(Presenter presenter, int type) {"
         errorLine2="                                  ~~~~~~~~~">
         <location
@@ -9216,7 +3087,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onCreate(ViewHolder viewHolder) {"
         errorLine2="                            ~~~~~~~~~~">
         <location
@@ -9225,7 +3096,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onBind(ViewHolder viewHolder) {"
         errorLine2="                          ~~~~~~~~~~">
         <location
@@ -9234,7 +3105,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onUnbind(ViewHolder viewHolder) {"
         errorLine2="                            ~~~~~~~~~~">
         <location
@@ -9243,7 +3114,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onAttachedToWindow(ViewHolder viewHolder) {"
         errorLine2="                                      ~~~~~~~~~~">
         <location
@@ -9252,7 +3123,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onDetachedFromWindow(ViewHolder viewHolder) {"
         errorLine2="                                        ~~~~~~~~~~">
         <location
@@ -9261,7 +3132,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9270,7 +3141,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
         errorLine2="                                                            ~~~~~~~~~">
         <location
@@ -9279,7 +3150,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setAdapterListener(AdapterListener listener) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~">
         <location
@@ -9288,7 +3159,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9297,7 +3168,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final  void onBindViewHolder(RecyclerView.ViewHolder holder, int position,"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9306,7 +3177,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            List payloads) {"
         errorLine2="            ~~~~">
         <location
@@ -9315,7 +3186,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void onViewRecycled(RecyclerView.ViewHolder holder) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9324,7 +3195,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final boolean onFailedToRecycleView(RecyclerView.ViewHolder holder) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9333,7 +3204,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9342,7 +3213,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9351,7 +3222,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public FacetProvider getFacetProvider(int type) {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
@@ -9360,7 +3231,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ItemBridgeAdapterShadowOverlayWrapper(ShadowOverlayHelper helper) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9369,7 +3240,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View createWrapper(View root) {"
         errorLine2="           ~~~~">
         <location
@@ -9378,7 +3249,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View createWrapper(View root) {"
         errorLine2="                              ~~~~">
         <location
@@ -9387,7 +3258,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void wrap(View wrapper, View wrapped) {"
         errorLine2="                     ~~~~">
         <location
@@ -9396,7 +3267,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void wrap(View wrapper, View wrapped) {"
         errorLine2="                                   ~~~~">
         <location
@@ -9405,7 +3276,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Object loadTitleInTransition(Context context) {"
         errorLine2="                  ~~~~~~">
         <location
@@ -9414,7 +3285,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Object loadTitleInTransition(Context context) {"
         errorLine2="                                               ~~~~~~~">
         <location
@@ -9423,7 +3294,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Object loadTitleOutTransition(Context context) {"
         errorLine2="                  ~~~~~~">
         <location
@@ -9432,7 +3303,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Object loadTitleOutTransition(Context context) {"
         errorLine2="                                                ~~~~~~~">
         <location
@@ -9441,7 +3312,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ObjectAdapter getAdapter() {"
         errorLine2="                 ~~~~~~~~~~~~~">
         <location
@@ -9450,7 +3321,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRow(HeaderItem header, ObjectAdapter adapter) {"
         errorLine2="                   ~~~~~~~~~~">
         <location
@@ -9459,7 +3330,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRow(HeaderItem header, ObjectAdapter adapter) {"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
@@ -9468,7 +3339,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRow(long id, HeaderItem header, ObjectAdapter adapter) {"
         errorLine2="                            ~~~~~~~~~~">
         <location
@@ -9477,7 +3348,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRow(long id, HeaderItem header, ObjectAdapter adapter) {"
         errorLine2="                                               ~~~~~~~~~~~~~">
         <location
@@ -9486,7 +3357,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRow(ObjectAdapter adapter) {"
         errorLine2="                   ~~~~~~~~~~~~~">
         <location
@@ -9495,7 +3366,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getContentDescription() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -9504,7 +3375,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setContentDescription(CharSequence contentDescription) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
@@ -9513,7 +3384,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRowHoverCardView(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -9522,7 +3393,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRowHoverCardView(Context context, AttributeSet attrs) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -9531,7 +3402,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRowHoverCardView(Context context, AttributeSet attrs) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
@@ -9540,7 +3411,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRowHoverCardView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -9549,7 +3420,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRowHoverCardView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
@@ -9558,7 +3429,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final CharSequence getTitle() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
@@ -9567,7 +3438,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setTitle(CharSequence text) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
@@ -9576,7 +3447,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final CharSequence getDescription() {"
         errorLine2="                 ~~~~~~~~~~~~">
         <location
@@ -9585,7 +3456,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setDescription(CharSequence text) {"
         errorLine2="                                     ~~~~~~~~~~~~">
         <location
@@ -9594,116 +3465,8 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(View rootView, HorizontalGridView gridView, ListRowPresenter p) {"
-        errorLine2="                          ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(View rootView, HorizontalGridView gridView, ListRowPresenter p) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(View rootView, HorizontalGridView gridView, ListRowPresenter p) {"
-        errorLine2="                                                                      ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final ListRowPresenter getListRowPresenter() {"
-        errorLine2="                     ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final HorizontalGridView getGridView() {"
-        errorLine2="                     ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final ItemBridgeAdapter getBridgeAdapter() {"
-        errorLine2="                     ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Presenter.ViewHolder getItemViewHolder(int position) {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Presenter.ViewHolder getSelectedItemViewHolder() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Object getSelectedItem() {"
-        errorLine2="               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Presenter.ViewHolderTask getItemTask() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void setItemTask(Presenter.ViewHolderTask itemTask) {"
-        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void run(Presenter.ViewHolder holder) {"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void initializeRowViewHolder(RowPresenter.ViewHolder holder) {"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
+        errorLine1="    protected void initializeRowViewHolder(RowPresenter.ViewHolder vh) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
@@ -9711,7 +3474,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setRecycledPoolSize(Presenter presenter, int size) {"
         errorLine2="                                    ~~~~~~~~~">
         <location
@@ -9720,7 +3483,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int getRecycledPoolSize(Presenter presenter) {"
         errorLine2="                                   ~~~~~~~~~">
         <location
@@ -9729,7 +3492,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setHoverCardPresenterSelector(PresenterSelector selector) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
         <location
@@ -9738,7 +3501,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final PresenterSelector getHoverCardPresenterSelector() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~">
         <location
@@ -9747,7 +3510,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9756,7 +3519,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
@@ -9765,7 +3528,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void dispatchItemSelectedListener(RowPresenter.ViewHolder holder, boolean selected) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9774,7 +3537,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onRowViewSelected(RowPresenter.ViewHolder holder, boolean selected) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9783,7 +3546,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onRowViewExpanded(RowPresenter.ViewHolder holder, boolean expanded) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9792,34 +3555,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
-        errorLine2="                                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean isUsingZOrder(Context context) {"
         errorLine2="                                 ~~~~~~~">
         <location
@@ -9828,7 +3564,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean isUsingOutlineClipping(Context context) {"
         errorLine2="                                          ~~~~~~~">
         <location
@@ -9837,7 +3573,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected ShadowOverlayHelper.Options createShadowOverlayOptions() {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9846,7 +3582,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onSelectLevelChanged(RowPresenter.ViewHolder holder) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9855,7 +3591,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void applySelectLevelToChild(ViewHolder rowViewHolder, View childView) {"
         errorLine2="                                           ~~~~~~~~~~">
         <location
@@ -9864,7 +3600,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void applySelectLevelToChild(ViewHolder rowViewHolder, View childView) {"
         errorLine2="                                                                     ~~~~">
         <location
@@ -9873,25 +3609,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void freeze(RowPresenter.ViewHolder holder, boolean freeze) {"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setEntranceTransitionState(RowPresenter.ViewHolder holder,"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRowView(Context context) {"
         errorLine2="                       ~~~~~~~">
         <location
@@ -9900,7 +3618,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRowView(Context context, AttributeSet attrs) {"
         errorLine2="                       ~~~~~~~">
         <location
@@ -9909,7 +3627,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRowView(Context context, AttributeSet attrs) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
@@ -9918,7 +3636,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRowView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                       ~~~~~~~">
         <location
@@ -9927,7 +3645,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ListRowView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
@@ -9936,7 +3654,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public HorizontalGridView getGridView() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
@@ -9945,7 +3663,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MediaControllerAdapter(MediaControllerCompat controller) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9954,7 +3672,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MediaControllerCompat getMediaController() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -9963,7 +3681,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getMediaTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -9972,7 +3690,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getMediaSubtitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -9981,7 +3699,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getMediaArt(Context context) {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -9990,7 +3708,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getMediaArt(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -9999,88 +3717,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onAttachedToHost(PlaybackGlueHost host) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MediaControllerGlue(Context context,"
-        errorLine2="                               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                               int[] fastForwardSpeeds,"
-        errorLine2="                               ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                               int[] rewindSpeeds) {"
-        errorLine2="                               ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void attachToMediaController(MediaControllerCompat mediaController) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final MediaControllerCompat getMediaController() {"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getMediaTitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getMediaSubtitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getMediaArt() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MediaNowPlayingView(Context context, AttributeSet attrs) {"
         errorLine2="                               ~~~~~~~">
         <location
@@ -10089,7 +3726,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MediaNowPlayingView(Context context, AttributeSet attrs) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
@@ -10098,7 +3735,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MediaPlayerAdapter(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -10107,16 +3744,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onAttachedToHost(PlaybackGlueHost host) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean setDataSource(Uri uri) {"
         errorLine2="                                 ~~~">
         <location
@@ -10125,7 +3753,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final MediaPlayer getMediaPlayer() {"
         errorLine2="                 ~~~~~~~~~~~">
         <location
@@ -10134,214 +3762,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setCover(Drawable cover) {"
-        errorLine2="                         ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setArtist(String artist) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTitle(String title) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setVideoUrl(String videoUrl) {"
-        errorLine2="                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public MediaPlayerGlue(Context context) {"
-        errorLine2="                           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Context context, int[] fastForwardSpeeds, int[] rewindSpeeds) {"
-        errorLine2="            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Context context, int[] fastForwardSpeeds, int[] rewindSpeeds) {"
-        errorLine2="                             ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Context context, int[] fastForwardSpeeds, int[] rewindSpeeds) {"
-        errorLine2="                                                      ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onAttachedToHost(PlaybackGlueHost host) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onCreateSecondaryActions(ArrayObjectAdapter secondaryActionsAdapter) {"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setDisplay(SurfaceHolder surfaceHolder) {"
-        errorLine2="                           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onActionClicked(Action action) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
-        errorLine2="                         ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
-        errorLine2="                                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getMediaTitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getMediaSubtitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getMediaArt() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean setMediaSource(Uri uri) {"
-        errorLine2="                                  ~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean setMediaSource(String path) {"
-        errorLine2="                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
-        errorLine2="                                                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                               RowPresenter.ViewHolder rowViewHolder, Row row) {"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                               RowPresenter.ViewHolder rowViewHolder, Row row) {"
-        errorLine2="                                                                      ~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setDrawables(Drawable[] drawables) {"
         errorLine2="                                 ~~~~~~~~~~">
         <location
@@ -10350,7 +3771,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Drawable[] getDrawables() {"
         errorLine2="               ~~~~~~~~~~">
         <location
@@ -10359,7 +3780,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Drawable getCurrentDrawable() {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -10368,7 +3789,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MultiAction[] getActions();"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
@@ -10377,7 +3798,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public NonOverlappingLinearLayout(Context context) {"
         errorLine2="                                      ~~~~~~~">
         <location
@@ -10386,7 +3807,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public NonOverlappingLinearLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                      ~~~~~~~">
         <location
@@ -10395,7 +3816,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public NonOverlappingLinearLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                                       ~~~~~~~~~~~~">
         <location
@@ -10404,7 +3825,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public NonOverlappingLinearLayout(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                      ~~~~~~~">
         <location
@@ -10413,7 +3834,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public NonOverlappingLinearLayout(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                                       ~~~~~~~~~~~~">
         <location
@@ -10422,421 +3843,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void focusableViewAvailable(View v) {"
-        errorLine2="                                       ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {"
-        errorLine2="                                                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ObjectAdapter(PresenterSelector presenterSelector) {"
-        errorLine2="                         ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ObjectAdapter(Presenter presenter) {"
-        errorLine2="                         ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setPresenterSelector(PresenterSelector presenterSelector) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final PresenterSelector getPresenterSelector() {"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void registerObserver(DataObserver observer) {"
-        errorLine2="                                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void unregisterObserver(DataObserver observer) {"
-        errorLine2="                                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void notifyItemRangeChanged(int positionStart, int itemCount, Object payload) {"
-        errorLine2="                                                                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final Presenter getPresenter(Object item) {"
-        errorLine2="                 ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final Presenter getPresenter(Object item) {"
-        errorLine2="                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract Object get(int position);"
-        errorLine2="                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    void onActionClicked(Action action);"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/OnActionClickedListener.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
-        errorLine2="                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle outState) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final CharSequence getStartButtonText() {"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setStartButtonText(CharSequence text) {"
-        errorLine2="                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected Animator onCreateDescriptionAnimator() {"
-        errorLine2="              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected Animator onCreateTitleAnimator() {"
-        errorLine2="              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected CharSequence getPageTitle(int pageIndex);"
-        errorLine2="                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected CharSequence getPageDescription(int pageIndex);"
-        errorLine2="                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                                         ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
-        errorLine2="                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onSaveInstanceState(Bundle outState) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final CharSequence getStartButtonText() {"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setStartButtonText(CharSequence text) {"
-        errorLine2="                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected Animator onCreateDescriptionAnimator() {"
-        errorLine2="              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected Animator onCreateTitleAnimator() {"
-        errorLine2="              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected CharSequence getPageTitle(int pageIndex);"
-        errorLine2="                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected CharSequence getPageDescription(int pageIndex);"
-        errorLine2="                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                                         ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
-        errorLine2="                                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PageRow(HeaderItem headerItem) {"
-        errorLine2="                   ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PageRow.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PagingIndicator(Context context) {"
         errorLine2="                           ~~~~~~~">
         <location
@@ -10845,7 +3852,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PagingIndicator(Context context, AttributeSet attrs) {"
         errorLine2="                           ~~~~~~~">
         <location
@@ -10854,7 +3861,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PagingIndicator(Context context, AttributeSet attrs) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
@@ -10863,7 +3870,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PagingIndicator(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                           ~~~~~~~">
         <location
@@ -10872,7 +3879,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PagingIndicator(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
@@ -10881,16 +3888,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onDraw(Canvas canvas) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public IntProperty(String name, int index) {"
         errorLine2="                           ~~~~~~">
         <location
@@ -10899,43 +3897,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final Integer get(Parallax object) {"
-        errorLine2="                     ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final Integer get(Parallax object) {"
-        errorLine2="                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final void set(Parallax object, Integer value) {"
-        errorLine2="                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final void set(Parallax object, Integer value) {"
-        errorLine2="                                               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final int getValue(Parallax object) {"
         errorLine2="                                  ~~~~~~~~">
         <location
@@ -10944,7 +3906,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final void setValue(Parallax object, int value) {"
         errorLine2="                                   ~~~~~~~~">
         <location
@@ -10953,7 +3915,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final PropertyMarkerValue atAbsolute(int absoluteValue) {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10962,7 +3924,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final PropertyMarkerValue atMax() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10971,7 +3933,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final PropertyMarkerValue atMin() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10980,7 +3942,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final PropertyMarkerValue atFraction(float fractionOfMaxValue) {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10989,7 +3951,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final PropertyMarkerValue at(int offsetValue,"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -10998,7 +3960,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public FloatProperty(String name, int index) {"
         errorLine2="                             ~~~~~~">
         <location
@@ -11007,43 +3969,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final Float get(Parallax object) {"
-        errorLine2="                     ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final Float get(Parallax object) {"
-        errorLine2="                               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final void set(Parallax object, Float value) {"
-        errorLine2="                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public final void set(Parallax object, Float value) {"
-        errorLine2="                                               ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Parallax.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final float getValue(Parallax object) {"
         errorLine2="                                    ~~~~~~~~">
         <location
@@ -11052,7 +3978,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final void setValue(Parallax object, float value) {"
         errorLine2="                                   ~~~~~~~~">
         <location
@@ -11061,7 +3987,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final PropertyMarkerValue atAbsolute(float markerValue) {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11070,7 +3996,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final PropertyMarkerValue atMax() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11079,7 +4005,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final PropertyMarkerValue atMin() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11088,7 +4014,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final PropertyMarkerValue atFraction(float fractionOfMaxParentVisibleSize) {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11097,7 +4023,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final PropertyMarkerValue at(float offsetValue,"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11106,7 +4032,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final PropertyT addProperty(String name) {"
         errorLine2="                                       ~~~~~~">
         <location
@@ -11115,7 +4041,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final List&lt;PropertyT> getProperties() {"
         errorLine2="                 ~~~~~~~~~~~~~~~">
         <location
@@ -11124,7 +4050,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract PropertyT createProperty(String name, int index);"
         errorLine2="                                             ~~~~~~">
         <location
@@ -11133,7 +4059,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public List&lt;ParallaxEffect> getEffects() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11142,7 +4068,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void removeEffect(ParallaxEffect effect) {"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
@@ -11151,7 +4077,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ParallaxEffect addEffect(PropertyMarkerValue... ranges) {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -11160,7 +4086,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ParallaxEffect addEffect(PropertyMarkerValue... ranges) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11169,7 +4095,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final List&lt;Parallax.PropertyMarkerValue> getPropertyRanges() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11178,7 +4104,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final List&lt;Float> getWeights() {"
         errorLine2="                 ~~~~~~~~~~~">
         <location
@@ -11187,7 +4113,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setPropertyRanges(Parallax.PropertyMarkerValue... markerValues) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11196,7 +4122,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setWeights(float... weights) {"
         errorLine2="                                 ~~~~~~~~">
         <location
@@ -11205,7 +4131,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ParallaxEffect weights(float... weights) {"
         errorLine2="                 ~~~~~~~~~~~~~~">
         <location
@@ -11214,7 +4140,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ParallaxEffect weights(float... weights) {"
         errorLine2="                                        ~~~~~~~~">
         <location
@@ -11223,7 +4149,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void addTarget(ParallaxTarget target) {"
         errorLine2="                                ~~~~~~~~~~~~~~">
         <location
@@ -11232,7 +4158,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ParallaxEffect target(ParallaxTarget target) {"
         errorLine2="                 ~~~~~~~~~~~~~~">
         <location
@@ -11241,7 +4167,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ParallaxEffect target(ParallaxTarget target) {"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
@@ -11250,7 +4176,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ParallaxEffect target(Object targetObject, PropertyValuesHolder values) {"
         errorLine2="                 ~~~~~~~~~~~~~~">
         <location
@@ -11259,7 +4185,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ParallaxEffect target(Object targetObject, PropertyValuesHolder values) {"
         errorLine2="                                       ~~~~~~">
         <location
@@ -11268,7 +4194,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ParallaxEffect target(Object targetObject, PropertyValuesHolder values) {"
         errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11277,7 +4203,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final &lt;T, V extends Number> ParallaxEffect target(T targetObject,"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
@@ -11286,7 +4212,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Property&lt;T, V> targetProperty) {"
         errorLine2="            ~~~~~~~~~~~~~~">
         <location
@@ -11295,7 +4221,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final List&lt;ParallaxTarget> getTargets() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11304,7 +4230,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void removeTarget(ParallaxTarget target) {"
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
@@ -11313,7 +4239,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void performMapping(Parallax source) {"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -11322,7 +4248,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void directUpdate(Number value) {"
         errorLine2="                             ~~~~~~">
         <location
@@ -11331,7 +4257,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public PropertyValuesHolderTarget(Object targetObject, PropertyValuesHolder values) {"
         errorLine2="                                          ~~~~~~">
         <location
@@ -11340,7 +4266,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public PropertyValuesHolderTarget(Object targetObject, PropertyValuesHolder values) {"
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11349,7 +4275,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public DirectPropertyTarget(Object targetObject, Property&lt;T, V> property) {"
         errorLine2="                                    ~~~~~~">
         <location
@@ -11358,7 +4284,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public DirectPropertyTarget(Object targetObject, Property&lt;T, V> property) {"
         errorLine2="                                                         ~~~~~~~~~~~~~~">
         <location
@@ -11367,7 +4293,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void directUpdate(Number value) {"
         errorLine2="                                 ~~~~~~">
         <location
@@ -11376,7 +4302,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ParallaxTransition(Context context, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -11385,7 +4311,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ParallaxTransition(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
@@ -11394,97 +4320,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view,"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view,"
-        errorLine2="                             ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onAppear(ViewGroup sceneRoot, View view,"
-        errorLine2="                                                  ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                             TransitionValues startValues, TransitionValues endValues) {"
-        errorLine2="                             ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                             TransitionValues startValues, TransitionValues endValues) {"
-        errorLine2="                                                           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view,"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view,"
-        errorLine2="                                ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Animator onDisappear(ViewGroup sceneRoot, View view,"
-        errorLine2="                                                     ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                TransitionValues startValues, TransitionValues endValues) {"
-        errorLine2="                                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                TransitionValues startValues, TransitionValues endValues) {"
-        errorLine2="                                                              ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void requestPermissions(android.app.Fragment fragment, String[] permissions,"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11493,7 +4329,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void requestPermissions(android.app.Fragment fragment, String[] permissions,"
         errorLine2="                                                                         ~~~~~~~~">
         <location
@@ -11502,169 +4338,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void onValueChanged(Picker picker, int column);"
-        errorLine2="                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final CharSequence getSeparator() {"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setSeparator(CharSequence separator) {"
-        errorLine2="                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final List&lt;CharSequence> getSeparators() {"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setSeparators(List&lt;CharSequence> separators) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Picker(Context context, AttributeSet attributeSet) {"
-        errorLine2="                  ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Picker(Context context, AttributeSet attributeSet) {"
-        errorLine2="                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Picker(Context context, AttributeSet attrs, int defStyleAttr) {"
-        errorLine2="                  ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Picker(Context context, AttributeSet attrs, int defStyleAttr) {"
-        errorLine2="                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PickerColumn getColumnAt(int colIndex) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setColumns(List&lt;PickerColumn> columns) {"
-        errorLine2="                           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setColumnAt(int columnIndex, PickerColumn column) {"
-        errorLine2="                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addOnValueChangedListener(PickerValueListener listener) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void removeOnValueChangedListener(PickerValueListener listener) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchKeyEvent(android.view.KeyEvent event) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {"
-        errorLine2="                                                                 ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void requestChildFocus(View child, View focused) {"
-        errorLine2="                                  ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void requestChildFocus(View child, View focused) {"
-        errorLine2="                                              ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setLabelFormat(String labelFormat) {"
         errorLine2="                               ~~~~~~">
         <location
@@ -11673,7 +4347,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public String getLabelFormat() {"
         errorLine2="           ~~~~~~">
         <location
@@ -11682,7 +4356,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setStaticLabels(CharSequence[] labels) {"
         errorLine2="                                ~~~~~~~~~~~~~~">
         <location
@@ -11691,7 +4365,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence[] getStaticLabels() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -11700,7 +4374,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getLabelFor(int value) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -11709,7 +4383,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PinPicker(Context context, AttributeSet attrs) {"
         errorLine2="                     ~~~~~~~">
         <location
@@ -11718,7 +4392,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PinPicker(Context context, AttributeSet attrs) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
@@ -11727,7 +4401,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PinPicker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                     ~~~~~~~">
         <location
@@ -11736,7 +4410,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PinPicker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
@@ -11745,16 +4419,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
-        errorLine2="                                    ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public String getPin() {"
         errorLine2="           ~~~~~~">
         <location
@@ -11763,286 +4428,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlaybackBannerControlGlue(Context context,"
-        errorLine2="                                     ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            int[] seekSpeeds,"
-        errorLine2="            ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlaybackBannerControlGlue(Context context,"
-        errorLine2="                                     ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                    int[] fastForwardSpeeds,"
-        errorLine2="                                    ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                    int[] rewindSpeeds,"
-        errorLine2="                                    ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setControlsRow(PlaybackControlsRow controlsRow) {"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onCreatePrimaryActions(ArrayObjectAdapter primaryActionsAdapter) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected PlaybackRowPresenter onCreateRowPresenter() {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onActionClicked(Action action) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
-        errorLine2="                         ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
-        errorLine2="                                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlaybackBaseControlGlue(Context context, T impl) {"
-        errorLine2="                                   ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onAttachedToHost(PlaybackGlueHost host) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected abstract PlaybackRowPresenter onCreateRowPresenter();"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setControlsRow(PlaybackControlsRow controlsRow) {"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlaybackControlsRow getControlsRow() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlaybackRowPresenter getPlaybackRowPresenter() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract void onActionClicked(Action action);"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract boolean onKey(View v, int keyCode, KeyEvent event);"
-        errorLine2="                                  ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract boolean onKey(View v, int keyCode, KeyEvent event);"
-        errorLine2="                                                       ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected static void notifyItemChanged(ArrayObjectAdapter adapter, Object object) {"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected static void notifyItemChanged(ArrayObjectAdapter adapter, Object object) {"
-        errorLine2="                                                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onCreatePrimaryActions(ArrayObjectAdapter primaryActionsAdapter) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onCreateSecondaryActions(ArrayObjectAdapter secondaryActionsAdapter) {"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setArt(Drawable cover) {"
-        errorLine2="                       ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getArt() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSubtitle(CharSequence subtitle) {"
-        errorLine2="                            ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getSubtitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTitle(CharSequence title) {"
-        errorLine2="                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getTitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackControlGlue(Context context, int[] seekSpeeds) {"
         errorLine2="                               ~~~~~~~">
         <location
@@ -12051,7 +4437,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackControlGlue(Context context, int[] seekSpeeds) {"
         errorLine2="                                                ~~~~~">
         <location
@@ -12060,7 +4446,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackControlGlue(Context context,"
         errorLine2="                               ~~~~~~~">
         <location
@@ -12069,7 +4455,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                               int[] fastForwardSpeeds,"
         errorLine2="                               ~~~~~">
         <location
@@ -12078,7 +4464,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                               int[] rewindSpeeds) {"
         errorLine2="                               ~~~~~">
         <location
@@ -12087,16 +4473,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onAttachedToHost(PlaybackGlueHost host) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] getFastForwardSpeeds() {"
         errorLine2="           ~~~~~">
         <location
@@ -12105,7 +4482,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] getRewindSpeeds() {"
         errorLine2="           ~~~~~">
         <location
@@ -12114,7 +4491,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setControlsRow(PlaybackControlsRow controlsRow) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -12123,7 +4500,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected SparseArrayObjectAdapter createPrimaryActionsAdapter("
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -12132,7 +4509,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            PresenterSelector presenterSelector) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
@@ -12141,16 +4518,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setControlsRowPresenter(PlaybackControlsRowPresenter presenter) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackControlsRow getControlsRow() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -12159,16 +4527,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlaybackControlsRowPresenter getControlsRowPresenter() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -12177,7 +4536,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackRowPresenter getPlaybackRowPresenter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -12186,7 +4545,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onActionClicked(Action action) {"
         errorLine2="                                ~~~~~~">
         <location
@@ -12195,25 +4554,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
-        errorLine2="                         ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
-        errorLine2="                                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract CharSequence getMediaTitle();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
@@ -12222,7 +4563,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract CharSequence getMediaSubtitle();"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
@@ -12231,7 +4572,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract Drawable getMediaArt();"
         errorLine2="                    ~~~~~~~~">
         <location
@@ -12240,7 +4581,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onCreatePrimaryActions(SparseArrayObjectAdapter primaryActionsAdapter) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -12249,7 +4590,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onCreateSecondaryActions(ArrayObjectAdapter secondaryActionsAdapter) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -12258,7 +4599,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onCurrentPositionChanged(PlaybackControlsRow row, long currentTimeMs) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -12267,7 +4608,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onDurationChanged(PlaybackControlsRow row, long totalTime) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -12276,7 +4617,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onBufferedPositionChanged(PlaybackControlsRow row, long bufferedProgressMs) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -12285,7 +4626,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setDrawables(Drawable[] drawables) {"
         errorLine2="                                 ~~~~~~~~~~">
         <location
@@ -12294,7 +4635,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setLabels(String[] labels) {"
         errorLine2="                              ~~~~~~~~">
         <location
@@ -12303,7 +4644,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setSecondaryLabels(String[] labels) {"
         errorLine2="                                       ~~~~~~~~">
         <location
@@ -12312,7 +4653,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Drawable getDrawable(int index) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -12321,7 +4662,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public String getLabel(int index) {"
         errorLine2="               ~~~~~~">
         <location
@@ -12330,7 +4671,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public String getSecondaryLabel(int index) {"
         errorLine2="               ~~~~~~">
         <location
@@ -12339,7 +4680,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public PlayPauseAction(Context context) {"
         errorLine2="                               ~~~~~~~">
         <location
@@ -12348,7 +4689,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public FastForwardAction(Context context) {"
         errorLine2="                                 ~~~~~~~">
         <location
@@ -12357,7 +4698,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public FastForwardAction(Context context, int numSpeeds) {"
         errorLine2="                                 ~~~~~~~">
         <location
@@ -12366,7 +4707,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RewindAction(Context context) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -12375,7 +4716,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RewindAction(Context context, int numSpeeds) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -12384,7 +4725,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SkipNextAction(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -12393,7 +4734,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SkipPreviousAction(Context context) {"
         errorLine2="                                  ~~~~~~~">
         <location
@@ -12402,7 +4743,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public PictureInPictureAction(Context context) {"
         errorLine2="                                      ~~~~~~~">
         <location
@@ -12411,7 +4752,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MoreActions(Context context) {"
         errorLine2="                           ~~~~~~~">
         <location
@@ -12420,7 +4761,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ThumbsAction(int id, Context context, int solidIconIndex, int outlineIconIndex) {"
         errorLine2="                                    ~~~~~~~">
         <location
@@ -12429,7 +4770,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ThumbsUpAction(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -12438,7 +4779,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ThumbsDownAction(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -12447,7 +4788,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RepeatAction(Context context) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -12456,7 +4797,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RepeatAction(Context context, int highlightColor) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -12465,7 +4806,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RepeatAction(Context context, int repeatAllColor, int repeatOneColor) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -12474,7 +4815,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ShuffleAction(Context context) {"
         errorLine2="                             ~~~~~~~">
         <location
@@ -12483,7 +4824,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ShuffleAction(Context context, int highlightColor) {"
         errorLine2="                             ~~~~~~~">
         <location
@@ -12492,7 +4833,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public HighQualityAction(Context context) {"
         errorLine2="                                 ~~~~~~~">
         <location
@@ -12501,7 +4842,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public HighQualityAction(Context context, int highlightColor) {"
         errorLine2="                                 ~~~~~~~">
         <location
@@ -12510,7 +4851,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ClosedCaptioningAction(Context context) {"
         errorLine2="                                      ~~~~~~~">
         <location
@@ -12519,7 +4860,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ClosedCaptioningAction(Context context, int highlightColor) {"
         errorLine2="                                      ~~~~~~~">
         <location
@@ -12528,7 +4869,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackControlsRow(Object item) {"
         errorLine2="                               ~~~~~~">
         <location
@@ -12537,7 +4878,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Object getItem() {"
         errorLine2="                 ~~~~~~">
         <location
@@ -12546,7 +4887,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setImageDrawable(Drawable drawable) {"
         errorLine2="                                       ~~~~~~~~">
         <location
@@ -12555,7 +4896,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setImageBitmap(Context context, Bitmap bm) {"
         errorLine2="                                     ~~~~~~~">
         <location
@@ -12564,7 +4905,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setImageBitmap(Context context, Bitmap bm) {"
         errorLine2="                                                      ~~~~~~">
         <location
@@ -12573,7 +4914,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Drawable getImageDrawable() {"
         errorLine2="                 ~~~~~~~~">
         <location
@@ -12582,7 +4923,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setPrimaryActionsAdapter(ObjectAdapter adapter) {"
         errorLine2="                                               ~~~~~~~~~~~~~">
         <location
@@ -12591,7 +4932,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setSecondaryActionsAdapter(ObjectAdapter adapter) {"
         errorLine2="                                                 ~~~~~~~~~~~~~">
         <location
@@ -12600,7 +4941,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ObjectAdapter getPrimaryActionsAdapter() {"
         errorLine2="                 ~~~~~~~~~~~~~">
         <location
@@ -12609,7 +4950,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ObjectAdapter getSecondaryActionsAdapter() {"
         errorLine2="                 ~~~~~~~~~~~~~">
         <location
@@ -12618,7 +4959,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Action getActionForKeyCode(int keyCode) {"
         errorLine2="           ~~~~~~">
         <location
@@ -12627,7 +4968,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Action getActionForKeyCode(ObjectAdapter adapter, int keyCode) {"
         errorLine2="           ~~~~~~">
         <location
@@ -12636,7 +4977,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Action getActionForKeyCode(ObjectAdapter adapter, int keyCode) {"
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
@@ -12645,7 +4986,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnPlaybackProgressChangedListener(OnPlaybackProgressCallback listener) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -12654,484 +4995,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlaybackControlsRowPresenter(Presenter descriptionPresenter) {"
-        errorLine2="                                        ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnActionClickedListener(OnActionClickedListener listener) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public OnActionClickedListener getOnActionClickedListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void showBottomSpace(ViewHolder vh, boolean show) {"
-        errorLine2="                                ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void showPrimaryActions(ViewHolder vh) {"
-        errorLine2="                                   ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onReappear(RowPresenter.ViewHolder rowViewHolder) {"
-        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
-        errorLine2="                                                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
-        errorLine2="                                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewSelected(RowPresenter.ViewHolder vh, boolean selected) {"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public boolean onUnhandledKey(KeyEvent event);"
-        errorLine2="                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackControlsRowView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ObjectAdapter getAdapter() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setFadeCompleteListener(OnFadeCompleteListener listener) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public OnFadeCompleteListener getFadeCompleteListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setOnKeyInterceptListener(View.OnKeyListener handler) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onCreate(Bundle savedInstanceState) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                             Bundle savedInstanceState) {"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setHostCallback(PlaybackGlueHost.HostCallback hostCallback) {"
-        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewSelectedListener(final BaseOnItemViewSelectedListener listener) {"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
-        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnPlaybackItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
-        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setPlaybackRow(Row row) {"
-        errorLine2="                               ~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
-        errorLine2="                           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setPlaybackSeekUiClient(PlaybackSeekUi.Client client) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onError(int errorCode, CharSequence errorMessage) {"
-        errorLine2="                                          ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ProgressBarManager getProgressBarManager() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlaybackFragmentGlueHost(PlaybackFragment fragment) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnKeyInterceptListener(View.OnKeyListener onKeyListener) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnActionClickedListener(final OnActionClickedListener listener) {"
-        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setHostCallback(HostCallback callback) {"
-        errorLine2="                                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setPlaybackRow(Row row) {"
-        errorLine2="                               ~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setPlaybackSeekUiClient(Client client) {"
-        errorLine2="                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlayerCallback getPlayerCallback() {"
-        errorLine2="           ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onPreparedStateChanged(PlaybackGlue glue) {"
-        errorLine2="                                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onPlayStateChanged(PlaybackGlue glue) {"
-        errorLine2="                                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onPlayCompleted(PlaybackGlue glue) {"
-        errorLine2="                                    ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlaybackGlue(Context context) {"
-        errorLine2="                        ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Context getContext() {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addPlayerCallback(PlayerCallback playerCallback) {"
-        errorLine2="                                  ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void removePlayerCallback(PlayerCallback callback) {"
-        errorLine2="                                     ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected List&lt;PlayerCallback> getPlayerCallbacks() {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setHost(PlaybackGlueHost host) {"
-        errorLine2="                              ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onAttachedToHost(PlaybackGlueHost host) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PlaybackGlueHost getHost() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onError(int errorCode, CharSequence errorMessage) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
@@ -13140,7 +5004,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnKeyInterceptListener(View.OnKeyListener onKeyListener) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
@@ -13149,7 +5013,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnActionClickedListener(OnActionClickedListener listener) {}"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13158,7 +5022,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setHostCallback(HostCallback callback) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
@@ -13167,7 +5031,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {}"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13176,7 +5040,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPlaybackRow(Row row) {}"
         errorLine2="                               ~~~">
         <location
@@ -13185,7 +5049,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlayerCallback getPlayerCallback() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -13194,7 +5058,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
@@ -13203,16 +5067,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onReappear(RowPresenter.ViewHolder rowViewHolder) {"
-        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onThumbnailLoaded(Bitmap bitmap, int index) {"
         errorLine2="                                      ~~~~~~">
         <location
@@ -13221,7 +5076,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public long[] getSeekPositions() {"
         errorLine2="           ~~~~~~">
         <location
@@ -13230,7 +5085,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void getThumbnail(int index, ResultCallback callback) {"
         errorLine2="                                        ~~~~~~~~~~~~~~">
         <location
@@ -13239,7 +5094,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public PlaybackSeekDataProvider getPlaybackSeekDataProvider() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13248,7 +5103,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    void setPlaybackSeekUiClient(Client client);"
         errorLine2="                                 ~~~~~~">
         <location
@@ -13257,7 +5112,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
@@ -13266,7 +5121,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setFadeCompleteListener(OnFadeCompleteListener listener) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13275,7 +5130,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public OnFadeCompleteListener getFadeCompleteListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13284,7 +5139,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setOnKeyInterceptListener(View.OnKeyListener handler) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
         <location
@@ -13293,7 +5148,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
@@ -13302,7 +5157,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
@@ -13311,7 +5166,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
@@ -13320,7 +5175,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
@@ -13329,7 +5184,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                             Bundle savedInstanceState) {"
         errorLine2="                             ~~~~~~">
         <location
@@ -13338,7 +5193,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setHostCallback(PlaybackGlueHost.HostCallback hostCallback) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13347,7 +5202,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnItemViewSelectedListener(final BaseOnItemViewSelectedListener listener) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13356,7 +5211,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13365,7 +5220,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnPlaybackItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
         errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13374,7 +5229,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPlaybackRow(Row row) {"
         errorLine2="                               ~~~">
         <location
@@ -13383,7 +5238,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13392,7 +5247,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
@@ -13401,7 +5256,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPlaybackSeekUiClient(PlaybackSeekUi.Client client) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13410,7 +5265,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onError(int errorCode, CharSequence errorMessage) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
@@ -13419,7 +5274,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ProgressBarManager getProgressBarManager() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
@@ -13428,7 +5283,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackSupportFragmentGlueHost(PlaybackSupportFragment fragment) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13437,7 +5292,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnKeyInterceptListener(View.OnKeyListener onKeyListener) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
@@ -13446,7 +5301,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnActionClickedListener(final OnActionClickedListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13455,7 +5310,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setHostCallback(HostCallback callback) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
@@ -13464,7 +5319,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13473,7 +5328,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPlaybackRow(Row row) {"
         errorLine2="                               ~~~">
         <location
@@ -13482,7 +5337,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPlaybackSeekUiClient(Client client) {"
         errorLine2="                                        ~~~~~~">
         <location
@@ -13491,7 +5346,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlayerCallback getPlayerCallback() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -13500,7 +5355,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackTransportControlGlue(Context context, T impl) {"
         errorLine2="                                        ~~~~~~~">
         <location
@@ -13509,70 +5364,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setControlsRow(PlaybackControlsRow controlsRow) {"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onCreatePrimaryActions(ArrayObjectAdapter primaryActionsAdapter) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected PlaybackRowPresenter onCreateRowPresenter() {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onAttachedToHost(PlaybackGlueHost host) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onActionClicked(Action action) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
-        errorLine2="                         ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKey(View v, int keyCode, KeyEvent event) {"
-        errorLine2="                                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setSeekProvider(PlaybackSeekDataProvider seekProvider) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13581,7 +5373,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final PlaybackSeekDataProvider getSeekProvider() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13590,7 +5382,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ViewHolder(View rootView, Presenter descriptionPresenter) {"
         errorLine2="                          ~~~~">
         <location
@@ -13599,7 +5391,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ViewHolder(View rootView, Presenter descriptionPresenter) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
@@ -13608,7 +5400,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final Presenter.ViewHolder getDescriptionViewHolder() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13617,7 +5409,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setPlaybackSeekUiClient(Client client) {"
         errorLine2="                                            ~~~~~~">
         <location
@@ -13626,7 +5418,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final TextView getDurationView() {"
         errorLine2="                     ~~~~~~~~">
         <location
@@ -13635,7 +5427,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final TextView getCurrentPositionView() {"
         errorLine2="                     ~~~~~~~~">
         <location
@@ -13644,7 +5436,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setDescriptionPresenter(Presenter descriptionPresenter) {"
         errorLine2="                                        ~~~~~~~~~">
         <location
@@ -13653,7 +5445,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnActionClickedListener(OnActionClickedListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13662,7 +5454,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public OnActionClickedListener getOnActionClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13671,7 +5463,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onReappear(RowPresenter.ViewHolder rowViewHolder) {"
         errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13680,7 +5472,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13689,7 +5481,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                          ~~~~~~~~~">
         <location
@@ -13698,34 +5490,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
-        errorLine2="                                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onProgressBarClicked(ViewHolder vh) {"
         errorLine2="                                        ~~~~~~~~~~">
         <location
@@ -13734,7 +5499,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onRowViewSelected(RowPresenter.ViewHolder vh, boolean selected) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -13743,25 +5508,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        boolean onUnhandledKey(KeyEvent event);"
         errorLine2="                               ~~~~~~~~">
         <location
@@ -13770,7 +5517,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackTransportRowView(Context context, AttributeSet attrs) {"
         errorLine2="                                    ~~~~~~~">
         <location
@@ -13779,7 +5526,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackTransportRowView(Context context, AttributeSet attrs) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
@@ -13788,7 +5535,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackTransportRowView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                    ~~~~~~~">
         <location
@@ -13797,7 +5544,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PlaybackTransportRowView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
@@ -13806,169 +5553,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
-        errorLine2="                                    ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {"
-        errorLine2="                                                                 ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View focusSearch(View focused, int direction) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View focusSearch(View focused, int direction) {"
-        errorLine2="                            ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onPlayStateChanged(PlayerAdapter adapter) {"
-        errorLine2="                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onPreparedStateChanged(PlayerAdapter adapter) {"
-        errorLine2="                                           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onPlayCompleted(PlayerAdapter adapter) {"
-        errorLine2="                                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onCurrentPositionChanged(PlayerAdapter adapter) {"
-        errorLine2="                                             ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onBufferedPositionChanged(PlayerAdapter adapter) {"
-        errorLine2="                                              ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onDurationChanged(PlayerAdapter adapter) {"
-        errorLine2="                                      ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onVideoSizeChanged(PlayerAdapter adapter, int width, int height) {"
-        errorLine2="                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onError(PlayerAdapter adapter, int errorCode, String errorMessage) {"
-        errorLine2="                            ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onError(PlayerAdapter adapter, int errorCode, String errorMessage) {"
-        errorLine2="                                                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onBufferingStateChanged(PlayerAdapter adapter, boolean start) {"
-        errorLine2="                                            ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onMetadataChanged(PlayerAdapter adapter) {"
-        errorLine2="                                      ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setCallback(Callback callback) {"
-        errorLine2="                                  ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final Callback getCallback() {"
-        errorLine2="                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onAttachedToHost(PlaybackGlueHost host) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
@@ -13977,7 +5562,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="                     ~~~~~~">
         <location
@@ -13986,7 +5571,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="                                     ~~~~~~~~">
         <location
@@ -13995,7 +5580,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final void setFacet(Class&lt;?> facetClass, Object facetImpl) {"
         errorLine2="                                   ~~~~~~~~">
         <location
@@ -14004,7 +5589,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final void setFacet(Class&lt;?> facetClass, Object facetImpl) {"
         errorLine2="                                                        ~~~~~~">
         <location
@@ -14013,7 +5598,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void run(Presenter.ViewHolder holder) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14022,97 +5607,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract ViewHolder onCreateViewHolder(ViewGroup parent);"
-        errorLine2="                    ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract ViewHolder onCreateViewHolder(ViewGroup parent);"
-        errorLine2="                                                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract void onBindViewHolder(ViewHolder viewHolder, Object item);"
-        errorLine2="                                          ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract void onBindViewHolder(ViewHolder viewHolder, Object item);"
-        errorLine2="                                                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item, List&lt;Object> payloads) {"
-        errorLine2="                                 ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item, List&lt;Object> payloads) {"
-        errorLine2="                                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item, List&lt;Object> payloads) {"
-        errorLine2="                                                                     ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract void onUnbindViewHolder(ViewHolder viewHolder);"
-        errorLine2="                                            ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onViewAttachedToWindow(ViewHolder holder) {"
-        errorLine2="                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onViewDetachedFromWindow(ViewHolder holder) {"
-        errorLine2="                                         ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/Presenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected static void cancelAnimationsRecursive(View view) {"
         errorLine2="                                                    ~~~~">
         <location
@@ -14121,7 +5616,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnClickListener(ViewHolder holder, View.OnClickListener listener) {"
         errorLine2="                                   ~~~~~~~~~~">
         <location
@@ -14130,7 +5625,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnClickListener(ViewHolder holder, View.OnClickListener listener) {"
         errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14139,7 +5634,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="                 ~~~~~~">
         <location
@@ -14148,7 +5643,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Object getFacet(Class&lt;?> facetClass) {"
         errorLine2="                                 ~~~~~~~~">
         <location
@@ -14157,7 +5652,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setFacet(Class&lt;?> facetClass, Object facetImpl) {"
         errorLine2="                               ~~~~~~~~">
         <location
@@ -14166,7 +5661,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setFacet(Class&lt;?> facetClass, Object facetImpl) {"
         errorLine2="                                                    ~~~~~~">
         <location
@@ -14175,34 +5670,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract Presenter getPresenter(Object item);"
-        errorLine2="                    ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PresenterSelector.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract Presenter getPresenter(Object item);"
-        errorLine2="                                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PresenterSelector.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter[] getPresenters() {"
-        errorLine2="           ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/PresenterSelector.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void init(ViewGroup parent, PresenterSelector presenterSelector) {"
         errorLine2="                     ~~~~~~~~~">
         <location
@@ -14211,7 +5679,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void init(ViewGroup parent, PresenterSelector presenterSelector) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~">
         <location
@@ -14220,7 +5688,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void select(Object object) {"
         errorLine2="                       ~~~~~~">
         <location
@@ -14229,7 +5697,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ViewGroup getParentViewGroup() {"
         errorLine2="                 ~~~~~~~~~">
         <location
@@ -14238,7 +5706,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected abstract void insertView(View view);"
         errorLine2="                                       ~~~~">
         <location
@@ -14247,7 +5715,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onViewSelected(View view) {"
         errorLine2="                                  ~~~~">
         <location
@@ -14256,7 +5724,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void showView(View view, boolean visible) {"
         errorLine2="                            ~~~~">
         <location
@@ -14265,7 +5733,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setRootView(ViewGroup rootView) {"
         errorLine2="                            ~~~~~~~~~">
         <location
@@ -14274,7 +5742,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setProgressBarView(View progressBarView) {"
         errorLine2="                                   ~~~~">
         <location
@@ -14283,7 +5751,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ChildPositionProperty adapterPosition(int adapterPosition) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14292,7 +5760,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ChildPositionProperty viewId(int viewId) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14301,7 +5769,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ChildPositionProperty offset(int offset) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14310,7 +5778,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ChildPositionProperty fraction(float fraction) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14319,7 +5787,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ChildPositionProperty createProperty(String name, int index) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14328,7 +5796,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ChildPositionProperty createProperty(String name, int index) {"
         errorLine2="                                                ~~~~~~">
         <location
@@ -14337,7 +5805,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setRecyclerView(RecyclerView recyclerView) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
@@ -14346,7 +5814,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView getRecyclerView() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
@@ -14355,7 +5823,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Row(long id, HeaderItem headerItem) {"
         errorLine2="                        ~~~~~~~~~~">
         <location
@@ -14364,7 +5832,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Row(HeaderItem headerItem) {"
         errorLine2="               ~~~~~~~~~~">
         <location
@@ -14373,7 +5841,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final HeaderItem getHeaderItem() {"
         errorLine2="                 ~~~~~~~~~~">
         <location
@@ -14382,7 +5850,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setHeaderItem(HeaderItem headerItem) {"
         errorLine2="                                    ~~~~~~~~~~">
         <location
@@ -14391,115 +5859,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(View view) {"
-        errorLine2="                          ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(RowHeaderView view) {"
-        errorLine2="                          ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="                                                   ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setSelectLevel(ViewHolder holder, float selectLevel) {"
-        errorLine2="                                     ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onSelectLevelChanged(ViewHolder holder) {"
-        errorLine2="                                        ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int getSpaceUnderBaseline(ViewHolder holder) {"
-        errorLine2="                                     ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected static float getFontDescent(TextView textView, Paint fontMeasurePaint) {"
-        errorLine2="                                          ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected static float getFontDescent(TextView textView, Paint fontMeasurePaint) {"
-        errorLine2="                                                             ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RowHeaderView(Context context) {"
         errorLine2="                         ~~~~~~~">
         <location
@@ -14508,7 +5868,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RowHeaderView(Context context, AttributeSet attrs) {"
         errorLine2="                         ~~~~~~~">
         <location
@@ -14517,7 +5877,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RowHeaderView(Context context, AttributeSet attrs) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
@@ -14526,7 +5886,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RowHeaderView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                         ~~~~~~~">
         <location
@@ -14535,7 +5895,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RowHeaderView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
@@ -14544,16 +5904,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {"
-        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ViewHolder(View view) {"
         errorLine2="                          ~~~~">
         <location
@@ -14562,7 +5913,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final Row getRow() {"
         errorLine2="                     ~~~">
         <location
@@ -14571,7 +5922,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final Object getRowObject() {"
         errorLine2="                     ~~~~~~">
         <location
@@ -14580,7 +5931,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final RowHeaderPresenter.ViewHolder getHeaderViewHolder() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14589,7 +5940,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final void syncActivatedStatus(View view) {"
         errorLine2="                                              ~~~~">
         <location
@@ -14598,7 +5949,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setOnKeyListener(View.OnKeyListener keyListener) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
         <location
@@ -14607,7 +5958,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View.OnKeyListener getOnKeyListener() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~">
         <location
@@ -14616,7 +5967,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14625,7 +5976,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final BaseOnItemViewSelectedListener getOnItemViewSelectedListener() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14634,7 +5985,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
         errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14643,7 +5994,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public final BaseOnItemViewClickedListener getOnItemViewClickedListener() {"
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14652,25 +6003,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Presenter.ViewHolder getSelectedItemViewHolder() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Object getSelectedItem() {"
-        errorLine2="               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14679,7 +6012,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                                                         ~~~~~~~~~">
         <location
@@ -14688,25 +6021,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected abstract ViewHolder createRowViewHolder(ViewGroup parent);"
-        errorLine2="                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected abstract ViewHolder createRowViewHolder(ViewGroup parent);"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void initializeRowViewHolder(ViewHolder vh) {"
         errorLine2="                                           ~~~~~~~~~~">
         <location
@@ -14715,7 +6030,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setHeaderPresenter(RowHeaderPresenter headerPresenter) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~">
         <location
@@ -14724,7 +6039,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final RowHeaderPresenter getHeaderPresenter() {"
         errorLine2="                 ~~~~~~~~~~~~~~~~~~">
         <location
@@ -14733,7 +6048,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ViewHolder getRowViewHolder(Presenter.ViewHolder holder) {"
         errorLine2="                 ~~~~~~~~~~">
         <location
@@ -14742,7 +6057,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final ViewHolder getRowViewHolder(Presenter.ViewHolder holder) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14751,7 +6066,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setRowViewExpanded(Presenter.ViewHolder holder, boolean expanded) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14760,7 +6075,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setRowViewSelected(Presenter.ViewHolder holder, boolean selected) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14769,7 +6084,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onRowViewExpanded(ViewHolder vh, boolean expanded) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
@@ -14778,7 +6093,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void dispatchItemSelectedListener(ViewHolder vh, boolean selected) {"
         errorLine2="                                                ~~~~~~~~~~">
         <location
@@ -14787,16 +6102,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewSelected(ViewHolder vh, boolean selected) {"
-        errorLine2="                                     ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void setSelectLevel(Presenter.ViewHolder vh, float level) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14805,7 +6111,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final float getSelectLevel(Presenter.ViewHolder vh) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14814,7 +6120,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onSelectLevelChanged(ViewHolder vh) {"
         errorLine2="                                        ~~~~~~~~~~">
         <location
@@ -14823,4830 +6129,1685 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(ViewHolder vh, Object item) {"
-        errorLine2="                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onBindRowViewHolder(ViewHolder vh, Object item) {"
-        errorLine2="                                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onUnbindRowViewHolder(ViewHolder vh) {"
-        errorLine2="                                         ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void onViewAttachedToWindow(Presenter.ViewHolder holder) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewAttachedToWindow(ViewHolder vh) {"
-        errorLine2="                                             ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void onViewDetachedFromWindow(Presenter.ViewHolder holder) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRowViewDetachedFromWindow(ViewHolder vh) {"
-        errorLine2="                                               ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void freeze(ViewHolder holder, boolean freeze) {"
-        errorLine2="                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setEntranceTransitionState(ViewHolder holder, boolean afterEntrance) {"
-        errorLine2="                                           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public BrowseFragment.MainFragmentAdapter getMainFragmentAdapter() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public BrowseFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected VerticalGridView findGridViewFromRoot(View view) {"
-        errorLine2="              ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected VerticalGridView findGridViewFromRoot(View view) {"
-        errorLine2="                                                    ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public BaseOnItemViewClickedListener getOnItemViewClickedListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="190"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="224"
-            column="47"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public BaseOnItemViewSelectedListener getOnItemViewSelectedListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="241"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public RowPresenter.ViewHolder getRowViewHolder(int position) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="274"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            final Presenter.ViewHolderTask rowHolderTask) {"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="508"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public RowPresenter.ViewHolder findRowViewHolderByPosition(int position) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="581"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public MainFragmentAdapter(RowsFragment fragment) {"
-        errorLine2="                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="591"
-            column="36"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public MainFragmentRowsAdapter(RowsFragment fragment) {"
-        errorLine2="                                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="643"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void setAdapter(ObjectAdapter adapter) {"
-        errorLine2="                               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="648"
-            column="32"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
-        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="656"
-            column="50"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="661"
-            column="51"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                        final Presenter.ViewHolderTask rowHolderTask) {"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="668"
-            column="47"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public RowPresenter.ViewHolder findRowViewHolderByPosition(int position) {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/RowsFragment.java"
-            line="683"
-            column="16"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BrowseSupportFragment.MainFragmentAdapter getMainFragmentAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="63"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BrowseSupportFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="71"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected VerticalGridView findGridViewFromRoot(View view) {"
         errorLine2="              ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="164"
-            column="15"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected VerticalGridView findGridViewFromRoot(View view) {"
         errorLine2="                                                    ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="164"
-            column="53"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="174"
-            column="46"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BaseOnItemViewClickedListener getOnItemViewClickedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="185"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="219"
-            column="47"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BaseOnItemViewSelectedListener getOnItemViewSelectedListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="236"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RowPresenter.ViewHolder getRowViewHolder(int position) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="269"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            final Presenter.ViewHolderTask rowHolderTask) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="503"
-            column="19"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RowPresenter.ViewHolder findRowViewHolderByPosition(int position) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="576"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MainFragmentAdapter(RowsSupportFragment fragment) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="586"
-            column="36"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MainFragmentRowsAdapter(RowsSupportFragment fragment) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="636"
-            column="40"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setAdapter(ObjectAdapter adapter) {"
         errorLine2="                               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="641"
-            column="32"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="649"
-            column="50"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="654"
-            column="51"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                                        final Presenter.ViewHolderTask rowHolderTask) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="661"
-            column="47"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public RowPresenter.ViewHolder findRowViewHolderByPosition(int position) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"
-            line="676"
-            column="16"/>
+            file="src/main/java/androidx/leanback/app/RowsSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ScaleFrameLayout(Context context) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"
-            line="42"
-            column="29"/>
+            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ScaleFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"
-            line="46"
-            column="29"/>
+            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ScaleFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"
-            line="46"
-            column="46"/>
+            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ScaleFrameLayout(Context context, AttributeSet attrs,"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"
-            line="50"
-            column="29"/>
+            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ScaleFrameLayout(Context context, AttributeSet attrs,"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"
-            line="50"
-            column="46"/>
+            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
-        errorLine2="                        ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"
-            line="80"
-            column="25"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"
-            line="80"
-            column="48"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean addViewInLayout (View child, int index, ViewGroup.LayoutParams params,"
-        errorLine2="                                       ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"
-            line="87"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean addViewInLayout (View child, int index, ViewGroup.LayoutParams params,"
-        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"
-            line="87"
-            column="63"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setForeground(Drawable d) {"
-        errorLine2="                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ScaleFrameLayout.java"
-            line="206"
-            column="31"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onSearchQueryChange(String query);"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="85"
-            column="41"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onSearchQuerySubmit(String query);"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="95"
-            column="41"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onKeyboardDismiss(String query);"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="102"
-            column="39"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SearchBar(Context context) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="149"
-            column="22"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SearchBar(Context context, AttributeSet attrs) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="153"
-            column="22"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SearchBar(Context context, AttributeSet attrs) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="153"
-            column="39"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SearchBar(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="157"
-            column="22"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SearchBar(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="157"
-            column="39"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSearchBarListener(SearchBarListener listener) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="346"
-            column="38"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSearchQuery(String query) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="354"
-            column="32"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(String title) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="376"
-            column="26"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSearchAffordanceColors(SearchOrbView.Colors colors) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="386"
-            column="43"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSearchAffordanceColorsInListening(SearchOrbView.Colors colors) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="397"
-            column="54"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public String getTitle() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="406"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getHint() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="413"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setBadgeDrawable(Drawable drawable) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="421"
-            column="34"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getBadgeDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="436"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void displayCompletions(List&lt;String> completions) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="445"
-            column="36"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void displayCompletions(CompletionInfo[] completions) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="461"
-            column="36"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSpeechRecognizer(SpeechRecognizer recognizer) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="471"
-            column="37"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSpeechRecognitionCallback(SpeechRecognitionCallback request) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="494"
-            column="46"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPermissionListener(SearchBarPermissionListener listener) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchBar.java"
-            line="589"
-            column="39"/>
+            file="src/main/java/androidx/leanback/widget/SearchBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SearchEditText(Context context) {"
         errorLine2="                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchEditText.java"
-            line="42"
-            column="27"/>
+            file="src/main/java/androidx/leanback/widget/SearchEditText.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SearchEditText(Context context, AttributeSet attrs) {"
         errorLine2="                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchEditText.java"
-            line="46"
-            column="27"/>
+            file="src/main/java/androidx/leanback/widget/SearchEditText.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SearchEditText(Context context, AttributeSet attrs) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchEditText.java"
-            line="46"
-            column="44"/>
+            file="src/main/java/androidx/leanback/widget/SearchEditText.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SearchEditText(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchEditText.java"
-            line="50"
-            column="27"/>
+            file="src/main/java/androidx/leanback/widget/SearchEditText.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SearchEditText(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchEditText.java"
-            line="50"
-            column="44"/>
+            file="src/main/java/androidx/leanback/widget/SearchEditText.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onKeyPreIme(int keyCode, KeyEvent event) {"
-        errorLine2="                                            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchEditText.java"
-            line="55"
-            column="45"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnKeyboardDismissListener(OnKeyboardDismissListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SearchEditText.java"
-            line="79"
-            column="46"/>
+            file="src/main/java/androidx/leanback/widget/SearchEditText.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ObjectAdapter getResultsAdapter();"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="102"
-            column="16"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onQueryTextChange(String newQuery);"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="116"
-            column="42"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean onQueryTextSubmit(String query);"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="125"
-            column="42"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onRequestPermissionsResult(int requestCode, String[] permissions,"
         errorLine2="                                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="246"
-            column="61"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                                           int[] grantResults) {"
         errorLine2="                                           ~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="247"
-            column="44"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Bundle createArgs(Bundle args, String query) {"
         errorLine2="                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="259"
-            column="19"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Bundle createArgs(Bundle args, String query) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="259"
-            column="37"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Bundle createArgs(Bundle args, String query) {"
         errorLine2="                                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="259"
-            column="50"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Bundle createArgs(Bundle args, String query, String title)  {"
         errorLine2="                  ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="263"
-            column="19"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Bundle createArgs(Bundle args, String query, String title)  {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="263"
-            column="37"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Bundle createArgs(Bundle args, String query, String title)  {"
         errorLine2="                                                 ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="263"
-            column="50"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Bundle createArgs(Bundle args, String query, String title)  {"
         errorLine2="                                                               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="263"
-            column="64"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static SearchFragment newInstance(String query) {"
-        errorLine2="                  ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="281"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static SearchFragment newInstance(String query) {"
-        errorLine2="                                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="281"
-            column="46"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onCreate(Bundle savedInstanceState) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="289"
-            column="26"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="297"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="297"
-            column="30"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="297"
-            column="55"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                             Bundle savedInstanceState) {"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="298"
-            column="30"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public RowsFragment getRowsFragment() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="460"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSearchResultProvider(SearchResultProvider searchResultProvider) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="491"
-            column="41"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="504"
-            column="47"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="514"
-            column="46"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTitle(String title) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="528"
-            column="26"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public String getTitle() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="538"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setBadgeDrawable(Drawable drawable) {"
-        errorLine2="                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="549"
-            column="34"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getBadgeDrawable() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="559"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSearchAffordanceColors(SearchOrbView.Colors colors) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="571"
-            column="43"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSearchAffordanceColorsInListening(SearchOrbView.Colors colors) {"
-        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="582"
-            column="54"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void displayCompletions(List&lt;String> completions) {"
-        errorLine2="                                   ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="595"
-            column="36"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void displayCompletions(CompletionInfo[] completions) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="606"
-            column="36"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSpeechRecognitionCallback(SpeechRecognitionCallback callback) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="617"
-            column="46"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSearchQuery(String query, boolean submit) {"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="636"
-            column="32"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSearchQuery(Intent intent, boolean submit) {"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="657"
-            column="32"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Intent getRecognizerIntent() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="679"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SearchOrbView(Context context) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="148"
-            column="26"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SearchOrbView(Context context, AttributeSet attrs) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="152"
-            column="26"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SearchOrbView(Context context, AttributeSet attrs) {"
-        errorLine2="                                          ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="152"
-            column="43"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SearchOrbView(Context context, AttributeSet attrs, int defStyleAttr) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="157"
-            column="26"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SearchOrbView(Context context, AttributeSet attrs, int defStyleAttr) {"
-        errorLine2="                                          ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="157"
-            column="43"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onClick(View view) {"
-        errorLine2="                        ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="223"
-            column="25"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {"
-        errorLine2="                                                                    ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="243"
-            column="69"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOrbIcon(Drawable icon) {"
-        errorLine2="                           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="260"
-            column="28"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getOrbIcon() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="270"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnOrbClickedListener(OnClickListener listener) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="279"
-            column="41"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOrbColors(Colors colors) {"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="317"
-            column="30"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Colors getOrbColors() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SearchOrbView.java"
-            line="331"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ObjectAdapter getResultsAdapter();"
-        errorLine2="               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="97"
-            column="16"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public boolean onQueryTextChange(String newQuery);"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="111"
-            column="42"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public boolean onQueryTextSubmit(String query);"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="120"
-            column="42"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onRequestPermissionsResult(int requestCode, String[] permissions,"
-        errorLine2="                                                            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="241"
-            column="61"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                                           int[] grantResults) {"
-        errorLine2="                                           ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="242"
-            column="44"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Bundle createArgs(Bundle args, String query) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="254"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Bundle createArgs(Bundle args, String query) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="254"
-            column="37"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Bundle createArgs(Bundle args, String query) {"
-        errorLine2="                                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="254"
-            column="50"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Bundle createArgs(Bundle args, String query, String title)  {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="258"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Bundle createArgs(Bundle args, String query, String title)  {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="258"
-            column="37"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Bundle createArgs(Bundle args, String query, String title)  {"
-        errorLine2="                                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="258"
-            column="50"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Bundle createArgs(Bundle args, String query, String title)  {"
-        errorLine2="                                                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="258"
-            column="64"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static SearchSupportFragment newInstance(String query) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="276"
-            column="19"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static SearchSupportFragment newInstance(String query) {"
         errorLine2="                                                    ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="276"
-            column="53"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="284"
-            column="26"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="292"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="292"
-            column="30"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="292"
-            column="55"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                             Bundle savedInstanceState) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="293"
-            column="30"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RowsSupportFragment getRowsSupportFragment() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="455"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSearchResultProvider(SearchResultProvider searchResultProvider) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="486"
-            column="41"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="499"
-            column="47"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="509"
-            column="46"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(String title) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="523"
-            column="26"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public String getTitle() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="533"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setBadgeDrawable(Drawable drawable) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="544"
-            column="34"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getBadgeDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="554"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSearchAffordanceColors(SearchOrbView.Colors colors) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="566"
-            column="43"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSearchAffordanceColorsInListening(SearchOrbView.Colors colors) {"
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="577"
-            column="54"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void displayCompletions(List&lt;String> completions) {"
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="590"
-            column="36"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void displayCompletions(CompletionInfo[] completions) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="601"
-            column="36"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSpeechRecognitionCallback(SpeechRecognitionCallback callback) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="612"
-            column="46"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSearchQuery(String query, boolean submit) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="631"
-            column="32"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSearchQuery(Intent intent, boolean submit) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="652"
-            column="32"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Intent getRecognizerIntent() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"
-            line="674"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/SearchSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SectionRow(HeaderItem headerItem) {"
         errorLine2="                      ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SectionRow.java"
-            line="21"
-            column="23"/>
+            file="src/main/java/androidx/leanback/widget/SectionRow.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SectionRow(long id, String name) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SectionRow.java"
-            line="25"
-            column="32"/>
+            file="src/main/java/androidx/leanback/widget/SectionRow.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SectionRow(String name) {"
         errorLine2="                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SectionRow.java"
-            line="29"
-            column="23"/>
+            file="src/main/java/androidx/leanback/widget/SectionRow.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SeekBar(Context context, AttributeSet attrs) {"
         errorLine2="                   ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SeekBar.java"
-            line="77"
-            column="20"/>
+            file="src/main/java/androidx/leanback/widget/SeekBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SeekBar(Context context, AttributeSet attrs) {"
         errorLine2="                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SeekBar.java"
-            line="77"
-            column="37"/>
+            file="src/main/java/androidx/leanback/widget/SeekBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            int direction, Rect previouslyFocusedRect) {"
         errorLine2="                           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SeekBar.java"
-            line="118"
-            column="28"/>
+            file="src/main/java/androidx/leanback/widget/SeekBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onDraw(Canvas canvas) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SeekBar.java"
-            line="130"
-            column="27"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getAccessibilityClassName() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SeekBar.java"
-            line="242"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setAccessibilitySeekListener(AccessibilitySeekListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SeekBar.java"
-            line="246"
-            column="46"/>
+            file="src/main/java/androidx/leanback/widget/SeekBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean performAccessibilityAction(int action, Bundle arguments) {"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SeekBar.java"
-            line="251"
-            column="59"/>
+            file="src/main/java/androidx/leanback/widget/SeekBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    static public Settings getInstance(Context context) {"
         errorLine2="                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/system/Settings.java"
-            line="61"
-            column="19"/>
+            file="src/main/java/androidx/leanback/system/Settings.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    static public Settings getInstance(Context context) {"
         errorLine2="                                       ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/system/Settings.java"
-            line="61"
-            column="40"/>
+            file="src/main/java/androidx/leanback/system/Settings.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean getBoolean(String key) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/system/Settings.java"
-            line="97"
-            column="31"/>
+            file="src/main/java/androidx/leanback/system/Settings.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setBoolean(String key, boolean value) {"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/system/Settings.java"
-            line="105"
-            column="28"/>
+            file="src/main/java/androidx/leanback/system/Settings.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ShadowOverlayContainer(Context context) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"
-            line="86"
-            column="35"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ShadowOverlayContainer(Context context, AttributeSet attrs) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"
-            line="93"
-            column="35"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ShadowOverlayContainer(Context context, AttributeSet attrs) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"
-            line="93"
-            column="52"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ShadowOverlayContainer(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                  ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"
-            line="100"
-            column="35"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ShadowOverlayContainer(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"
-            line="100"
-            column="52"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void prepareParentForShadow(ViewGroup parent) {"
         errorLine2="                                              ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"
-            line="137"
-            column="47"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void draw(Canvas canvas) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"
-            line="245"
-            column="22"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void wrap(View view) {"
         errorLine2="                     ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"
-            line="279"
-            column="22"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getWrappedView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"
-            line="309"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayContainer.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder needsOverlay(boolean needsOverlay) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="88"
-            column="16"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder needsShadow(boolean needsShadow) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="98"
-            column="16"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder needsRoundedCorner(boolean needsRoundedCorner) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="108"
-            column="16"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder preferZOrder(boolean preferZOrder) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="121"
-            column="16"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder keepForegroundDrawable(boolean keepForegroundDrawable) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="134"
-            column="16"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder options(Options options) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="144"
-            column="16"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Builder options(Options options) {"
         errorLine2="                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="144"
-            column="32"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ShadowOverlayHelper build(Context context) {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="154"
-            column="16"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ShadowOverlayHelper build(Context context) {"
         errorLine2="                                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="154"
-            column="42"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Options roundedCornerRadius(int roundedCornerRadius){"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="210"
-            column="16"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Options dynamicShadowZ(float unfocusedZ, float focusedZ){"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="222"
-            column="16"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void prepareParentForShadow(ViewGroup parent) {"
         errorLine2="                                       ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="319"
-            column="40"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ShadowOverlayContainer createShadowOverlayContainer(Context context) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="351"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ShadowOverlayContainer createShadowOverlayContainer(Context context) {"
         errorLine2="                                                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="351"
-            column="64"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void setNoneWrapperOverlayColor(View view, int color) {"
         errorLine2="                                                  ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="363"
-            column="51"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOverlayColor(View view, int color) {"
         errorLine2="                                ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="376"
-            column="33"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onViewCreated(View view) {"
         errorLine2="                              ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="388"
-            column="31"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static void setNoneWrapperShadowFocusLevel(View view, float level) {"
         errorLine2="                                                      ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="411"
-            column="55"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setShadowFocusLevel(View view, float level) {"
         errorLine2="                                    ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"
-            line="418"
-            column="37"/>
+            file="src/main/java/androidx/leanback/widget/ShadowOverlayHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SinglePresenterSelector(Presenter presenter) {"
-        errorLine2="                                   ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SinglePresenterSelector.java"
-            line="27"
-            column="36"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter getPresenter(Object item) {"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SinglePresenterSelector.java"
-            line="32"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter getPresenter(Object item) {"
-        errorLine2="                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SinglePresenterSelector.java"
-            line="32"
-            column="35"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Presenter[] getPresenters() {"
-        errorLine2="           ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SinglePresenterSelector.java"
-            line="37"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SlideNoPropagation(Context context, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/SlideNoPropagation.java"
-            line="39"
-            column="31"/>
+            file="api21/androidx/leanback/transition/SlideNoPropagation.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SlideNoPropagation(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
-            file="api21/androidx/leanback/transition/SlideNoPropagation.java"
-            line="39"
-            column="48"/>
+            file="api21/androidx/leanback/transition/SlideNoPropagation.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SparseArrayObjectAdapter(PresenterSelector presenterSelector) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SparseArrayObjectAdapter.java"
-            line="16"
-            column="37"/>
+            file="src/main/java/androidx/leanback/widget/SparseArrayObjectAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SparseArrayObjectAdapter(Presenter presenter) {"
         errorLine2="                                    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SparseArrayObjectAdapter.java"
-            line="23"
-            column="37"/>
+            file="src/main/java/androidx/leanback/widget/SparseArrayObjectAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Object get(int position) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/SparseArrayObjectAdapter.java"
-            line="40"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int indexOf(Object item) {"
         errorLine2="                       ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SparseArrayObjectAdapter.java"
-            line="50"
-            column="24"/>
+            file="src/main/java/androidx/leanback/widget/SparseArrayObjectAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void set(int key, Object item) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SparseArrayObjectAdapter.java"
-            line="81"
-            column="30"/>
+            file="src/main/java/androidx/leanback/widget/SparseArrayObjectAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Object lookup(int key) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SparseArrayObjectAdapter.java"
-            line="123"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/SparseArrayObjectAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SpeechOrbView(Context context) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"
-            line="21"
-            column="26"/>
+            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SpeechOrbView(Context context, AttributeSet attrs) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"
-            line="25"
-            column="26"/>
+            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SpeechOrbView(Context context, AttributeSet attrs) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"
-            line="25"
-            column="43"/>
+            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SpeechOrbView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                         ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"
-            line="29"
-            column="26"/>
+            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SpeechOrbView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"
-            line="29"
-            column="43"/>
+            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setListeningOrbColors(Colors colors) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"
-            line="56"
-            column="39"/>
+            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setNotListeningOrbColors(Colors colors) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"
-            line="65"
-            column="42"/>
+            file="src/main/java/androidx/leanback/widget/SpeechOrbView.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Event(String name) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="60"
-            column="22"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Condition(String name) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="71"
-            column="26"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public State(String name) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="153"
-            column="22"/>
+            file="src/main/java/androidx/leanback/util/StateMachine.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public State(String name, boolean branchStart, boolean branchEnd) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="164"
-            column="22"/>
+            file="src/main/java/androidx/leanback/util/StateMachine.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addState(State state) {"
-        errorLine2="                         ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="268"
-            column="26"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addTransition(State fromState, State toState, Event event) {"
-        errorLine2="                              ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="280"
-            column="31"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addTransition(State fromState, State toState, Event event) {"
-        errorLine2="                                               ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="280"
-            column="48"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addTransition(State fromState, State toState, Event event) {"
-        errorLine2="                                                              ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="280"
-            column="63"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addTransition(State fromState, State toState, Condition condition) {"
-        errorLine2="                              ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="291"
-            column="31"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addTransition(State fromState, State toState, Condition condition) {"
-        errorLine2="                                               ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="291"
-            column="48"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addTransition(State fromState, State toState, Condition condition) {"
-        errorLine2="                                                              ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="291"
-            column="63"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addTransition(State fromState, State toState) {"
-        errorLine2="                              ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="302"
-            column="31"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addTransition(State fromState, State toState) {"
-        errorLine2="                                               ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="302"
-            column="48"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void fireEvent(Event event) {"
-        errorLine2="                          ~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/util/StateMachine.java"
-            line="337"
-            column="27"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    void setSurfaceHolderCallback(SurfaceHolder.Callback callback);"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/media/SurfaceHolderGlueHost.java"
-            line="32"
-            column="35"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ThumbsBar(Context context, AttributeSet attrs) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"
-            line="51"
-            column="22"/>
+            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ThumbsBar(Context context, AttributeSet attrs) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"
-            line="51"
-            column="39"/>
+            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ThumbsBar(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                     ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"
-            line="55"
-            column="22"/>
+            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ThumbsBar(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                      ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"
-            line="55"
-            column="39"/>
+            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected View createThumbView(ViewGroup parent) {"
         errorLine2="              ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"
-            line="269"
-            column="15"/>
+            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected View createThumbView(ViewGroup parent) {"
         errorLine2="                                   ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"
-            line="269"
-            column="36"/>
+            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Bitmap getThumbBitmap(int index) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"
-            line="287"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setThumbBitmap(int index, Bitmap bitmap) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"
-            line="294"
-            column="43"/>
+            file="src/main/java/androidx/leanback/widget/ThumbsBar.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TimePicker(Context context, AttributeSet attrs) {"
         errorLine2="                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"
-            line="90"
-            column="23"/>
+            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TimePicker(Context context, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"
-            line="90"
-            column="40"/>
+            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TimePicker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                      ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"
-            line="105"
-            column="23"/>
+            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TimePicker(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"
-            line="105"
-            column="40"/>
+            file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TitleHelper(ViewGroup sceneRoot, View titleView) {"
         errorLine2="                       ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleHelper.java"
-            line="59"
-            column="24"/>
+            file="src/main/java/androidx/leanback/widget/TitleHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public TitleHelper(ViewGroup sceneRoot, View titleView) {"
         errorLine2="                                            ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleHelper.java"
-            line="59"
-            column="45"/>
+            file="src/main/java/androidx/leanback/widget/TitleHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewGroup getSceneRoot() {"
         errorLine2="           ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleHelper.java"
-            line="101"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/TitleHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View getTitleView() {"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleHelper.java"
-            line="108"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/TitleHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public BrowseFrameLayout.OnFocusSearchListener getOnFocusSearchListener() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleHelper.java"
-            line="117"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/TitleHelper.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public TitleView(Context context) {"
-        errorLine2="                     ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="94"
-            column="22"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public TitleView(Context context, AttributeSet attrs) {"
-        errorLine2="                     ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="98"
-            column="22"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public TitleView(Context context, AttributeSet attrs) {"
-        errorLine2="                                      ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="98"
-            column="39"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public TitleView(Context context, AttributeSet attrs, int defStyleAttr) {"
-        errorLine2="                     ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="102"
-            column="22"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public TitleView(Context context, AttributeSet attrs, int defStyleAttr) {"
-        errorLine2="                                      ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="102"
-            column="39"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTitle(CharSequence titleText) {"
-        errorLine2="                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="119"
-            column="26"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getTitle() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="127"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setBadgeDrawable(Drawable drawable) {"
-        errorLine2="                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="135"
-            column="34"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable getBadgeDrawable() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="143"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnSearchClickedListener(View.OnClickListener listener) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="150"
-            column="44"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View getSearchAffordanceView() {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="159"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSearchAffordanceColors(SearchOrbView.Colors colors) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="166"
-            column="43"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SearchOrbView.Colors getSearchAffordanceColors() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="173"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public TitleViewAdapter getTitleViewAdapter() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleView.java"
-            line="223"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        TitleViewAdapter getTitleViewAdapter();"
         errorLine2="        ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"
-            line="38"
-            column="9"/>
+            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTitle(CharSequence titleText) {"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"
-            line="49"
-            column="26"/>
+            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CharSequence getTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"
-            line="56"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setBadgeDrawable(Drawable drawable) {"
         errorLine2="                                 ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"
-            line="65"
-            column="34"/>
+            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getBadgeDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"
-            line="72"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract View getSearchAffordanceView();"
         errorLine2="                    ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"
-            line="80"
-            column="21"/>
+            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnSearchClickedListener(View.OnClickListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"
-            line="94"
-            column="44"/>
+            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSearchAffordanceColors(SearchOrbView.Colors colors) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"
-            line="107"
-            column="43"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SearchOrbView.Colors getSearchAffordanceColors() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"
-            line="116"
-            column="12"/>
+            file="src/main/java/androidx/leanback/widget/TitleViewAdapter.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract Rect onGetEpicenter(Object transition);"
         errorLine2="                    ~~~~">
         <location
-            file="common/androidx/leanback/transition/TransitionEpicenterCallback.java"
-            line="35"
-            column="21"/>
+            file="common/androidx/leanback/transition/TransitionEpicenterCallback.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract Rect onGetEpicenter(Object transition);"
         errorLine2="                                        ~~~~~~">
         <location
-            file="common/androidx/leanback/transition/TransitionEpicenterCallback.java"
-            line="35"
-            column="41"/>
+            file="common/androidx/leanback/transition/TransitionEpicenterCallback.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getSharedElementEnterTransition(Window window) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="64"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getSharedElementEnterTransition(Window window) {"
-        errorLine2="                                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="64"
-            column="58"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setSharedElementEnterTransition(Window window, Object transition) {"
-        errorLine2="                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="71"
-            column="56"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setSharedElementEnterTransition(Window window, Object transition) {"
-        errorLine2="                                                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="71"
-            column="71"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getSharedElementReturnTransition(Window window) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="77"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getSharedElementReturnTransition(Window window) {"
-        errorLine2="                                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="77"
-            column="59"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setSharedElementReturnTransition(Window window, Object transition) {"
-        errorLine2="                                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="84"
-            column="57"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setSharedElementReturnTransition(Window window, Object transition) {"
-        errorLine2="                                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="84"
-            column="72"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getSharedElementExitTransition(Window window) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="90"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getSharedElementExitTransition(Window window) {"
-        errorLine2="                                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="90"
-            column="57"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getSharedElementReenterTransition(Window window) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="97"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getSharedElementReenterTransition(Window window) {"
-        errorLine2="                                                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="97"
-            column="60"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getEnterTransition(Window window) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="104"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getEnterTransition(Window window) {"
-        errorLine2="                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="104"
-            column="45"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setEnterTransition(Window window, Object transition) {"
-        errorLine2="                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="111"
-            column="43"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setEnterTransition(Window window, Object transition) {"
-        errorLine2="                                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="111"
-            column="58"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getReturnTransition(Window window) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="117"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getReturnTransition(Window window) {"
-        errorLine2="                                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="117"
-            column="46"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setReturnTransition(Window window, Object transition) {"
-        errorLine2="                                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="124"
-            column="44"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setReturnTransition(Window window, Object transition) {"
-        errorLine2="                                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="124"
-            column="59"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getExitTransition(Window window) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="130"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getExitTransition(Window window) {"
-        errorLine2="                                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="130"
-            column="44"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getReenterTransition(Window window) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="137"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object getReenterTransition(Window window) {"
-        errorLine2="                                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="137"
-            column="47"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createScene(ViewGroup sceneRoot, Runnable r) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="144"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createScene(ViewGroup sceneRoot, Runnable r) {"
-        errorLine2="                                     ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="144"
-            column="38"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createScene(ViewGroup sceneRoot, Runnable r) {"
-        errorLine2="                                                          ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="144"
-            column="59"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createChangeBounds(boolean reparent) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="153"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createChangeTransform() {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="162"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setChangeBoundsStartDelay(Object changeBounds, View view, int startDelay) {"
-        errorLine2="                                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="169"
-            column="50"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setChangeBoundsStartDelay(Object changeBounds, View view, int startDelay) {"
-        errorLine2="                                                                      ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="169"
-            column="71"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setChangeBoundsStartDelay(Object changeBounds, int viewId, int startDelay) {"
-        errorLine2="                                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="175"
-            column="50"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setChangeBoundsStartDelay(Object changeBounds, String className,"
-        errorLine2="                                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="181"
-            column="50"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setChangeBoundsStartDelay(Object changeBounds, String className,"
-        errorLine2="                                                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="181"
-            column="71"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setChangeBoundsDefaultStartDelay(Object changeBounds, int startDelay) {"
-        errorLine2="                                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="188"
-            column="57"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createTransitionSet(boolean sequential) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="194"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createSlide(int slideEdge) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="204"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createScale() {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="213"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void addTransition(Object transitionSet, Object transition) {"
-        errorLine2="                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="223"
-            column="38"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void addTransition(Object transitionSet, Object transition) {"
-        errorLine2="                                                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="223"
-            column="60"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void exclude(Object transition, int targetId, boolean exclude) {"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="229"
-            column="32"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void exclude(Object transition, View targetView, boolean exclude) {"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="235"
-            column="32"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void exclude(Object transition, View targetView, boolean exclude) {"
-        errorLine2="                                                  ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="235"
-            column="51"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void excludeChildren(Object transition, int targetId, boolean exclude) {"
-        errorLine2="                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="241"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void excludeChildren(Object transition, View targetView, boolean exclude) {"
-        errorLine2="                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="247"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void excludeChildren(Object transition, View targetView, boolean exclude) {"
-        errorLine2="                                                          ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="247"
-            column="59"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void include(Object transition, int targetId) {"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="253"
-            column="32"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void include(Object transition, View targetView) {"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="259"
-            column="32"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void include(Object transition, View targetView) {"
-        errorLine2="                                                  ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="259"
-            column="51"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setStartDelay(Object transition, long startDelay) {"
-        errorLine2="                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="265"
-            column="38"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setDuration(Object transition, long duration) {"
-        errorLine2="                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="271"
-            column="36"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createAutoTransition() {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="277"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createFadeTransition(int fadeMode) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="284"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void addTransitionListener(Object transition, final TransitionListener listener) {"
-        errorLine2="                                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="291"
-            column="46"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void addTransitionListener(Object transition, final TransitionListener listener) {"
-        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="291"
-            column="71"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void removeTransitionListener(Object transition, TransitionListener listener) {"
-        errorLine2="                                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="333"
-            column="49"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void removeTransitionListener(Object transition, TransitionListener listener) {"
-        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="333"
-            column="68"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void runTransition(Object scene, Object transition) {"
-        errorLine2="                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="349"
-            column="38"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void runTransition(Object scene, Object transition) {"
-        errorLine2="                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="349"
-            column="52"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setInterpolator(Object transition, Object timeInterpolator) {"
-        errorLine2="                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="371"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setInterpolator(Object transition, Object timeInterpolator) {"
-        errorLine2="                                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="371"
-            column="59"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void addTarget(Object transition, View view) {"
-        errorLine2="                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="377"
-            column="34"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void addTarget(Object transition, View view) {"
-        errorLine2="                                                    ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="377"
-            column="53"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createDefaultInterpolator(Context context) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="383"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createDefaultInterpolator(Context context) {"
-        errorLine2="                                                   ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="383"
-            column="52"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object loadTransition(Context context, int resId) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="391"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object loadTransition(Context context, int resId) {"
-        errorLine2="                                        ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="391"
-            column="41"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setEnterTransition(android.app.Fragment fragment, Object transition) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="399"
-            column="43"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setEnterTransition(android.app.Fragment fragment, Object transition) {"
-        errorLine2="                                                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="399"
-            column="74"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setExitTransition(android.app.Fragment fragment, Object transition) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="406"
-            column="42"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setExitTransition(android.app.Fragment fragment, Object transition) {"
-        errorLine2="                                                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="406"
-            column="73"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setSharedElementEnterTransition(android.app.Fragment fragment,"
-        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="413"
-            column="56"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Object transition) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="414"
-            column="13"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void addSharedElement(android.app.FragmentTransaction ft,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="421"
-            column="41"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            View view, String transitionName) {"
-        errorLine2="            ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="422"
-            column="13"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            View view, String transitionName) {"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="422"
-            column="24"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createFadeAndShortSlide(int edge) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="428"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Object createFadeAndShortSlide(int edge, float distance) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="435"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void beginDelayedTransition(ViewGroup sceneRoot, Object transitionObject) {"
-        errorLine2="                                              ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="444"
-            column="47"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void beginDelayedTransition(ViewGroup sceneRoot, Object transitionObject) {"
-        errorLine2="                                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="444"
-            column="68"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setTransitionGroup(ViewGroup viewGroup, boolean transitionGroup) {"
-        errorLine2="                                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="451"
-            column="43"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void setEpicenterCallback(Object transition,"
-        errorLine2="                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="457"
-            column="45"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            final TransitionEpicenterCallback callback) {"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
-            line="458"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected Object mImpl;"
         errorLine2="              ~~~~~~">
         <location
-            file="common/androidx/leanback/transition/TransitionListener.java"
-            line="27"
-            column="15"/>
+            file="common/androidx/leanback/transition/TransitionListener.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onTransitionStart(Object transition) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="common/androidx/leanback/transition/TransitionListener.java"
-            line="29"
-            column="35"/>
+            file="common/androidx/leanback/transition/TransitionListener.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onTransitionEnd(Object transition) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="common/androidx/leanback/transition/TransitionListener.java"
-            line="32"
-            column="33"/>
+            file="common/androidx/leanback/transition/TransitionListener.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onTransitionCancel(Object transition) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="common/androidx/leanback/transition/TransitionListener.java"
-            line="35"
-            column="36"/>
+            file="common/androidx/leanback/transition/TransitionListener.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onTransitionPause(Object transition) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="common/androidx/leanback/transition/TransitionListener.java"
-            line="38"
-            column="35"/>
+            file="common/androidx/leanback/transition/TransitionListener.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onTransitionResume(Object transition) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="common/androidx/leanback/transition/TransitionListener.java"
-            line="41"
-            column="36"/>
+            file="common/androidx/leanback/transition/TransitionListener.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static boolean isDescendant(ViewGroup parent, View child) {"
         errorLine2="                                       ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Util.java"
-            line="33"
-            column="40"/>
+            file="src/main/java/androidx/leanback/widget/Util.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static boolean isDescendant(ViewGroup parent, View child) {"
         errorLine2="                                                         ~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/Util.java"
-            line="33"
-            column="58"/>
+            file="src/main/java/androidx/leanback/widget/Util.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setGridPresenter(VerticalGridPresenter gridPresenter) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="84"
-            column="34"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public VerticalGridPresenter getGridPresenter() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="98"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
-        errorLine2="                           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="105"
-            column="28"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ObjectAdapter getAdapter() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="113"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="145"
-            column="47"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="171"
-            column="46"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public OnItemViewClickedListener getOnItemViewClickedListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="181"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="186"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="186"
-            column="30"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="186"
-            column="55"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="187"
-            column="13"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected Object createEntranceTransition() {"
-        errorLine2="              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="250"
-            column="15"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridFragment.java"
-            line="256"
-            column="42"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder(VerticalGridView view) {"
-        errorLine2="                          ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="84"
-            column="27"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public VerticalGridView getGridView() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="89"
-            column="16"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean isUsingZOrder(Context context) {"
-        errorLine2="                                 ~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="211"
-            column="34"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="                 ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="234"
-            column="18"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final ViewHolder onCreateViewHolder(ViewGroup parent) {"
-        errorLine2="                                               ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="234"
-            column="48"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ViewHolder createGridViewHolder(ViewGroup parent) {"
-        errorLine2="              ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="248"
-            column="15"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ViewHolder createGridViewHolder(ViewGroup parent) {"
-        errorLine2="                                              ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="248"
-            column="47"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void initializeGridViewHolder(ViewHolder vh) {"
-        errorLine2="                                            ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="261"
-            column="45"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ShadowOverlayHelper.Options createShadowOverlayOptions() {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="329"
-            column="15"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="334"
-            column="34"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
-        errorLine2="                                                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="334"
-            column="67"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="342"
-            column="36"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="353"
-            column="53"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final OnItemViewSelectedListener getOnItemViewSelectedListener() {"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="360"
-            column="18"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
-        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="370"
-            column="52"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final OnItemViewClickedListener getOnItemViewClickedListener() {"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="377"
-            column="18"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setEntranceTransitionState(VerticalGridPresenter.ViewHolder holder,"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/widget/VerticalGridPresenter.java"
-            line="402"
-            column="44"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setGridPresenter(VerticalGridPresenter gridPresenter) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="79"
-            column="34"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public VerticalGridPresenter getGridPresenter() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="93"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setAdapter(ObjectAdapter adapter) {"
-        errorLine2="                           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="100"
-            column="28"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ObjectAdapter getAdapter() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="108"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="140"
-            column="47"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="166"
-            column="46"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public OnItemViewClickedListener getOnItemViewClickedListener() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="176"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="181"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="181"
-            column="30"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="181"
-            column="55"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="182"
-            column="13"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected Object createEntranceTransition() {"
-        errorLine2="              ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="245"
-            column="15"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void runEntranceTransition(Object entranceTransition) {"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VerticalGridSupportFragment.java"
-            line="251"
-            column="42"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onCreateView("
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/VideoFragment.java"
-            line="46"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/VideoFragment.java"
-            line="47"
-            column="13"/>
+            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/VideoFragment.java"
-            line="47"
-            column="38"/>
+            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/VideoFragment.java"
-            line="47"
-            column="59"/>
+            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSurfaceHolderCallback(SurfaceHolder.Callback callback) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/VideoFragment.java"
-            line="84"
-            column="42"/>
+            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SurfaceView getSurfaceView() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/VideoFragment.java"
-            line="115"
-            column="12"/>
+            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public VideoFragmentGlueHost(VideoFragment fragment) {"
-        errorLine2="                                 ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VideoFragmentGlueHost.java"
-            line="36"
-            column="34"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSurfaceHolderCallback(SurfaceHolder.Callback callback) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VideoFragmentGlueHost.java"
-            line="47"
-            column="42"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onCreateView("
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"
-            line="41"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
-        errorLine2="            ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"
-            line="42"
-            column="13"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
-        errorLine2="                                     ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"
-            line="42"
-            column="38"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
-        errorLine2="                                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"
-            line="42"
-            column="59"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setSurfaceHolderCallback(SurfaceHolder.Callback callback) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"
-            line="79"
-            column="42"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SurfaceView getSurfaceView() {"
-        errorLine2="           ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/leanback/app/VideoSupportFragment.java"
-            line="110"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public VideoSupportFragmentGlueHost(VideoSupportFragment fragment) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/VideoSupportFragmentGlueHost.java"
-            line="31"
-            column="41"/>
+            file="src/main/java/androidx/leanback/app/VideoSupportFragmentGlueHost.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSurfaceHolderCallback(SurfaceHolder.Callback callback) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/app/VideoSupportFragmentGlueHost.java"
-            line="42"
-            column="42"/>
+            file="src/main/java/androidx/leanback/app/VideoSupportFragmentGlueHost.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public VideoSurfaceView(Context context) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/VideoSurfaceView.java"
-            line="34"
-            column="29"/>
+            file="src/main/java/androidx/leanback/widget/VideoSurfaceView.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public VideoSurfaceView(Context context, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/VideoSurfaceView.java"
-            line="38"
-            column="29"/>
+            file="src/main/java/androidx/leanback/widget/VideoSurfaceView.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public VideoSurfaceView(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/VideoSurfaceView.java"
-            line="38"
-            column="46"/>
+            file="src/main/java/androidx/leanback/widget/VideoSurfaceView.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public VideoSurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/VideoSurfaceView.java"
-            line="42"
-            column="29"/>
+            file="src/main/java/androidx/leanback/widget/VideoSurfaceView.java"/>
     </issue>
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public VideoSurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/leanback/widget/VideoSurfaceView.java"
-            line="42"
-            column="46"/>
+            file="src/main/java/androidx/leanback/widget/VideoSurfaceView.java"/>
     </issue>
 
 </issues>
diff --git a/libraryversions.toml b/libraryversions.toml
index f0cab5c..dcef670 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -1,30 +1,30 @@
 [versions]
-ACTIVITY = "1.7.0-alpha01"
+ACTIVITY = "1.6.0-beta01"
 ADS_IDENTIFIER = "1.0.0-alpha05"
-ANNOTATION = "1.5.0-alpha01"
-ANNOTATION_EXPERIMENTAL = "1.3.0-alpha01"
-APPCOMPAT = "1.5.0-rc01"
-APPSEARCH = "1.0.0-alpha05"
+ANNOTATION = "1.5.0-alpha02"
+ANNOTATION_EXPERIMENTAL = "1.3.0-alpha02"
+APPCOMPAT = "1.6.0-alpha06"
+APPSEARCH = "1.1.0-alpha01"
 ARCH_CORE = "2.2.0-alpha01"
 ASYNCLAYOUTINFLATER = "1.1.0-alpha01"
 AUTOFILL = "1.2.0-beta02"
-BENCHMARK = "1.2.0-alpha01"
+BENCHMARK = "1.2.0-alpha02"
 BIOMETRIC = "1.2.0-alpha05"
 BLUETOOTH = "1.0.0-alpha01"
 BROWSER = "1.5.0-alpha01"
 BUILDSRC_TESTS = "1.0.0-alpha01"
-CAMERA = "1.2.0-alpha04"
+CAMERA = "1.2.0-alpha05"
 CAMERA_PIPE = "1.0.0-alpha01"
 CARDVIEW = "1.1.0-alpha01"
-CAR_APP = "1.3.0-alpha01"
-COLLECTION = "1.3.0-alpha02"
-COMPOSE = "1.3.0-alpha02"
+CAR_APP = "1.3.0-alpha02"
+COLLECTION = "1.3.0-alpha03"
+COMPOSE = "1.3.0-alpha03"
 COMPOSE_COMPILER = "1.3.0-rc01"
-COMPOSE_MATERIAL3 = "1.0.0-alpha15"
+COMPOSE_MATERIAL3 = "1.0.0-alpha16"
 COMPOSE_RUNTIME_TRACING = "1.0.0-alpha01"
 CONTENTPAGER = "1.1.0-alpha01"
 COORDINATORLAYOUT = "1.3.0-alpha01"
-CORE = "1.9.0-alpha04"
+CORE = "1.9.0-alpha05"
 CORE_ANIMATION = "1.0.0-beta02"
 CORE_ANIMATION_TESTING = "1.0.0-beta01"
 CORE_APPDIGEST = "1.0.0-alpha01"
@@ -45,15 +45,16 @@
 DYNAMICANIMATION = "1.1.0-alpha04"
 DYNAMICANIMATION_KTX = "1.0.0-alpha04"
 EMOJI = "1.2.0-alpha03"
-EMOJI2 = "1.2.0-rc01"
+EMOJI2 = "1.3.0-alpha01"
 ENTERPRISE = "1.1.0-rc01"
 EXIFINTERFACE = "1.4.0-alpha01"
-FRAGMENT = "1.6.0-alpha01"
+FRAGMENT = "1.6.0-alpha02"
 FUTURES = "1.2.0-alpha01"
 GLANCE = "1.0.0-alpha04"
 GLANCE_TEMPLATE = "1.0.0-alpha01"
+GRAPHICS = "1.0.0-alpha01"
 GRIDLAYOUT = "1.1.0-alpha01"
-HEALTH_CONNECT_CLIENT = "1.0.0-alpha03"
+HEALTH_CONNECT_CLIENT = "1.0.0-alpha04"
 HEALTH_SERVICES_CLIENT = "1.0.0-beta01"
 HEIFWRITER = "1.1.0-alpha02"
 HILT = "1.1.0-alpha01"
@@ -95,7 +96,7 @@
 SECURITY_APP_AUTHENTICATOR_TESTING = "1.0.0-alpha02"
 SECURITY_BIOMETRIC = "1.0.0-alpha01"
 SECURITY_IDENTITY_CREDENTIAL = "1.0.0-alpha04"
-SHARETARGET = "1.2.0-rc02"
+SHARETARGET = "1.3.0-alpha01"
 SLICE = "1.1.0-alpha02"
 SLICE_BENCHMARK = "1.1.0-alpha02"
 SLICE_BUILDERS_KTX = "1.0.0-alpha08"
@@ -121,19 +122,19 @@
 VIEWPAGER = "1.1.0-alpha02"
 VIEWPAGER2 = "1.2.0-alpha01"
 WEAR = "1.3.0-alpha03"
-WEAR_COMPOSE = "1.1.0-alpha02"
+WEAR_COMPOSE = "1.1.0-alpha03"
 WEAR_INPUT = "1.2.0-alpha03"
 WEAR_INPUT_TESTING = "1.2.0-alpha03"
 WEAR_ONGOING = "1.1.0-alpha01"
 WEAR_PHONE_INTERACTIONS = "1.1.0-alpha04"
 WEAR_REMOTE_INTERACTIONS = "1.1.0-alpha01"
-WEAR_TILES = "1.1.0-beta01"
+WEAR_TILES = "1.1.0-beta02"
 WEAR_WATCHFACE = "1.2.0-alpha01"
 WEBKIT = "1.6.0-alpha01"
-WINDOW = "1.1.0-alpha03"
+WINDOW = "1.1.0-alpha04"
 WINDOW_EXTENSIONS = "1.1.0-alpha01"
 WINDOW_SIDECAR = "1.0.0-rc01"
-WORK = "2.8.0-alpha02"
+WORK = "2.8.0-alpha03"
 
 [groups]
 ACTIVITY = { group = "androidx.activity", atomicGroupVersion = "versions.ACTIVITY" }
@@ -180,6 +181,7 @@
 FRAGMENT = { group = "androidx.fragment", atomicGroupVersion = "versions.FRAGMENT" }
 GLANCE = { group = "androidx.glance", atomicGroupVersion = "versions.GLANCE" }
 GLANCE_TEMPLATE = { group = "androidx.template", atomicGroupVersion = "versions.GLANCE_TEMPLATE" }
+GRAPHICS = { group = "androidx.graphics", atomicGroupVersion = "versions.GRAPHICS" }
 GRIDLAYOUT = { group = "androidx.gridlayout", atomicGroupVersion = "versions.GRIDLAYOUT" }
 HEALTH = { group = "androidx.health" }
 HEIFWRITER = { group = "androidx.heifwriter", atomicGroupVersion = "versions.HEIFWRITER" }
diff --git a/lifecycle/lifecycle-extensions/lint-baseline.xml b/lifecycle/lifecycle-extensions/lint-baseline.xml
index 454300f..6c4d566 100644
--- a/lifecycle/lifecycle-extensions/lint-baseline.xml
+++ b/lifecycle/lifecycle-extensions/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="PrivateConstructorForUtilityClass"
diff --git a/lifecycle/lifecycle-livedata-ktx/api/2.5.0-beta01.txt b/lifecycle/lifecycle-livedata-ktx/api/2.5.0-beta01.txt
index 7bf189f..784f04e 100644
--- a/lifecycle/lifecycle-livedata-ktx/api/2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-livedata-ktx/api/2.5.0-beta01.txt
@@ -15,8 +15,8 @@
   }
 
   public interface LiveDataScope<T> {
-    method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle>);
+    method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle> p);
     method public T? getLatestValue();
     property public abstract T? latestValue;
   }
diff --git a/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.5.0-beta01.txt
index b542f27..7b099da 100644
--- a/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.5.0-beta01.txt
@@ -15,8 +15,8 @@
   }
 
   public interface LiveDataScope<T> {
-    method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle>);
+    method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle> p);
     method public T? getLatestValue();
     property public abstract T? latestValue;
   }
diff --git a/lifecycle/lifecycle-livedata-ktx/api/restricted_2.5.0-beta01.txt b/lifecycle/lifecycle-livedata-ktx/api/restricted_2.5.0-beta01.txt
index 7bf189f..784f04e 100644
--- a/lifecycle/lifecycle-livedata-ktx/api/restricted_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-livedata-ktx/api/restricted_2.5.0-beta01.txt
@@ -15,8 +15,8 @@
   }
 
   public interface LiveDataScope<T> {
-    method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle>);
+    method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle> p);
     method public T? getLatestValue();
     property public abstract T? latestValue;
   }
diff --git a/lifecycle/lifecycle-runtime-ktx/api/2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-ktx/api/2.5.0-beta01.txt
index 46720fe..13b58cd 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/2.5.0-beta01.txt
@@ -24,18 +24,18 @@
   }
 
   public final class PausingDispatcherKt {
-    method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+    method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
   }
 
   public final class RepeatOnLifecycleKt {
-    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
   }
 
   public final class ViewKt {
@@ -43,14 +43,14 @@
   }
 
   public final class WithLifecycleStateKt {
-    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
+    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
   }
 
 }
diff --git a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt
index 46720fe..13b58cd 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt
@@ -24,18 +24,18 @@
   }
 
   public final class PausingDispatcherKt {
-    method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+    method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
   }
 
   public final class RepeatOnLifecycleKt {
-    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
   }
 
   public final class ViewKt {
@@ -43,14 +43,14 @@
   }
 
   public final class WithLifecycleStateKt {
-    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
+    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
   }
 
 }
diff --git a/lifecycle/lifecycle-runtime-ktx/api/restricted_2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-ktx/api/restricted_2.5.0-beta01.txt
index 28a306d..f721a9e 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/restricted_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/restricted_2.5.0-beta01.txt
@@ -24,18 +24,18 @@
   }
 
   public final class PausingDispatcherKt {
-    method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
-    method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+    method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+    method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
   }
 
   public final class RepeatOnLifecycleKt {
-    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
   }
 
   public final class ViewKt {
@@ -43,16 +43,16 @@
   }
 
   public final class WithLifecycleStateKt {
-    method @kotlin.PublishedApi internal static suspend <R> Object? suspendWithStateAtLeastUnchecked(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, boolean dispatchNeeded, kotlinx.coroutines.CoroutineDispatcher lifecycleDispatcher, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
-    method @kotlin.PublishedApi internal static suspend inline <R> Object? withStateAtLeastUnchecked(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
+    method @kotlin.PublishedApi internal static suspend <R> Object? suspendWithStateAtLeastUnchecked(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, boolean dispatchNeeded, kotlinx.coroutines.CoroutineDispatcher lifecycleDispatcher, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+    method @kotlin.PublishedApi internal static suspend inline <R> Object? withStateAtLeastUnchecked(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
   }
 
 }
diff --git a/lifecycle/lifecycle-runtime-testing/api/2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-testing/api/2.5.0-beta01.txt
index dc2274c..8209a73 100644
--- a/lifecycle/lifecycle-runtime-testing/api/2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/2.5.0-beta01.txt
@@ -9,7 +9,7 @@
     method public androidx.lifecycle.LifecycleRegistry getLifecycle();
     method public int getObserverCount();
     method public void handleLifecycleEvent(androidx.lifecycle.Lifecycle.Event event);
-    method public void setCurrentState(androidx.lifecycle.Lifecycle.State);
+    method public void setCurrentState(androidx.lifecycle.Lifecycle.State value);
     property public final androidx.lifecycle.Lifecycle.State currentState;
     property public final int observerCount;
   }
diff --git a/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_2.5.0-beta01.txt
index dc2274c..8209a73 100644
--- a/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_2.5.0-beta01.txt
@@ -9,7 +9,7 @@
     method public androidx.lifecycle.LifecycleRegistry getLifecycle();
     method public int getObserverCount();
     method public void handleLifecycleEvent(androidx.lifecycle.Lifecycle.Event event);
-    method public void setCurrentState(androidx.lifecycle.Lifecycle.State);
+    method public void setCurrentState(androidx.lifecycle.Lifecycle.State value);
     property public final androidx.lifecycle.Lifecycle.State currentState;
     property public final int observerCount;
   }
diff --git a/lifecycle/lifecycle-runtime-testing/api/restricted_2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-testing/api/restricted_2.5.0-beta01.txt
index dc2274c..8209a73 100644
--- a/lifecycle/lifecycle-runtime-testing/api/restricted_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/restricted_2.5.0-beta01.txt
@@ -9,7 +9,7 @@
     method public androidx.lifecycle.LifecycleRegistry getLifecycle();
     method public int getObserverCount();
     method public void handleLifecycleEvent(androidx.lifecycle.Lifecycle.Event event);
-    method public void setCurrentState(androidx.lifecycle.Lifecycle.State);
+    method public void setCurrentState(androidx.lifecycle.Lifecycle.State value);
     property public final androidx.lifecycle.Lifecycle.State currentState;
     property public final int observerCount;
   }
diff --git a/lifecycle/lifecycle-runtime/src/test/java/NoPackageObserver.java b/lifecycle/lifecycle-runtime/src/test/java/NoPackageObserver.java
index 82fd7f5..60bc171 100644
--- a/lifecycle/lifecycle-runtime/src/test/java/NoPackageObserver.java
+++ b/lifecycle/lifecycle-runtime/src/test/java/NoPackageObserver.java
@@ -19,7 +19,7 @@
 import androidx.lifecycle.LifecycleObserver;
 
 @SuppressWarnings("deprecation")
-class NoPackageObserver implements LifecycleObserver {
+public class NoPackageObserver implements LifecycleObserver {
     @androidx.lifecycle.OnLifecycleEvent(ON_CREATE)
     void onCreate() {
     }
diff --git a/lifecycle/lifecycle-service/src/androidTest/java/androidx/lifecycle/ServiceLifecycleTest.java b/lifecycle/lifecycle-service/src/androidTest/java/androidx/lifecycle/ServiceLifecycleTest.java
index 1cab987..04055db 100644
--- a/lifecycle/lifecycle-service/src/androidTest/java/androidx/lifecycle/ServiceLifecycleTest.java
+++ b/lifecycle/lifecycle-service/src/androidTest/java/androidx/lifecycle/ServiceLifecycleTest.java
@@ -52,6 +52,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
+@SuppressWarnings("deprecation")
 @MediumTest
 @RunWith(AndroidJUnit4.class)
 public class ServiceLifecycleTest {
diff --git a/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_2.5.0-beta01.txt b/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_2.5.0-beta01.txt
index 8a4ed64..55cd478 100644
--- a/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_2.5.0-beta01.txt
@@ -13,9 +13,6 @@
 
   public final class SavedStateHandleSaverKt {
     method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T> T saveable(androidx.lifecycle.SavedStateHandle, String key, optional androidx.compose.runtime.saveable.Saver<T,?> saver, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T> androidx.compose.runtime.MutableState<T> saveable(androidx.lifecycle.SavedStateHandle, String key, androidx.compose.runtime.saveable.Saver<T,?> stateSaver, kotlin.jvm.functions.Function0<? extends androidx.compose.runtime.MutableState<T>> init);
-    method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T> kotlin.properties.PropertyDelegateProvider<java.lang.Object,kotlin.properties.ReadOnlyProperty<java.lang.Object,T>> saveable(androidx.lifecycle.SavedStateHandle, optional androidx.compose.runtime.saveable.Saver<T,?> saver, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T, M extends androidx.compose.runtime.MutableState<T>> kotlin.properties.PropertyDelegateProvider<java.lang.Object,kotlin.properties.ReadWriteProperty<java.lang.Object,T>> saveableMutableState(androidx.lifecycle.SavedStateHandle, optional androidx.compose.runtime.saveable.Saver<T,?> stateSaver, kotlin.jvm.functions.Function0<? extends M> init);
   }
 
   public final class ViewModelKt {
diff --git a/media/media/lint-baseline.xml b/media/media/lint-baseline.xml
index 2e83abe..3db7c43f 100644
--- a/media/media/lint-baseline.xml
+++ b/media/media/lint-baseline.xml
@@ -241,7 +241,9 @@
         errorLine1="        public void onProgressUpdate(String action, Bundle extras, Bundle data) {"
         errorLine2="                                                                   ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+            line="962"
+            column="68"/>
     </issue>
 
     <issue
@@ -250,7 +252,9 @@
         errorLine1="        public void onResult(String action, Bundle extras, Bundle resultData) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+            line="972"
+            column="30"/>
     </issue>
 
     <issue
@@ -259,7 +263,9 @@
         errorLine1="        public void onResult(String action, Bundle extras, Bundle resultData) {"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+            line="972"
+            column="45"/>
     </issue>
 
     <issue
@@ -268,7 +274,9 @@
         errorLine1="        public void onResult(String action, Bundle extras, Bundle resultData) {"
         errorLine2="                                                           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+            line="972"
+            column="60"/>
     </issue>
 
     <issue
@@ -277,7 +285,9 @@
         errorLine1="        public void onError(String action, Bundle extras, Bundle data) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+            line="983"
+            column="29"/>
     </issue>
 
     <issue
@@ -286,7 +296,9 @@
         errorLine1="        public void onError(String action, Bundle extras, Bundle data) {"
         errorLine2="                                           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+            line="983"
+            column="44"/>
     </issue>
 
     <issue
@@ -295,7 +307,9 @@
         errorLine1="        public void onError(String action, Bundle extras, Bundle data) {"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+            line="983"
+            column="59"/>
     </issue>
 
     <issue
@@ -304,7 +318,9 @@
         errorLine1="    public static boolean areSameOptions(Bundle options1, Bundle options2) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"/>
+            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
+            line="31"
+            column="42"/>
     </issue>
 
     <issue
@@ -313,7 +329,9 @@
         errorLine1="    public static boolean areSameOptions(Bundle options1, Bundle options2) {"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"/>
+            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
+            line="31"
+            column="59"/>
     </issue>
 
     <issue
@@ -322,7 +340,9 @@
         errorLine1="    public static boolean hasDuplicatedItems(Bundle options1, Bundle options2) {"
         errorLine2="                                             ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"/>
+            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
+            line="48"
+            column="46"/>
     </issue>
 
     <issue
@@ -331,7 +351,9 @@
         errorLine1="    public static boolean hasDuplicatedItems(Bundle options1, Bundle options2) {"
         errorLine2="                                                              ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"/>
+            file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
+            line="48"
+            column="63"/>
     </issue>
 
     <issue
@@ -340,7 +362,9 @@
         errorLine1="    public void attachToBaseContext(Context base) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1311"
+            column="37"/>
     </issue>
 
     <issue
@@ -349,7 +373,9 @@
         errorLine1="    public IBinder onBind(Intent intent) {"
         errorLine2="           ~~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1333"
+            column="12"/>
     </issue>
 
     <issue
@@ -358,7 +384,9 @@
         errorLine1="    public IBinder onBind(Intent intent) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1333"
+            column="27"/>
     </issue>
 
     <issue
@@ -367,7 +395,9 @@
         errorLine1="    public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {"
         errorLine2="                     ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1338"
+            column="22"/>
     </issue>
 
     <issue
@@ -376,7 +406,9 @@
         errorLine1="    public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {"
         errorLine2="                                        ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1338"
+            column="41"/>
     </issue>
 
     <issue
@@ -385,7 +417,9 @@
         errorLine1="    public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {"
         errorLine2="                                                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1338"
+            column="61"/>
     </issue>
 
     <issue
@@ -394,7 +428,9 @@
         errorLine1="    public void onSubscribe(String id, Bundle option) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1429"
+            column="29"/>
     </issue>
 
     <issue
@@ -403,7 +439,9 @@
         errorLine1="    public void onSubscribe(String id, Bundle option) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1429"
+            column="40"/>
     </issue>
 
     <issue
@@ -412,7 +450,9 @@
         errorLine1="    public void onUnsubscribe(String id) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1439"
+            column="31"/>
     </issue>
 
     <issue
@@ -421,7 +461,9 @@
         errorLine1="    public void onLoadItem(String itemId, @NonNull Result&lt;MediaBrowserCompat.MediaItem> result) {"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1460"
+            column="28"/>
     </issue>
 
     <issue
@@ -430,7 +472,9 @@
         errorLine1="    public void onSearch(@NonNull String query, Bundle extras,"
         errorLine2="                                                ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1486"
+            column="49"/>
     </issue>
 
     <issue
@@ -439,7 +483,9 @@
         errorLine1="    public void onCustomAction(@NonNull String action, Bundle extras,"
         errorLine2="                                                       ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1511"
+            column="56"/>
     </issue>
 
     <issue
@@ -448,7 +494,9 @@
         errorLine1="    public void setSessionToken(MediaSessionCompat.Token token) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1524"
+            column="33"/>
     </issue>
 
     <issue
@@ -457,7 +505,9 @@
         errorLine1="    public final Bundle getBrowserRootHints() {"
         errorLine2="                 ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1559"
+            column="18"/>
     </issue>
 
     <issue
@@ -466,7 +516,9 @@
         errorLine1="        public String getRootId() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1967"
+            column="16"/>
     </issue>
 
     <issue
@@ -475,7 +527,9 @@
         errorLine1="        public Bundle getExtras() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+            file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+            line="1974"
+            column="16"/>
     </issue>
 
     <issue
@@ -484,7 +538,9 @@
         errorLine1="    public void onReceive(Context context, Intent intent) {"
         errorLine2="                          ~~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="105"
+            column="27"/>
     </issue>
 
     <issue
@@ -493,7 +549,9 @@
         errorLine1="    public void onReceive(Context context, Intent intent) {"
         errorLine2="                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="105"
+            column="44"/>
     </issue>
 
     <issue
@@ -502,7 +560,9 @@
         errorLine1="    public static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent) {"
         errorLine2="                  ~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="190"
+            column="19"/>
     </issue>
 
     <issue
@@ -511,7 +571,9 @@
         errorLine1="    public static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent) {"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="190"
+            column="41"/>
     </issue>
 
     <issue
@@ -520,7 +582,9 @@
         errorLine1="    public static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent) {"
         errorLine2="                                                                               ~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="190"
+            column="80"/>
     </issue>
 
     <issue
@@ -529,7 +593,9 @@
         errorLine1="    public static PendingIntent buildMediaButtonPendingIntent(Context context,"
         errorLine2="                  ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="223"
+            column="19"/>
     </issue>
 
     <issue
@@ -538,7 +604,9 @@
         errorLine1="    public static PendingIntent buildMediaButtonPendingIntent(Context context,"
         errorLine2="                                                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="223"
+            column="63"/>
     </issue>
 
     <issue
@@ -547,7 +615,9 @@
         errorLine1="    public static PendingIntent buildMediaButtonPendingIntent(Context context,"
         errorLine2="                  ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="256"
+            column="19"/>
     </issue>
 
     <issue
@@ -556,7 +626,9 @@
         errorLine1="    public static PendingIntent buildMediaButtonPendingIntent(Context context,"
         errorLine2="                                                              ~~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="256"
+            column="63"/>
     </issue>
 
     <issue
@@ -565,7 +637,9 @@
         errorLine1="            ComponentName mbrComponent, @MediaKeyAction long action) {"
         errorLine2="            ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="257"
+            column="13"/>
     </issue>
 
     <issue
@@ -574,7 +648,9 @@
         errorLine1="    public static ComponentName getMediaButtonReceiverComponent(Context context) {"
         errorLine2="                  ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="282"
+            column="19"/>
     </issue>
 
     <issue
@@ -583,7 +659,9 @@
         errorLine1="    public static ComponentName getMediaButtonReceiverComponent(Context context) {"
         errorLine2="                                                                ~~~~~~~">
         <location
-            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+            file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+            line="282"
+            column="65"/>
     </issue>
 
     <issue
@@ -592,7 +670,9 @@
         errorLine1="            MediaControllerCompat mediaController) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="162"
+            column="13"/>
     </issue>
 
     <issue
@@ -601,7 +681,9 @@
         errorLine1="    public static MediaControllerCompat getMediaController(@NonNull Activity activity) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="181"
+            column="19"/>
     </issue>
 
     <issue
@@ -610,7 +692,9 @@
         errorLine1="    public MediaControllerCompat(Context context, @NonNull MediaSessionCompat session) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="224"
+            column="34"/>
     </issue>
 
     <issue
@@ -619,7 +703,9 @@
         errorLine1="    public MediaControllerCompat(Context context, @NonNull MediaSessionCompat.Token sessionToken) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="245"
+            column="34"/>
     </issue>
 
     <issue
@@ -628,7 +714,9 @@
         errorLine1="    public TransportControls getTransportControls() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="263"
+            column="12"/>
     </issue>
 
     <issue
@@ -637,7 +725,9 @@
         errorLine1="    public boolean dispatchMediaButtonEvent(KeyEvent keyEvent) {"
         errorLine2="                                            ~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="274"
+            column="45"/>
     </issue>
 
     <issue
@@ -646,7 +736,9 @@
         errorLine1="    public PlaybackStateCompat getPlaybackState() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="291"
+            column="12"/>
     </issue>
 
     <issue
@@ -655,7 +747,9 @@
         errorLine1="    public MediaMetadataCompat getMetadata() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="300"
+            column="12"/>
     </issue>
 
     <issue
@@ -664,7 +758,9 @@
         errorLine1="    public List&lt;QueueItem> getQueue() {"
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="310"
+            column="12"/>
     </issue>
 
     <issue
@@ -673,7 +769,9 @@
         errorLine1="    public void addQueueItem(MediaDescriptionCompat description) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="326"
+            column="30"/>
     </issue>
 
     <issue
@@ -682,7 +780,9 @@
         errorLine1="    public void addQueueItem(MediaDescriptionCompat description, int index) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="346"
+            column="30"/>
     </issue>
 
     <issue
@@ -691,7 +791,9 @@
         errorLine1="    public void removeQueueItem(MediaDescriptionCompat description) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="363"
+            column="33"/>
     </issue>
 
     <issue
@@ -700,7 +802,9 @@
         errorLine1="    public CharSequence getQueueTitle() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="393"
+            column="12"/>
     </issue>
 
     <issue
@@ -709,7 +813,9 @@
         errorLine1="    public Bundle getExtras() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="400"
+            column="12"/>
     </issue>
 
     <issue
@@ -718,7 +824,9 @@
         errorLine1="    public PlaybackInfo getPlaybackInfo() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="480"
+            column="12"/>
     </issue>
 
     <issue
@@ -727,7 +835,9 @@
         errorLine1="    public PendingIntent getSessionActivity() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="490"
+            column="12"/>
     </issue>
 
     <issue
@@ -736,7 +846,9 @@
         errorLine1="    public MediaSessionCompat.Token getSessionToken() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="499"
+            column="12"/>
     </issue>
 
     <issue
@@ -745,7 +857,9 @@
         errorLine1="    public void registerCallback(@NonNull Callback callback, Handler handler) {"
         errorLine2="                                                             ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="567"
+            column="62"/>
     </issue>
 
     <issue
@@ -754,7 +868,9 @@
         errorLine1="    public String getPackageName() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="645"
+            column="12"/>
     </issue>
 
     <issue
@@ -763,7 +879,9 @@
         errorLine1="    public Object getMediaController() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="675"
+            column="12"/>
     </issue>
 
     <issue
@@ -772,7 +890,9 @@
         errorLine1="        public void onSessionEvent(String event, Bundle extras) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="720"
+            column="36"/>
     </issue>
 
     <issue
@@ -781,7 +901,9 @@
         errorLine1="        public void onSessionEvent(String event, Bundle extras) {"
         errorLine2="                                                 ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="720"
+            column="50"/>
     </issue>
 
     <issue
@@ -790,7 +912,9 @@
         errorLine1="        public void onPlaybackStateChanged(PlaybackStateCompat state) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="728"
+            column="44"/>
     </issue>
 
     <issue
@@ -799,7 +923,9 @@
         errorLine1="        public void onMetadataChanged(MediaMetadataCompat metadata) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="737"
+            column="39"/>
     </issue>
 
     <issue
@@ -808,7 +934,9 @@
         errorLine1="        public void onQueueChanged(List&lt;QueueItem> queue) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="748"
+            column="36"/>
     </issue>
 
     <issue
@@ -817,7 +945,9 @@
         errorLine1="        public void onQueueTitleChanged(CharSequence title) {"
         errorLine2="                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="758"
+            column="41"/>
     </issue>
 
     <issue
@@ -826,7 +956,9 @@
         errorLine1="        public void onExtrasChanged(Bundle extras) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="767"
+            column="37"/>
     </issue>
 
     <issue
@@ -835,7 +967,9 @@
         errorLine1="        public void onAudioInfoChanged(PlaybackInfo info) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="775"
+            column="40"/>
     </issue>
 
     <issue
@@ -844,7 +978,9 @@
         errorLine1="        public IMediaControllerCallback getIControllerCallback() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="814"
+            column="16"/>
     </issue>
 
     <issue
@@ -853,7 +989,9 @@
         errorLine1="        public abstract void prepareFromMediaId(String mediaId, Bundle extras);"
         errorLine2="                                                ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1165"
+            column="49"/>
     </issue>
 
     <issue
@@ -862,7 +1000,9 @@
         errorLine1="        public abstract void prepareFromMediaId(String mediaId, Bundle extras);"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1165"
+            column="65"/>
     </issue>
 
     <issue
@@ -871,7 +1011,9 @@
         errorLine1="        public abstract void prepareFromSearch(String query, Bundle extras);"
         errorLine2="                                               ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1177"
+            column="48"/>
     </issue>
 
     <issue
@@ -880,7 +1022,9 @@
         errorLine1="        public abstract void prepareFromSearch(String query, Bundle extras);"
         errorLine2="                                                             ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1177"
+            column="62"/>
     </issue>
 
     <issue
@@ -889,7 +1033,9 @@
         errorLine1="        public abstract void prepareFromUri(Uri uri, Bundle extras);"
         errorLine2="                                            ~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1188"
+            column="45"/>
     </issue>
 
     <issue
@@ -898,7 +1044,9 @@
         errorLine1="        public abstract void prepareFromUri(Uri uri, Bundle extras);"
         errorLine2="                                                     ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1188"
+            column="54"/>
     </issue>
 
     <issue
@@ -907,7 +1055,9 @@
         errorLine1="        public abstract void playFromMediaId(String mediaId, Bundle extras);"
         errorLine2="                                             ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1202"
+            column="46"/>
     </issue>
 
     <issue
@@ -916,7 +1066,9 @@
         errorLine1="        public abstract void playFromMediaId(String mediaId, Bundle extras);"
         errorLine2="                                                             ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1202"
+            column="62"/>
     </issue>
 
     <issue
@@ -925,7 +1077,9 @@
         errorLine1="        public abstract void playFromSearch(String query, Bundle extras);"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1213"
+            column="45"/>
     </issue>
 
     <issue
@@ -934,7 +1088,9 @@
         errorLine1="        public abstract void playFromSearch(String query, Bundle extras);"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1213"
+            column="59"/>
     </issue>
 
     <issue
@@ -943,7 +1099,9 @@
         errorLine1="        public abstract void playFromUri(Uri uri, Bundle extras);"
         errorLine2="                                         ~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1222"
+            column="42"/>
     </issue>
 
     <issue
@@ -952,7 +1110,9 @@
         errorLine1="        public abstract void playFromUri(Uri uri, Bundle extras);"
         errorLine2="                                                  ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1222"
+            column="51"/>
     </issue>
 
     <issue
@@ -961,7 +1121,9 @@
         errorLine1="        public abstract void setRating(RatingCompat rating);"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1278"
+            column="40"/>
     </issue>
 
     <issue
@@ -970,7 +1132,9 @@
         errorLine1="        public abstract void setRating(RatingCompat rating, Bundle extras);"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1292"
+            column="40"/>
     </issue>
 
     <issue
@@ -979,7 +1143,9 @@
         errorLine1="        public abstract void setRating(RatingCompat rating, Bundle extras);"
         errorLine2="                                                            ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1292"
+            column="61"/>
     </issue>
 
     <issue
@@ -988,7 +1154,9 @@
         errorLine1="        public abstract void sendCustomAction(PlaybackStateCompat.CustomAction customAction,"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1338"
+            column="47"/>
     </issue>
 
     <issue
@@ -997,7 +1165,9 @@
         errorLine1="                Bundle args);"
         errorLine2="                ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1339"
+            column="17"/>
     </issue>
 
     <issue
@@ -1006,7 +1176,9 @@
         errorLine1="        public abstract void sendCustomAction(String action, Bundle args);"
         errorLine2="                                              ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1357"
+            column="47"/>
     </issue>
 
     <issue
@@ -1015,7 +1187,9 @@
         errorLine1="        public abstract void sendCustomAction(String action, Bundle args);"
         errorLine2="                                                             ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+            line="1357"
+            column="62"/>
     </issue>
 
     <issue
@@ -1024,7 +1198,9 @@
         errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="306"
+            column="31"/>
     </issue>
 
     <issue
@@ -1033,7 +1209,9 @@
         errorLine1="    public Object getMediaDescription() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="337"
+            column="12"/>
     </issue>
 
     <issue
@@ -1042,7 +1220,9 @@
         errorLine1="    public static MediaDescriptionCompat fromMediaDescription(Object descriptionObj) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="385"
+            column="19"/>
     </issue>
 
     <issue
@@ -1051,7 +1231,9 @@
         errorLine1="    public static MediaDescriptionCompat fromMediaDescription(Object descriptionObj) {"
         errorLine2="                                                              ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="385"
+            column="63"/>
     </issue>
 
     <issue
@@ -1060,7 +1242,9 @@
         errorLine1="        public Builder setMediaId(@Nullable String mediaId) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="474"
+            column="16"/>
     </issue>
 
     <issue
@@ -1069,7 +1253,9 @@
         errorLine1="        public Builder setTitle(@Nullable CharSequence title) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="485"
+            column="16"/>
     </issue>
 
     <issue
@@ -1078,7 +1264,9 @@
         errorLine1="        public Builder setSubtitle(@Nullable CharSequence subtitle) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="496"
+            column="16"/>
     </issue>
 
     <issue
@@ -1087,7 +1275,9 @@
         errorLine1="        public Builder setDescription(@Nullable CharSequence description) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="508"
+            column="16"/>
     </issue>
 
     <issue
@@ -1096,7 +1286,9 @@
         errorLine1="        public Builder setIconBitmap(@Nullable Bitmap icon) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="520"
+            column="16"/>
     </issue>
 
     <issue
@@ -1105,7 +1297,9 @@
         errorLine1="        public Builder setIconUri(@Nullable Uri iconUri) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="532"
+            column="16"/>
     </issue>
 
     <issue
@@ -1114,7 +1308,9 @@
         errorLine1="        public Builder setExtras(@Nullable Bundle extras) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="543"
+            column="16"/>
     </issue>
 
     <issue
@@ -1123,7 +1319,9 @@
         errorLine1="        public Builder setMediaUri(@Nullable Uri mediaUri) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="554"
+            column="16"/>
     </issue>
 
     <issue
@@ -1132,7 +1330,9 @@
         errorLine1="        public MediaDescriptionCompat build() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+            line="565"
+            column="16"/>
     </issue>
 
     <issue
@@ -1141,7 +1341,9 @@
         errorLine1="    public boolean containsKey(String key) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="374"
+            column="32"/>
     </issue>
 
     <issue
@@ -1150,7 +1352,9 @@
         errorLine1="    public CharSequence getText(@TextKey String key) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="386"
+            column="12"/>
     </issue>
 
     <issue
@@ -1159,7 +1363,9 @@
         errorLine1="    public CharSequence getText(@TextKey String key) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="386"
+            column="42"/>
     </issue>
 
     <issue
@@ -1168,7 +1374,9 @@
         errorLine1="    public String getString(@TextKey String key) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="398"
+            column="12"/>
     </issue>
 
     <issue
@@ -1177,7 +1385,9 @@
         errorLine1="    public String getString(@TextKey String key) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="398"
+            column="38"/>
     </issue>
 
     <issue
@@ -1186,7 +1396,9 @@
         errorLine1="    public long getLong(@LongKey String key) {"
         errorLine2="                                 ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="413"
+            column="34"/>
     </issue>
 
     <issue
@@ -1195,7 +1407,9 @@
         errorLine1="    public RatingCompat getRating(@RatingKey String key) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="424"
+            column="12"/>
     </issue>
 
     <issue
@@ -1204,7 +1418,9 @@
         errorLine1="    public RatingCompat getRating(@RatingKey String key) {"
         errorLine2="                                             ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="424"
+            column="46"/>
     </issue>
 
     <issue
@@ -1213,7 +1429,9 @@
         errorLine1="    public Bitmap getBitmap(@BitmapKey String key) {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="448"
+            column="12"/>
     </issue>
 
     <issue
@@ -1222,7 +1440,9 @@
         errorLine1="    public Bitmap getBitmap(@BitmapKey String key) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="448"
+            column="40"/>
     </issue>
 
     <issue
@@ -1231,7 +1451,9 @@
         errorLine1="    public MediaDescriptionCompat getDescription() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="464"
+            column="12"/>
     </issue>
 
     <issue
@@ -1240,7 +1462,9 @@
         errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="552"
+            column="31"/>
     </issue>
 
     <issue
@@ -1249,7 +1473,9 @@
         errorLine1="    public Set&lt;String> keySet() {"
         errorLine2="           ~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="570"
+            column="12"/>
     </issue>
 
     <issue
@@ -1258,7 +1484,9 @@
         errorLine1="    public Bundle getBundle() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="580"
+            column="12"/>
     </issue>
 
     <issue
@@ -1267,7 +1495,9 @@
         errorLine1="    public static MediaMetadataCompat fromMediaMetadata(Object metadataObj) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="597"
+            column="19"/>
     </issue>
 
     <issue
@@ -1276,7 +1506,9 @@
         errorLine1="    public static MediaMetadataCompat fromMediaMetadata(Object metadataObj) {"
         errorLine2="                                                        ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="597"
+            column="57"/>
     </issue>
 
     <issue
@@ -1285,7 +1517,9 @@
         errorLine1="    public Object getMediaMetadata() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="621"
+            column="12"/>
     </issue>
 
     <issue
@@ -1294,7 +1528,9 @@
         errorLine1="        public Builder(MediaMetadataCompat source) {"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="667"
+            column="24"/>
     </issue>
 
     <issue
@@ -1303,7 +1539,9 @@
         errorLine1="        public Builder(MediaMetadataCompat source, int maxBitmapSize) {"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="683"
+            column="24"/>
     </issue>
 
     <issue
@@ -1312,7 +1550,9 @@
         errorLine1="        public Builder putText(@TextKey String key, CharSequence value) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="722"
+            column="16"/>
     </issue>
 
     <issue
@@ -1321,7 +1561,9 @@
         errorLine1="        public Builder putText(@TextKey String key, CharSequence value) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="722"
+            column="41"/>
     </issue>
 
     <issue
@@ -1330,7 +1572,9 @@
         errorLine1="        public Builder putText(@TextKey String key, CharSequence value) {"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="722"
+            column="53"/>
     </issue>
 
     <issue
@@ -1339,7 +1583,9 @@
         errorLine1="        public Builder putString(@TextKey String key, String value) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="759"
+            column="16"/>
     </issue>
 
     <issue
@@ -1348,7 +1594,9 @@
         errorLine1="        public Builder putString(@TextKey String key, String value) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="759"
+            column="43"/>
     </issue>
 
     <issue
@@ -1357,7 +1605,9 @@
         errorLine1="        public Builder putString(@TextKey String key, String value) {"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="759"
+            column="55"/>
     </issue>
 
     <issue
@@ -1366,7 +1616,9 @@
         errorLine1="        public Builder putLong(@LongKey String key, long value) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="789"
+            column="16"/>
     </issue>
 
     <issue
@@ -1375,7 +1627,9 @@
         errorLine1="        public Builder putLong(@LongKey String key, long value) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="789"
+            column="41"/>
     </issue>
 
     <issue
@@ -1384,7 +1638,9 @@
         errorLine1="        public Builder putRating(@RatingKey String key, RatingCompat value) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="813"
+            column="16"/>
     </issue>
 
     <issue
@@ -1393,7 +1649,9 @@
         errorLine1="        public Builder putRating(@RatingKey String key, RatingCompat value) {"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="813"
+            column="45"/>
     </issue>
 
     <issue
@@ -1402,7 +1660,9 @@
         errorLine1="        public Builder putRating(@RatingKey String key, RatingCompat value) {"
         errorLine2="                                                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="813"
+            column="57"/>
     </issue>
 
     <issue
@@ -1411,7 +1671,9 @@
         errorLine1="        public Builder putBitmap(@BitmapKey String key, Bitmap value) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="848"
+            column="16"/>
     </issue>
 
     <issue
@@ -1420,7 +1682,9 @@
         errorLine1="        public Builder putBitmap(@BitmapKey String key, Bitmap value) {"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="848"
+            column="45"/>
     </issue>
 
     <issue
@@ -1429,7 +1693,9 @@
         errorLine1="        public Builder putBitmap(@BitmapKey String key, Bitmap value) {"
         errorLine2="                                                        ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="848"
+            column="57"/>
     </issue>
 
     <issue
@@ -1438,7 +1704,9 @@
         errorLine1="        public MediaMetadataCompat build() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+            file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+            line="864"
+            column="16"/>
     </issue>
 
     <issue
@@ -1447,7 +1715,9 @@
         errorLine1="    public void setCallback(Callback callback) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="613"
+            column="29"/>
     </issue>
 
     <issue
@@ -1456,7 +1726,9 @@
         errorLine1="    public void setCallback(Callback callback, Handler handler) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="629"
+            column="29"/>
     </issue>
 
     <issue
@@ -1465,7 +1737,9 @@
         errorLine1="    public void setCallback(Callback callback, Handler handler) {"
         errorLine2="                                               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="629"
+            column="48"/>
     </issue>
 
     <issue
@@ -1474,7 +1748,9 @@
         errorLine1="    public void setSessionActivity(PendingIntent pi) {"
         errorLine2="                                   ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="658"
+            column="36"/>
     </issue>
 
     <issue
@@ -1483,7 +1759,9 @@
         errorLine1="    public void setMediaButtonReceiver(PendingIntent mbr) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="675"
+            column="40"/>
     </issue>
 
     <issue
@@ -1492,7 +1770,9 @@
         errorLine1="    public void setPlaybackToRemote(VolumeProviderCompat volumeProvider) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="717"
+            column="37"/>
     </issue>
 
     <issue
@@ -1501,7 +1781,9 @@
         errorLine1="    public void sendSessionEvent(String event, Bundle extras) {"
         errorLine2="                                 ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="761"
+            column="34"/>
     </issue>
 
     <issue
@@ -1510,7 +1792,9 @@
         errorLine1="    public void sendSessionEvent(String event, Bundle extras) {"
         errorLine2="                                               ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="761"
+            column="48"/>
     </issue>
 
     <issue
@@ -1519,7 +1803,9 @@
         errorLine1="    public Token getSessionToken() {"
         errorLine2="           ~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="791"
+            column="12"/>
     </issue>
 
     <issue
@@ -1528,7 +1814,9 @@
         errorLine1="    public MediaControllerCompat getController() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="801"
+            column="12"/>
     </issue>
 
     <issue
@@ -1537,7 +1825,9 @@
         errorLine1="    public void setPlaybackState(PlaybackStateCompat state) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="810"
+            column="34"/>
     </issue>
 
     <issue
@@ -1546,7 +1836,9 @@
         errorLine1="    public void setMetadata(MediaMetadataCompat metadata) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="822"
+            column="29"/>
     </issue>
 
     <issue
@@ -1555,7 +1847,9 @@
         errorLine1="    public void setQueue(List&lt;QueueItem> queue) {"
         errorLine2="                         ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="838"
+            column="26"/>
     </issue>
 
     <issue
@@ -1564,7 +1858,9 @@
         errorLine1="    public void setQueueTitle(CharSequence title) {"
         errorLine2="                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="862"
+            column="31"/>
     </issue>
 
     <issue
@@ -1573,7 +1869,9 @@
         errorLine1="    public void setExtras(Bundle extras) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="931"
+            column="27"/>
     </issue>
 
     <issue
@@ -1582,7 +1880,9 @@
         errorLine1="    public Object getMediaSession() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="945"
+            column="12"/>
     </issue>
 
     <issue
@@ -1591,7 +1891,9 @@
         errorLine1="    public Object getRemoteControlClient() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="959"
+            column="12"/>
     </issue>
 
     <issue
@@ -1600,7 +1902,9 @@
         errorLine1="    public String getCallingPackage() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="995"
+            column="12"/>
     </issue>
 
     <issue
@@ -1609,7 +1913,9 @@
         errorLine1="    public void addOnActiveChangeListener(OnActiveChangeListener listener) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1006"
+            column="43"/>
     </issue>
 
     <issue
@@ -1618,7 +1924,9 @@
         errorLine1="    public void removeOnActiveChangeListener(OnActiveChangeListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1019"
+            column="46"/>
     </issue>
 
     <issue
@@ -1627,7 +1935,9 @@
         errorLine1="    public static MediaSessionCompat fromMediaSession(Context context, Object mediaSession) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1042"
+            column="19"/>
     </issue>
 
     <issue
@@ -1636,7 +1946,9 @@
         errorLine1="    public static MediaSessionCompat fromMediaSession(Context context, Object mediaSession) {"
         errorLine2="                                                      ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1042"
+            column="55"/>
     </issue>
 
     <issue
@@ -1645,7 +1957,9 @@
         errorLine1="    public static MediaSessionCompat fromMediaSession(Context context, Object mediaSession) {"
         errorLine2="                                                                       ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1042"
+            column="72"/>
     </issue>
 
     <issue
@@ -1654,7 +1968,9 @@
         errorLine1="        public void onCommand(String command, Bundle extras, ResultReceiver cb) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1175"
+            column="31"/>
     </issue>
 
     <issue
@@ -1663,7 +1979,9 @@
         errorLine1="        public void onCommand(String command, Bundle extras, ResultReceiver cb) {"
         errorLine2="                                              ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1175"
+            column="47"/>
     </issue>
 
     <issue
@@ -1672,7 +1990,9 @@
         errorLine1="        public void onCommand(String command, Bundle extras, ResultReceiver cb) {"
         errorLine2="                                                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1175"
+            column="62"/>
     </issue>
 
     <issue
@@ -1681,7 +2001,9 @@
         errorLine1="        public boolean onMediaButtonEvent(Intent mediaButtonEvent) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1189"
+            column="43"/>
     </issue>
 
     <issue
@@ -1690,7 +2012,9 @@
         errorLine1="        public void onPrepareFromMediaId(String mediaId, Bundle extras) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1282"
+            column="42"/>
     </issue>
 
     <issue
@@ -1699,7 +2023,9 @@
         errorLine1="        public void onPrepareFromMediaId(String mediaId, Bundle extras) {"
         errorLine2="                                                         ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1282"
+            column="58"/>
     </issue>
 
     <issue
@@ -1708,7 +2034,9 @@
         errorLine1="        public void onPrepareFromSearch(String query, Bundle extras) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1292"
+            column="41"/>
     </issue>
 
     <issue
@@ -1717,7 +2045,9 @@
         errorLine1="        public void onPrepareFromSearch(String query, Bundle extras) {"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1292"
+            column="55"/>
     </issue>
 
     <issue
@@ -1726,7 +2056,9 @@
         errorLine1="        public void onPrepareFromUri(Uri uri, Bundle extras) {"
         errorLine2="                                     ~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1300"
+            column="38"/>
     </issue>
 
     <issue
@@ -1735,7 +2067,9 @@
         errorLine1="        public void onPrepareFromUri(Uri uri, Bundle extras) {"
         errorLine2="                                              ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1300"
+            column="47"/>
     </issue>
 
     <issue
@@ -1744,7 +2078,9 @@
         errorLine1="        public void onPlayFromMediaId(String mediaId, Bundle extras) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1313"
+            column="39"/>
     </issue>
 
     <issue
@@ -1753,7 +2089,9 @@
         errorLine1="        public void onPlayFromMediaId(String mediaId, Bundle extras) {"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1313"
+            column="55"/>
     </issue>
 
     <issue
@@ -1762,7 +2100,9 @@
         errorLine1="        public void onPlayFromSearch(String query, Bundle extras) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1322"
+            column="38"/>
     </issue>
 
     <issue
@@ -1771,7 +2111,9 @@
         errorLine1="        public void onPlayFromSearch(String query, Bundle extras) {"
         errorLine2="                                                   ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1322"
+            column="52"/>
     </issue>
 
     <issue
@@ -1780,7 +2122,9 @@
         errorLine1="        public void onPlayFromUri(Uri uri, Bundle extras) {"
         errorLine2="                                  ~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1328"
+            column="35"/>
     </issue>
 
     <issue
@@ -1789,7 +2133,9 @@
         errorLine1="        public void onPlayFromUri(Uri uri, Bundle extras) {"
         errorLine2="                                           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1328"
+            column="44"/>
     </issue>
 
     <issue
@@ -1798,7 +2144,9 @@
         errorLine1="        public void onSetRating(RatingCompat rating) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1387"
+            column="33"/>
     </issue>
 
     <issue
@@ -1807,7 +2155,9 @@
         errorLine1="        public void onSetRating(RatingCompat rating, Bundle extras) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1396"
+            column="33"/>
     </issue>
 
     <issue
@@ -1816,7 +2166,9 @@
         errorLine1="        public void onSetRating(RatingCompat rating, Bundle extras) {"
         errorLine2="                                                     ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1396"
+            column="54"/>
     </issue>
 
     <issue
@@ -1825,7 +2177,9 @@
         errorLine1="        public void onCustomAction(String action, Bundle extras) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1467"
+            column="36"/>
     </issue>
 
     <issue
@@ -1834,7 +2188,9 @@
         errorLine1="        public void onCustomAction(String action, Bundle extras) {"
         errorLine2="                                                  ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1467"
+            column="51"/>
     </issue>
 
     <issue
@@ -1843,7 +2199,9 @@
         errorLine1="        public void onAddQueueItem(MediaDescriptionCompat description) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1477"
+            column="36"/>
     </issue>
 
     <issue
@@ -1852,7 +2210,9 @@
         errorLine1="        public void onAddQueueItem(MediaDescriptionCompat description, int index) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1489"
+            column="36"/>
     </issue>
 
     <issue
@@ -1861,7 +2221,9 @@
         errorLine1="        public void onRemoveQueueItem(MediaDescriptionCompat description) {"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1500"
+            column="39"/>
     </issue>
 
     <issue
@@ -1870,7 +2232,9 @@
         errorLine1="        public static Token fromToken(Object token) {"
         errorLine2="                      ~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1984"
+            column="23"/>
     </issue>
 
     <issue
@@ -1879,7 +2243,9 @@
         errorLine1="        public static Token fromToken(Object token) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="1984"
+            column="39"/>
     </issue>
 
     <issue
@@ -1888,7 +2254,9 @@
         errorLine1="        public static Token fromToken(Object token, IMediaSession extraBinder) {"
         errorLine2="                      ~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2002"
+            column="23"/>
     </issue>
 
     <issue
@@ -1897,7 +2265,9 @@
         errorLine1="        public static Token fromToken(Object token, IMediaSession extraBinder) {"
         errorLine2="                                      ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2002"
+            column="39"/>
     </issue>
 
     <issue
@@ -1906,7 +2276,9 @@
         errorLine1="        public static Token fromToken(Object token, IMediaSession extraBinder) {"
         errorLine2="                                                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2002"
+            column="53"/>
     </issue>
 
     <issue
@@ -1915,7 +2287,9 @@
         errorLine1="        public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2019"
+            column="35"/>
     </issue>
 
     <issue
@@ -1924,7 +2298,9 @@
         errorLine1="        public Object getToken() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2063"
+            column="16"/>
     </issue>
 
     <issue
@@ -1933,7 +2309,9 @@
         errorLine1="        public IMediaSession getExtraBinder() {"
         errorLine2="               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2071"
+            column="16"/>
     </issue>
 
     <issue
@@ -1942,7 +2320,9 @@
         errorLine1="        public void setExtraBinder(IMediaSession extraBinder) {"
         errorLine2="                                   ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2081"
+            column="36"/>
     </issue>
 
     <issue
@@ -1951,7 +2331,9 @@
         errorLine1="        public VersionedParcelable getSession2Token() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2091"
+            column="16"/>
     </issue>
 
     <issue
@@ -1960,7 +2342,9 @@
         errorLine1="        public void setSession2Token(VersionedParcelable session2Token) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2101"
+            column="38"/>
     </issue>
 
     <issue
@@ -1969,7 +2353,9 @@
         errorLine1="        public Bundle toBundle() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2111"
+            column="16"/>
     </issue>
 
     <issue
@@ -1978,7 +2364,9 @@
         errorLine1="        public static Token fromBundle(Bundle tokenBundle) {"
         errorLine2="                      ~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2133"
+            column="23"/>
     </issue>
 
     <issue
@@ -1987,7 +2375,9 @@
         errorLine1="        public static Token fromBundle(Bundle tokenBundle) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2133"
+            column="40"/>
     </issue>
 
     <issue
@@ -1996,7 +2386,9 @@
         errorLine1="        public QueueItem(MediaDescriptionCompat description, long id) {"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2189"
+            column="26"/>
     </issue>
 
     <issue
@@ -2005,7 +2397,9 @@
         errorLine1="        public MediaDescriptionCompat getDescription() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2216"
+            column="16"/>
     </issue>
 
     <issue
@@ -2014,7 +2408,9 @@
         errorLine1="        public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2228"
+            column="35"/>
     </issue>
 
     <issue
@@ -2023,7 +2419,9 @@
         errorLine1="        public Object getQueueItem() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2248"
+            column="16"/>
     </issue>
 
     <issue
@@ -2032,7 +2430,9 @@
         errorLine1="        public static QueueItem fromQueueItem(Object queueItem) {"
         errorLine2="                      ~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2268"
+            column="23"/>
     </issue>
 
     <issue
@@ -2041,7 +2441,9 @@
         errorLine1="        public static QueueItem fromQueueItem(Object queueItem) {"
         errorLine2="                                              ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2268"
+            column="47"/>
     </issue>
 
     <issue
@@ -2050,7 +2452,9 @@
         errorLine1="        public static List&lt;QueueItem> fromQueueItemList(List&lt;?> itemList) {"
         errorLine2="                      ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2290"
+            column="23"/>
     </issue>
 
     <issue
@@ -2059,7 +2463,9 @@
         errorLine1="        public static List&lt;QueueItem> fromQueueItemList(List&lt;?> itemList) {"
         errorLine2="                                                        ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+            line="2290"
+            column="57"/>
     </issue>
 
     <issue
@@ -2068,7 +2474,9 @@
         errorLine1="                android.media.session.MediaSessionManager.RemoteUserInfo remoteUserInfo) {"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/MediaSessionManager.java"/>
+            file="src/main/java/androidx/media/MediaSessionManager.java"
+            line="184"
+            column="17"/>
     </issue>
 
     <issue
@@ -2077,7 +2485,9 @@
         errorLine1="        public static MediaSessionCompat.Token getMediaSession(Notification notification) {"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="102"
+            column="23"/>
     </issue>
 
     <issue
@@ -2086,7 +2496,9 @@
         errorLine1="        public static MediaSessionCompat.Token getMediaSession(Notification notification) {"
         errorLine2="                                                               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="102"
+            column="64"/>
     </issue>
 
     <issue
@@ -2095,7 +2507,9 @@
         errorLine1="        public MediaStyle(androidx.core.app.NotificationCompat.Builder builder) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="139"
+            column="27"/>
     </issue>
 
     <issue
@@ -2104,7 +2518,9 @@
         errorLine1="        public MediaStyle setShowActionsInCompactView(int...actions) {"
         errorLine2="               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="149"
+            column="16"/>
     </issue>
 
     <issue
@@ -2113,7 +2529,9 @@
         errorLine1="        public MediaStyle setShowActionsInCompactView(int...actions) {"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="149"
+            column="55"/>
     </issue>
 
     <issue
@@ -2122,7 +2540,9 @@
         errorLine1="        public MediaStyle setMediaSession(MediaSessionCompat.Token token) {"
         errorLine2="               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="158"
+            column="16"/>
     </issue>
 
     <issue
@@ -2131,7 +2551,9 @@
         errorLine1="        public MediaStyle setMediaSession(MediaSessionCompat.Token token) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="158"
+            column="43"/>
     </issue>
 
     <issue
@@ -2140,7 +2562,9 @@
         errorLine1="        public MediaStyle setShowCancelButton(boolean show) {"
         errorLine2="               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="187"
+            column="16"/>
     </issue>
 
     <issue
@@ -2149,7 +2573,9 @@
         errorLine1="        public MediaStyle setCancelButtonIntent(PendingIntent pendingIntent) {"
         errorLine2="               ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="200"
+            column="16"/>
     </issue>
 
     <issue
@@ -2158,7 +2584,9 @@
         errorLine1="        public MediaStyle setCancelButtonIntent(PendingIntent pendingIntent) {"
         errorLine2="                                                ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="200"
+            column="49"/>
     </issue>
 
     <issue
@@ -2167,7 +2595,9 @@
         errorLine1="        public void apply(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="210"
+            column="27"/>
     </issue>
 
     <issue
@@ -2176,7 +2606,9 @@
         errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="225"
+            column="16"/>
     </issue>
 
     <issue
@@ -2185,7 +2617,9 @@
         errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="225"
+            column="44"/>
     </issue>
 
     <issue
@@ -2194,7 +2628,9 @@
         errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="293"
+            column="16"/>
     </issue>
 
     <issue
@@ -2203,7 +2639,9 @@
         errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="293"
+            column="47"/>
     </issue>
 
     <issue
@@ -2212,7 +2650,9 @@
         errorLine1="        public void apply(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="378"
+            column="27"/>
     </issue>
 
     <issue
@@ -2221,7 +2661,9 @@
         errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="393"
+            column="16"/>
     </issue>
 
     <issue
@@ -2230,7 +2672,9 @@
         errorLine1="        public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="393"
+            column="44"/>
     </issue>
 
     <issue
@@ -2239,7 +2683,9 @@
         errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="435"
+            column="16"/>
     </issue>
 
     <issue
@@ -2248,7 +2694,9 @@
         errorLine1="        public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="435"
+            column="47"/>
     </issue>
 
     <issue
@@ -2257,7 +2705,9 @@
         errorLine1="        public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="               ~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="467"
+            column="16"/>
     </issue>
 
     <issue
@@ -2266,7 +2716,9 @@
         errorLine1="        public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+            file="src/main/java/androidx/media/app/NotificationCompat.java"
+            line="467"
+            column="51"/>
     </issue>
 
     <issue
@@ -2275,7 +2727,9 @@
         errorLine1="    public ParcelableVolumeInfo(Parcel from) {"
         errorLine2="                                ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/ParcelableVolumeInfo.java"/>
+            file="src/main/java/android/support/v4/media/session/ParcelableVolumeInfo.java"
+            line="44"
+            column="33"/>
     </issue>
 
     <issue
@@ -2284,7 +2738,9 @@
         errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/ParcelableVolumeInfo.java"/>
+            file="src/main/java/android/support/v4/media/session/ParcelableVolumeInfo.java"
+            line="58"
+            column="31"/>
     </issue>
 
     <issue
@@ -2293,7 +2749,9 @@
         errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="618"
+            column="31"/>
     </issue>
 
     <issue
@@ -2302,7 +2760,9 @@
         errorLine1="    public long getCurrentPosition(Long timeDiff) {"
         errorLine2="                                   ~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="679"
+            column="36"/>
     </issue>
 
     <issue
@@ -2311,7 +2771,9 @@
         errorLine1="    public List&lt;PlaybackStateCompat.CustomAction> getCustomActions() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="741"
+            column="12"/>
     </issue>
 
     <issue
@@ -2320,7 +2782,9 @@
         errorLine1="    public CharSequence getErrorMessage() {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="774"
+            column="12"/>
     </issue>
 
     <issue
@@ -2329,7 +2793,9 @@
         errorLine1="    public static PlaybackStateCompat fromPlaybackState(Object stateObj) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="808"
+            column="19"/>
     </issue>
 
     <issue
@@ -2338,7 +2804,9 @@
         errorLine1="    public static PlaybackStateCompat fromPlaybackState(Object stateObj) {"
         errorLine2="                                                        ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="808"
+            column="57"/>
     </issue>
 
     <issue
@@ -2347,7 +2815,9 @@
         errorLine1="    public Object getPlaybackState() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="854"
+            column="12"/>
     </issue>
 
     <issue
@@ -2356,7 +2826,9 @@
         errorLine1="        public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="918"
+            column="35"/>
     </issue>
 
     <issue
@@ -2365,7 +2837,9 @@
         errorLine1="        public static PlaybackStateCompat.CustomAction fromCustomAction(Object customActionObj) {"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="941"
+            column="23"/>
     </issue>
 
     <issue
@@ -2374,7 +2848,9 @@
         errorLine1="        public static PlaybackStateCompat.CustomAction fromCustomAction(Object customActionObj) {"
         errorLine2="                                                                        ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="941"
+            column="73"/>
     </issue>
 
     <issue
@@ -2383,7 +2859,9 @@
         errorLine1="        public Object getCustomAction() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="970"
+            column="16"/>
     </issue>
 
     <issue
@@ -2392,7 +2870,9 @@
         errorLine1="        public String getAction() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1000"
+            column="16"/>
     </issue>
 
     <issue
@@ -2401,7 +2881,9 @@
         errorLine1="        public CharSequence getName() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1009"
+            column="16"/>
     </issue>
 
     <issue
@@ -2410,7 +2892,9 @@
         errorLine1="        public Bundle getExtras() {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1032"
+            column="16"/>
     </issue>
 
     <issue
@@ -2419,7 +2903,9 @@
         errorLine1="            public Builder(String action, CharSequence name, int icon) {"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1066"
+            column="28"/>
     </issue>
 
     <issue
@@ -2428,7 +2914,9 @@
         errorLine1="            public Builder(String action, CharSequence name, int icon) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1066"
+            column="43"/>
     </issue>
 
     <issue
@@ -2437,7 +2925,9 @@
         errorLine1="            public Builder setExtras(Bundle extras) {"
         errorLine2="                   ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1093"
+            column="20"/>
     </issue>
 
     <issue
@@ -2446,7 +2936,9 @@
         errorLine1="            public Builder setExtras(Bundle extras) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1093"
+            column="38"/>
     </issue>
 
     <issue
@@ -2455,7 +2947,9 @@
         errorLine1="            public CustomAction build() {"
         errorLine2="                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1104"
+            column="20"/>
     </issue>
 
     <issue
@@ -2464,7 +2958,9 @@
         errorLine1="        public Builder(PlaybackStateCompat source) {"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1139"
+            column="24"/>
     </issue>
 
     <issue
@@ -2473,7 +2969,9 @@
         errorLine1="        public Builder setState(@State int state, long position, float playbackSpeed) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1186"
+            column="16"/>
     </issue>
 
     <issue
@@ -2482,7 +2980,9 @@
         errorLine1="        public Builder setState(@State int state, long position, float playbackSpeed,"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1224"
+            column="16"/>
     </issue>
 
     <issue
@@ -2491,7 +2991,9 @@
         errorLine1="        public Builder setBufferedPosition(long bufferPosition) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1240"
+            column="16"/>
     </issue>
 
     <issue
@@ -2500,7 +3002,9 @@
         errorLine1="        public Builder setActions(@Actions long capabilities) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1275"
+            column="16"/>
     </issue>
 
     <issue
@@ -2509,7 +3013,9 @@
         errorLine1="        public Builder addCustomAction(String action, String name, int icon) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1300"
+            column="16"/>
     </issue>
 
     <issue
@@ -2518,7 +3024,9 @@
         errorLine1="        public Builder addCustomAction(String action, String name, int icon) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1300"
+            column="40"/>
     </issue>
 
     <issue
@@ -2527,7 +3035,9 @@
         errorLine1="        public Builder addCustomAction(String action, String name, int icon) {"
         errorLine2="                                                      ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1300"
+            column="55"/>
     </issue>
 
     <issue
@@ -2536,7 +3046,9 @@
         errorLine1="        public Builder addCustomAction(PlaybackStateCompat.CustomAction customAction) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1315"
+            column="16"/>
     </issue>
 
     <issue
@@ -2545,7 +3057,9 @@
         errorLine1="        public Builder addCustomAction(PlaybackStateCompat.CustomAction customAction) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1315"
+            column="40"/>
     </issue>
 
     <issue
@@ -2554,7 +3068,9 @@
         errorLine1="        public Builder setActiveQueueItemId(long id) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1331"
+            column="16"/>
     </issue>
 
     <issue
@@ -2563,7 +3079,9 @@
         errorLine1="        public Builder setErrorMessage(CharSequence errorMessage) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1344"
+            column="16"/>
     </issue>
 
     <issue
@@ -2572,7 +3090,9 @@
         errorLine1="        public Builder setErrorMessage(CharSequence errorMessage) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1344"
+            column="40"/>
     </issue>
 
     <issue
@@ -2581,7 +3101,9 @@
         errorLine1="        public Builder setErrorMessage(@ErrorCode int errorCode, CharSequence errorMessage) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1357"
+            column="16"/>
     </issue>
 
     <issue
@@ -2590,7 +3112,9 @@
         errorLine1="        public Builder setErrorMessage(@ErrorCode int errorCode, CharSequence errorMessage) {"
         errorLine2="                                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1357"
+            column="66"/>
     </issue>
 
     <issue
@@ -2599,7 +3123,9 @@
         errorLine1="        public Builder setExtras(Bundle extras) {"
         errorLine2="               ~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1369"
+            column="16"/>
     </issue>
 
     <issue
@@ -2608,7 +3134,9 @@
         errorLine1="        public Builder setExtras(Bundle extras) {"
         errorLine2="                                 ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1369"
+            column="34"/>
     </issue>
 
     <issue
@@ -2617,7 +3145,9 @@
         errorLine1="        public PlaybackStateCompat build() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+            file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+            line="1377"
+            column="16"/>
     </issue>
 
     <issue
@@ -2626,7 +3156,9 @@
         errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+            file="src/main/java/android/support/v4/media/RatingCompat.java"
+            line="128"
+            column="31"/>
     </issue>
 
     <issue
@@ -2635,7 +3167,9 @@
         errorLine1="    public static RatingCompat newUnratedRating(@Style int ratingStyle) {"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+            file="src/main/java/android/support/v4/media/RatingCompat.java"
+            line="160"
+            column="19"/>
     </issue>
 
     <issue
@@ -2644,7 +3178,9 @@
         errorLine1="    public static RatingCompat newHeartRating(boolean hasHeart) {"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+            file="src/main/java/android/support/v4/media/RatingCompat.java"
+            line="181"
+            column="19"/>
     </issue>
 
     <issue
@@ -2653,7 +3189,9 @@
         errorLine1="    public static RatingCompat newThumbRating(boolean thumbIsUp) {"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+            file="src/main/java/android/support/v4/media/RatingCompat.java"
+            line="192"
+            column="19"/>
     </issue>
 
     <issue
@@ -2662,7 +3200,9 @@
         errorLine1="    public static RatingCompat newStarRating(@StarStyle int starRatingStyle,"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+            file="src/main/java/android/support/v4/media/RatingCompat.java"
+            line="208"
+            column="19"/>
     </issue>
 
     <issue
@@ -2671,7 +3211,9 @@
         errorLine1="    public static RatingCompat newPercentageRating(float percent) {"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+            file="src/main/java/android/support/v4/media/RatingCompat.java"
+            line="239"
+            column="19"/>
     </issue>
 
     <issue
@@ -2680,7 +3222,9 @@
         errorLine1="    public static RatingCompat fromRating(Object ratingObj) {"
         errorLine2="                  ~~~~~~~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+            file="src/main/java/android/support/v4/media/RatingCompat.java"
+            line="334"
+            column="19"/>
     </issue>
 
     <issue
@@ -2689,7 +3233,9 @@
         errorLine1="    public static RatingCompat fromRating(Object ratingObj) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+            file="src/main/java/android/support/v4/media/RatingCompat.java"
+            line="334"
+            column="43"/>
     </issue>
 
     <issue
@@ -2698,7 +3244,9 @@
         errorLine1="    public Object getRating() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+            file="src/main/java/android/support/v4/media/RatingCompat.java"
+            line="377"
+            column="12"/>
     </issue>
 
     <issue
@@ -2707,7 +3255,9 @@
         errorLine1="    public void setCallback(Callback callback) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/VolumeProviderCompat.java"/>
+            file="src/main/java/androidx/media/VolumeProviderCompat.java"
+            line="190"
+            column="29"/>
     </issue>
 
     <issue
@@ -2716,7 +3266,9 @@
         errorLine1="    public Object getVolumeProvider() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/media/VolumeProviderCompat.java"/>
+            file="src/main/java/androidx/media/VolumeProviderCompat.java"
+            line="202"
+            column="12"/>
     </issue>
 
     <issue
@@ -2725,7 +3277,9 @@
         errorLine1="        public abstract void onVolumeChanged(VolumeProviderCompat volumeProvider);"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media/VolumeProviderCompat.java"/>
+            file="src/main/java/androidx/media/VolumeProviderCompat.java"
+            line="238"
+            column="46"/>
     </issue>
 
 </issues>
diff --git a/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java b/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
index 1545dd8..a3f33fe 100644
--- a/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
+++ b/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
@@ -1185,6 +1185,7 @@
          * @param mediaButtonEvent The media button event intent.
          * @return True if the event was handled, false otherwise.
          */
+        @SuppressWarnings("deprecation")
         public boolean onMediaButtonEvent(Intent mediaButtonEvent) {
             if (android.os.Build.VERSION.SDK_INT >= 27) {
                 // Double tap of play/pause as skipping to next is already handled by framework,
diff --git a/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java b/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java
index 10d515c..1b26d16 100644
--- a/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java
+++ b/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java
@@ -150,6 +150,7 @@
             mMediaBrowser = mediaBrowser;
         }
 
+        @SuppressWarnings("deprecation")
         @Override
         public void onConnected() {
             MediaControllerCompat mediaController = new MediaControllerCompat(mContext,
@@ -186,6 +187,7 @@
      * @param intent The intent to parse.
      * @return The extracted {@link KeyEvent} if found, or null.
      */
+    @SuppressWarnings("deprecation")
     public static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent) {
         if (mediaSessionCompat == null || intent == null
                 || !Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())
diff --git a/media2/integration-tests/testapp/src/main/java/androidx/media2/integration/testapp/VideoSessionService.java b/media2/integration-tests/testapp/src/main/java/androidx/media2/integration/testapp/VideoSessionService.java
index 8ff807d..f2df815 100644
--- a/media2/integration-tests/testapp/src/main/java/androidx/media2/integration/testapp/VideoSessionService.java
+++ b/media2/integration-tests/testapp/src/main/java/androidx/media2/integration/testapp/VideoSessionService.java
@@ -39,6 +39,7 @@
 
 import com.google.common.util.concurrent.ListenableFuture;
 
+import java.io.IOException;
 import java.lang.ref.WeakReference;
 import java.util.List;
 import java.util.concurrent.Executor;
@@ -195,7 +196,11 @@
             Bitmap musicAlbumBitmap = extractAlbumArt(retriever);
 
             if (retriever != null) {
-                retriever.release();
+                try {
+                    retriever.release();
+                } catch (IOException e) {
+                    // Nothing we can do about that...
+                }
             }
 
             MediaMetadata metadata = mediaItem.getMetadata();
diff --git a/media2/media2-player/lint-baseline.xml b/media2/media2-player/lint-baseline.xml
index 55adabc..b5478ee 100644
--- a/media2/media2-player/lint-baseline.xml
+++ b/media2/media2-player/lint-baseline.xml
@@ -250,7 +250,8 @@
         errorLine1="        void onLoop(MediaItem mediaItem);"
         errorLine2="                    ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"/>
+            file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"
+            column="21"/>
     </issue>
 
     <issue
@@ -259,7 +260,9 @@
         errorLine1="        void onMediaTimeDiscontinuity(MediaItem mediaItem, MediaTimestamp mediaTimestamp);"
         errorLine2="                                      ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"/>
+            file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"
+            line="135"
+            column="39"/>
     </issue>
 
     <issue
@@ -268,7 +271,9 @@
         errorLine1="        void onMediaTimeDiscontinuity(MediaItem mediaItem, MediaTimestamp mediaTimestamp);"
         errorLine2="                                                           ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"/>
+            file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"
+            line="135"
+            column="60"/>
     </issue>
 
     <issue
@@ -277,7 +282,9 @@
         errorLine1="        void onPlaybackEnded(MediaItem mediaItem);"
         errorLine2="                             ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"/>
+            file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"
+            line="138"
+            column="30"/>
     </issue>
 
     <issue
@@ -286,7 +293,9 @@
         errorLine1="        void onError(MediaItem mediaItem, int what);"
         errorLine2="                     ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"/>
+            file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"
+            line="141"
+            column="22"/>
     </issue>
 
     <issue
@@ -295,7 +304,9 @@
         errorLine1="    public PersistableBundle getMetrics() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer.java"
+            line="2167"
+            column="12"/>
     </issue>
 
     <issue
@@ -304,7 +315,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, int width, int height) { }"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="824"
+            column="17"/>
     </issue>
 
     <issue
@@ -313,7 +326,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, int width, int height) { }"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="824"
+            column="34"/>
     </issue>
 
     <issue
@@ -322,7 +337,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, TimedMetaData data) { }"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="844"
+            column="17"/>
     </issue>
 
     <issue
@@ -331,7 +348,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, TimedMetaData data) { }"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="844"
+            column="34"/>
     </issue>
 
     <issue
@@ -340,7 +359,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, TimedMetaData data) { }"
         errorLine2="                                                 ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="844"
+            column="50"/>
     </issue>
 
     <issue
@@ -349,7 +370,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, @MediaError int what, int extra) { }"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="856"
+            column="17"/>
     </issue>
 
     <issue
@@ -358,7 +381,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, @MediaError int what, int extra) { }"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="856"
+            column="34"/>
     </issue>
 
     <issue
@@ -367,7 +392,9 @@
         errorLine1="        public void onInfo(MediaPlayer2 mp, MediaItem item, @MediaInfo int what, int extra) { }"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="867"
+            column="28"/>
     </issue>
 
     <issue
@@ -376,7 +403,9 @@
         errorLine1="        public void onInfo(MediaPlayer2 mp, MediaItem item, @MediaInfo int what, int extra) { }"
         errorLine2="                                            ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="867"
+            column="45"/>
     </issue>
 
     <issue
@@ -385,7 +414,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, @CallCompleted int what,"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="878"
+            column="17"/>
     </issue>
 
     <issue
@@ -394,7 +425,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, @CallCompleted int what,"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="878"
+            column="34"/>
     </issue>
 
     <issue
@@ -403,7 +436,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, MediaTimestamp timestamp) { }"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="902"
+            column="17"/>
     </issue>
 
     <issue
@@ -412,7 +447,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, MediaTimestamp timestamp) { }"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="902"
+            column="34"/>
     </issue>
 
     <issue
@@ -421,7 +458,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, MediaTimestamp timestamp) { }"
         errorLine2="                                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="902"
+            column="50"/>
     </issue>
 
     <issue
@@ -430,7 +469,9 @@
         errorLine1="        public void onCommandLabelReached(MediaPlayer2 mp, @NonNull Object label) { }"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="911"
+            column="43"/>
     </issue>
 
     <issue
@@ -439,7 +480,9 @@
         errorLine1="        void onDrmConfig(MediaPlayer2 mp, MediaItem item);"
         errorLine2="                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="1452"
+            column="26"/>
     </issue>
 
     <issue
@@ -448,7 +491,9 @@
         errorLine1="        void onDrmConfig(MediaPlayer2 mp, MediaItem item);"
         errorLine2="                                          ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="1452"
+            column="43"/>
     </issue>
 
     <issue
@@ -457,7 +502,9 @@
         errorLine1="        public void onDrmInfo(MediaPlayer2 mp, MediaItem item, DrmInfo drmInfo) { }"
         errorLine2="                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="1479"
+            column="31"/>
     </issue>
 
     <issue
@@ -466,7 +513,9 @@
         errorLine1="        public void onDrmInfo(MediaPlayer2 mp, MediaItem item, DrmInfo drmInfo) { }"
         errorLine2="                                               ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="1479"
+            column="48"/>
     </issue>
 
     <issue
@@ -475,7 +524,9 @@
         errorLine1="        public void onDrmInfo(MediaPlayer2 mp, MediaItem item, DrmInfo drmInfo) { }"
         errorLine2="                                                               ~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="1479"
+            column="64"/>
     </issue>
 
     <issue
@@ -484,7 +535,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, @PrepareDrmStatusCode int status) { }"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="1490"
+            column="17"/>
     </issue>
 
     <issue
@@ -493,7 +546,9 @@
         errorLine1="                MediaPlayer2 mp, MediaItem item, @PrepareDrmStatusCode int status) { }"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="1490"
+            column="34"/>
     </issue>
 
     <issue
@@ -502,7 +557,9 @@
         errorLine1="        public abstract Map&lt;UUID, byte[]&gt; getPssh();"
         errorLine2="                        ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="1714"
+            column="25"/>
     </issue>
 
     <issue
@@ -511,7 +568,9 @@
         errorLine1="        public abstract List&lt;UUID> getSupportedSchemes();"
         errorLine2="                        ~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+            file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+            line="1721"
+            column="25"/>
     </issue>
 
     <issue
@@ -520,7 +579,9 @@
         errorLine1="    public android.media.PlaybackParams getPlaybackParams() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/PlaybackParams.java"/>
+            file="src/main/java/androidx/media2/player/PlaybackParams.java"
+            line="166"
+            column="12"/>
     </issue>
 
     <issue
@@ -529,7 +590,9 @@
         errorLine1="        public Builder(android.media.PlaybackParams playbackParams) {"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/PlaybackParams.java"/>
+            file="src/main/java/androidx/media2/player/PlaybackParams.java"
+            line="196"
+            column="24"/>
     </issue>
 
     <issue
@@ -538,7 +601,9 @@
         errorLine1="        void onCcData(byte[] data, long timeUs);"
         errorLine2="                      ~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/TextRenderer.java"/>
+            file="src/main/java/androidx/media2/player/TextRenderer.java"
+            line="53"
+            column="23"/>
     </issue>
 
     <issue
@@ -547,7 +612,9 @@
         errorLine1="    public TimedMetaData(long timestampUs, byte[] metaData) {"
         errorLine2="                                           ~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/TimedMetaData.java"/>
+            file="src/main/java/androidx/media2/player/TimedMetaData.java"
+            line="43"
+            column="44"/>
     </issue>
 
     <issue
@@ -556,7 +623,9 @@
         errorLine1="    public byte[] getMetaData() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/androidx/media2/player/TimedMetaData.java"/>
+            file="src/main/java/androidx/media2/player/TimedMetaData.java"
+            line="60"
+            column="12"/>
     </issue>
 
 </issues>
diff --git a/media2/media2-player/src/androidTest/java/androidx/media2/player/MediaPlayer2Test.java b/media2/media2-player/src/androidTest/java/androidx/media2/player/MediaPlayer2Test.java
index 9510928..d60bd4e 100644
--- a/media2/media2-player/src/androidTest/java/androidx/media2/player/MediaPlayer2Test.java
+++ b/media2/media2-player/src/androidTest/java/androidx/media2/player/MediaPlayer2Test.java
@@ -826,7 +826,11 @@
         retriever.setDataSource(file);
         String rotation = retriever.extractMetadata(
                 MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
-        retriever.release();
+        try {
+            retriever.release();
+        } catch (IOException e) {
+            // Nothing we can  do about it.
+        }
         retriever = null;
         assertNotNull(rotation);
         assertEquals(Integer.parseInt(rotation), angle);
diff --git a/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java b/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java
index 34f5ad0..27ec402 100644
--- a/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java
+++ b/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java
@@ -1672,6 +1672,7 @@
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final class MediaButtonReceiver extends BroadcastReceiver {
+        @SuppressWarnings("deprecation")
         @Override
         public void onReceive(Context context, Intent intent) {
             if (!Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
diff --git a/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionServiceImplBase.java b/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionServiceImplBase.java
index 5dc5374..9515408 100644
--- a/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionServiceImplBase.java
+++ b/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionServiceImplBase.java
@@ -150,6 +150,7 @@
         }
     }
 
+    @SuppressWarnings("deprecation")
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
         if (intent == null || intent.getAction() == null) {
diff --git a/navigation/integration-tests/testapp/src/main/AndroidManifest.xml b/navigation/integration-tests/testapp/src/main/AndroidManifest.xml
index c54caaa..758133b 100644
--- a/navigation/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/navigation/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools">
 
+    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
     <application
         android:allowBackup="true"
         android:label="@string/app_name"
diff --git a/navigation/navigation-common-ktx/api/2.5.0-beta01.txt b/navigation/navigation-common-ktx/api/2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-common-ktx/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-common-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-common-ktx/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-common-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-common-ktx/api/res-2.5.0-beta01.txt b/navigation/navigation-common-ktx/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-common-ktx/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-common-ktx/api/restricted_2.5.0-beta01.txt b/navigation/navigation-common-ktx/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-common-ktx/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-common/api/2.5.0-beta01.txt b/navigation/navigation-common/api/2.5.0-beta01.txt
deleted file mode 100644
index fe9681f..0000000
--- a/navigation/navigation-common/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,522 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation {
-
-  public final class ActionOnlyNavDirections implements androidx.navigation.NavDirections {
-    ctor public ActionOnlyNavDirections(int actionId);
-    method public int component1();
-    method public androidx.navigation.ActionOnlyNavDirections copy(int actionId);
-    method public int getActionId();
-    method public android.os.Bundle getArguments();
-    property public int actionId;
-    property public android.os.Bundle arguments;
-  }
-
-  @androidx.navigation.NavOptionsDsl public final class AnimBuilder {
-    ctor public AnimBuilder();
-    method public int getEnter();
-    method public int getExit();
-    method public int getPopEnter();
-    method public int getPopExit();
-    method public void setEnter(int);
-    method public void setExit(int);
-    method public void setPopEnter(int);
-    method public void setPopExit(int);
-    property public final int enter;
-    property public final int exit;
-    property public final int popEnter;
-    property public final int popExit;
-  }
-
-  public interface FloatingWindow {
-  }
-
-  public final class NamedNavArgument {
-    method public operator String component1();
-    method public operator androidx.navigation.NavArgument component2();
-    method public androidx.navigation.NavArgument getArgument();
-    method public String getName();
-    property public final androidx.navigation.NavArgument argument;
-    property public final String name;
-  }
-
-  public final class NamedNavArgumentKt {
-    method public static androidx.navigation.NamedNavArgument navArgument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavAction {
-    ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions, optional android.os.Bundle? defaultArguments);
-    ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions);
-    ctor public NavAction(@IdRes int destinationId);
-    method public android.os.Bundle? getDefaultArguments();
-    method public int getDestinationId();
-    method public androidx.navigation.NavOptions? getNavOptions();
-    method public void setDefaultArguments(android.os.Bundle?);
-    method public void setNavOptions(androidx.navigation.NavOptions?);
-    property public final android.os.Bundle? defaultArguments;
-    property public final int destinationId;
-    property public final androidx.navigation.NavOptions? navOptions;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class NavActionBuilder {
-    ctor public NavActionBuilder();
-    method public java.util.Map<java.lang.String,java.lang.Object> getDefaultArguments();
-    method public int getDestinationId();
-    method public void navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
-    method public void setDestinationId(int);
-    property public final java.util.Map<java.lang.String,java.lang.Object> defaultArguments;
-    property public final int destinationId;
-  }
-
-  public interface NavArgs {
-  }
-
-  public final class NavArgsLazy<Args extends androidx.navigation.NavArgs> implements kotlin.Lazy<Args> {
-    ctor public NavArgsLazy(kotlin.reflect.KClass<Args> navArgsClass, kotlin.jvm.functions.Function0<android.os.Bundle> argumentProducer);
-    method public Args getValue();
-    method public boolean isInitialized();
-    property public Args value;
-  }
-
-  public final class NavArgsLazyKt {
-  }
-
-  public final class NavArgument {
-    method public Object? getDefaultValue();
-    method public androidx.navigation.NavType<java.lang.Object> getType();
-    method public boolean isDefaultValuePresent();
-    method public boolean isNullable();
-    property public final Object? defaultValue;
-    property public final boolean isDefaultValuePresent;
-    property public final boolean isNullable;
-    property public final androidx.navigation.NavType<java.lang.Object> type;
-  }
-
-  public static final class NavArgument.Builder {
-    ctor public NavArgument.Builder();
-    method public androidx.navigation.NavArgument build();
-    method public androidx.navigation.NavArgument.Builder setDefaultValue(Object? defaultValue);
-    method public androidx.navigation.NavArgument.Builder setIsNullable(boolean isNullable);
-    method public <T> androidx.navigation.NavArgument.Builder setType(androidx.navigation.NavType<T> type);
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class NavArgumentBuilder {
-    ctor public NavArgumentBuilder();
-    method public androidx.navigation.NavArgument build();
-    method public Object? getDefaultValue();
-    method public boolean getNullable();
-    method public androidx.navigation.NavType<?> getType();
-    method public void setDefaultValue(Object?);
-    method public void setNullable(boolean);
-    method public void setType(androidx.navigation.NavType<?>);
-    property public final Object? defaultValue;
-    property public final boolean nullable;
-    property public final androidx.navigation.NavType<?> type;
-  }
-
-  public final class NavBackStackEntry implements androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
-    method public android.os.Bundle? getArguments();
-    method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
-    method public androidx.navigation.NavDestination getDestination();
-    method public String getId();
-    method public androidx.lifecycle.Lifecycle getLifecycle();
-    method public androidx.lifecycle.SavedStateHandle getSavedStateHandle();
-    method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
-    method public androidx.lifecycle.ViewModelStore getViewModelStore();
-    property public final android.os.Bundle? arguments;
-    property public final androidx.navigation.NavDestination destination;
-    property public final String id;
-    property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
-    property public androidx.savedstate.SavedStateRegistry savedStateRegistry;
-  }
-
-  public final class NavDeepLink {
-    method public String? getAction();
-    method public String? getMimeType();
-    method public String? getUriPattern();
-    property public final String? action;
-    property public final String? mimeType;
-    property public final String? uriPattern;
-  }
-
-  public static final class NavDeepLink.Builder {
-    method public androidx.navigation.NavDeepLink build();
-    method public static androidx.navigation.NavDeepLink.Builder fromAction(String action);
-    method public static androidx.navigation.NavDeepLink.Builder fromMimeType(String mimeType);
-    method public static androidx.navigation.NavDeepLink.Builder fromUriPattern(String uriPattern);
-    method public androidx.navigation.NavDeepLink.Builder setAction(String action);
-    method public androidx.navigation.NavDeepLink.Builder setMimeType(String mimeType);
-    method public androidx.navigation.NavDeepLink.Builder setUriPattern(String uriPattern);
-  }
-
-  @kotlin.DslMarker public @interface NavDeepLinkDsl {
-  }
-
-  @androidx.navigation.NavDeepLinkDsl public final class NavDeepLinkDslBuilder {
-    ctor public NavDeepLinkDslBuilder();
-    method public String? getAction();
-    method public String? getMimeType();
-    method public String? getUriPattern();
-    method public void setAction(String?);
-    method public void setMimeType(String?);
-    method public void setUriPattern(String?);
-    property public final String? action;
-    property public final String? mimeType;
-    property public final String? uriPattern;
-  }
-
-  public final class NavDeepLinkDslBuilderKt {
-    method public static androidx.navigation.NavDeepLink navDeepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> deepLinkBuilder);
-  }
-
-  public class NavDeepLinkRequest {
-    method public String? getAction();
-    method public String? getMimeType();
-    method public android.net.Uri? getUri();
-    property public String? action;
-    property public String? mimeType;
-    property public android.net.Uri? uri;
-  }
-
-  public static final class NavDeepLinkRequest.Builder {
-    method public androidx.navigation.NavDeepLinkRequest build();
-    method public static androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
-    method public static androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
-    method public static androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
-    method public androidx.navigation.NavDeepLinkRequest.Builder setAction(String action);
-    method public androidx.navigation.NavDeepLinkRequest.Builder setMimeType(String mimeType);
-    method public androidx.navigation.NavDeepLinkRequest.Builder setUri(android.net.Uri uri);
-    field public static final androidx.navigation.NavDeepLinkRequest.Builder.Companion Companion;
-  }
-
-  public static final class NavDeepLinkRequest.Builder.Companion {
-    method public androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
-    method public androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
-    method public androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
-  }
-
-  public class NavDestination {
-    ctor public NavDestination(String navigatorName);
-    ctor public NavDestination(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method public final void addArgument(String argumentName, androidx.navigation.NavArgument argument);
-    method public final void addDeepLink(String uriPattern);
-    method public final void addDeepLink(androidx.navigation.NavDeepLink navDeepLink);
-    method public final androidx.navigation.NavAction? getAction(@IdRes int id);
-    method public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> getArguments();
-    method public static final kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
-    method @IdRes public final int getId();
-    method public final CharSequence? getLabel();
-    method public final String getNavigatorName();
-    method public final androidx.navigation.NavGraph? getParent();
-    method public final String? getRoute();
-    method public boolean hasDeepLink(android.net.Uri deepLink);
-    method public boolean hasDeepLink(androidx.navigation.NavDeepLinkRequest deepLinkRequest);
-    method @CallSuper public void onInflate(android.content.Context context, android.util.AttributeSet attrs);
-    method protected static final <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
-    method public final void putAction(@IdRes int actionId, @IdRes int destId);
-    method public final void putAction(@IdRes int actionId, androidx.navigation.NavAction action);
-    method public final void removeAction(@IdRes int actionId);
-    method public final void removeArgument(String argumentName);
-    method public final void setId(@IdRes int);
-    method public final void setLabel(CharSequence?);
-    method public final void setRoute(String?);
-    property public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> arguments;
-    property @IdRes public final int id;
-    property public final CharSequence? label;
-    property public final String navigatorName;
-    property public final androidx.navigation.NavGraph? parent;
-    property public final String? route;
-    field public static final androidx.navigation.NavDestination.Companion Companion;
-  }
-
-  @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface NavDestination.ClassType {
-    method public abstract kotlin.reflect.KClass<?> value();
-    property public abstract kotlin.reflect.KClass<?> value;
-  }
-
-  public static final class NavDestination.Companion {
-    method public kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
-    method protected <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
-  }
-
-  @androidx.navigation.NavDestinationDsl public class NavDestinationBuilder<D extends androidx.navigation.NavDestination> {
-    ctor @Deprecated public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, @IdRes int id);
-    ctor public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, String? route);
-    method @Deprecated public final void action(int actionId, kotlin.jvm.functions.Function1<? super androidx.navigation.NavActionBuilder,kotlin.Unit> actionBuilder);
-    method public final void argument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> argumentBuilder);
-    method public D build();
-    method public final void deepLink(String uriPattern);
-    method public final void deepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> navDeepLink);
-    method public final int getId();
-    method public final CharSequence? getLabel();
-    method protected final androidx.navigation.Navigator<? extends D> getNavigator();
-    method public final String? getRoute();
-    method public final void setLabel(CharSequence?);
-    property public final int id;
-    property public final CharSequence? label;
-    property protected final androidx.navigation.Navigator<? extends D> navigator;
-    property public final String? route;
-  }
-
-  @kotlin.DslMarker public @interface NavDestinationDsl {
-  }
-
-  public interface NavDirections {
-    method @IdRes public int getActionId();
-    method public android.os.Bundle getArguments();
-    property @IdRes public abstract int actionId;
-    property public abstract android.os.Bundle arguments;
-  }
-
-  public class NavGraph extends androidx.navigation.NavDestination implements java.lang.Iterable<androidx.navigation.NavDestination> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public NavGraph(androidx.navigation.Navigator<? extends androidx.navigation.NavGraph> navGraphNavigator);
-    method public final void addAll(androidx.navigation.NavGraph other);
-    method public final void addDestination(androidx.navigation.NavDestination node);
-    method public final void addDestinations(java.util.Collection<? extends androidx.navigation.NavDestination> nodes);
-    method public final void addDestinations(androidx.navigation.NavDestination... nodes);
-    method public final void clear();
-    method public final androidx.navigation.NavDestination? findNode(@IdRes int resId);
-    method public final androidx.navigation.NavDestination? findNode(String? route);
-    method public static final androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
-    method @Deprecated @IdRes public final int getStartDestination();
-    method @IdRes public final int getStartDestinationId();
-    method public final String? getStartDestinationRoute();
-    method public final java.util.Iterator<androidx.navigation.NavDestination> iterator();
-    method public final void remove(androidx.navigation.NavDestination node);
-    method public final void setStartDestination(int startDestId);
-    method public final void setStartDestination(String startDestRoute);
-    property @IdRes public final int startDestinationId;
-    property public final String? startDestinationRoute;
-    field public static final androidx.navigation.NavGraph.Companion Companion;
-  }
-
-  public static final class NavGraph.Companion {
-    method public androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
-  }
-
-  @androidx.navigation.NavDestinationDsl public class NavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.NavGraph> {
-    ctor @Deprecated public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
-    ctor public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, String? route);
-    method public final void addDestination(androidx.navigation.NavDestination destination);
-    method public androidx.navigation.NavGraph build();
-    method public final <D extends androidx.navigation.NavDestination> void destination(androidx.navigation.NavDestinationBuilder<? extends D> navDestination);
-    method public final androidx.navigation.NavigatorProvider getProvider();
-    method public final operator void unaryPlus(androidx.navigation.NavDestination);
-    property public final androidx.navigation.NavigatorProvider provider;
-  }
-
-  public final class NavGraphBuilderKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline void navigation(androidx.navigation.NavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavGraphKt {
-    method public static operator boolean contains(androidx.navigation.NavGraph, @IdRes int id);
-    method public static operator boolean contains(androidx.navigation.NavGraph, String route);
-    method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, @IdRes int id);
-    method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, String route);
-    method public static inline operator void minusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
-    method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
-    method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavGraph other);
-  }
-
-  @androidx.navigation.Navigator.Name("navigation") public class NavGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.NavGraph> {
-    ctor public NavGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public androidx.navigation.NavGraph createDestination();
-  }
-
-  public final class NavOptions {
-    method @AnimRes @AnimatorRes public int getEnterAnim();
-    method @AnimRes @AnimatorRes public int getExitAnim();
-    method @AnimRes @AnimatorRes public int getPopEnterAnim();
-    method @AnimRes @AnimatorRes public int getPopExitAnim();
-    method @Deprecated @IdRes public int getPopUpTo();
-    method @IdRes public int getPopUpToId();
-    method public String? getPopUpToRoute();
-    method public boolean isPopUpToInclusive();
-    method public boolean shouldLaunchSingleTop();
-    method public boolean shouldPopUpToSaveState();
-    method public boolean shouldRestoreState();
-    property @AnimRes @AnimatorRes public final int enterAnim;
-    property @AnimRes @AnimatorRes public final int exitAnim;
-    property @AnimRes @AnimatorRes public final int popEnterAnim;
-    property @AnimRes @AnimatorRes public final int popExitAnim;
-    property @IdRes public final int popUpToId;
-    property public final String? popUpToRoute;
-  }
-
-  public static final class NavOptions.Builder {
-    ctor public NavOptions.Builder();
-    method public androidx.navigation.NavOptions build();
-    method public androidx.navigation.NavOptions.Builder setEnterAnim(@AnimRes @AnimatorRes int enterAnim);
-    method public androidx.navigation.NavOptions.Builder setExitAnim(@AnimRes @AnimatorRes int exitAnim);
-    method public androidx.navigation.NavOptions.Builder setLaunchSingleTop(boolean singleTop);
-    method public androidx.navigation.NavOptions.Builder setPopEnterAnim(@AnimRes @AnimatorRes int popEnterAnim);
-    method public androidx.navigation.NavOptions.Builder setPopExitAnim(@AnimRes @AnimatorRes int popExitAnim);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive, optional boolean saveState);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive, optional boolean saveState);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive);
-    method public androidx.navigation.NavOptions.Builder setRestoreState(boolean restoreState);
-  }
-
-  @androidx.navigation.NavOptionsDsl public final class NavOptionsBuilder {
-    ctor public NavOptionsBuilder();
-    method public void anim(kotlin.jvm.functions.Function1<? super androidx.navigation.AnimBuilder,kotlin.Unit> animBuilder);
-    method public boolean getLaunchSingleTop();
-    method @Deprecated public int getPopUpTo();
-    method public int getPopUpToId();
-    method public String? getPopUpToRoute();
-    method public boolean getRestoreState();
-    method public void popUpTo(@IdRes int id, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
-    method public void popUpTo(String route, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
-    method public void setLaunchSingleTop(boolean);
-    method @Deprecated public void setPopUpTo(int);
-    method public void setRestoreState(boolean);
-    property public final boolean launchSingleTop;
-    property @Deprecated public final int popUpTo;
-    property public final int popUpToId;
-    property public final String? popUpToRoute;
-    property public final boolean restoreState;
-  }
-
-  public final class NavOptionsBuilderKt {
-    method public static androidx.navigation.NavOptions navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
-  }
-
-  @kotlin.DslMarker public @interface NavOptionsDsl {
-  }
-
-  public abstract class NavType<T> {
-    ctor public NavType(boolean isNullableAllowed);
-    method public static androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
-    method public abstract operator T? get(android.os.Bundle bundle, String key);
-    method public String getName();
-    method public boolean isNullableAllowed();
-    method public abstract T! parseValue(String value);
-    method public abstract void put(android.os.Bundle bundle, String key, T? value);
-    property public boolean isNullableAllowed;
-    property public String name;
-    field public static final androidx.navigation.NavType<boolean[]> BoolArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Boolean> BoolType;
-    field public static final androidx.navigation.NavType.Companion Companion;
-    field public static final androidx.navigation.NavType<float[]> FloatArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Float> FloatType;
-    field public static final androidx.navigation.NavType<int[]> IntArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Integer> IntType;
-    field public static final androidx.navigation.NavType<long[]> LongArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Long> LongType;
-    field public static final androidx.navigation.NavType<java.lang.Integer> ReferenceType;
-    field public static final androidx.navigation.NavType<java.lang.String[]> StringArrayType;
-    field public static final androidx.navigation.NavType<java.lang.String> StringType;
-  }
-
-  public static final class NavType.Companion {
-    method public androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
-  }
-
-  public static final class NavType.EnumType<D extends java.lang.Enum<?>> extends androidx.navigation.NavType.SerializableType<D> {
-    ctor public NavType.EnumType(Class<D> type);
-    property public String name;
-  }
-
-  public static final class NavType.ParcelableArrayType<D extends android.os.Parcelable> extends androidx.navigation.NavType<D[]> {
-    ctor public NavType.ParcelableArrayType(Class<D> type);
-    method public D![]? get(android.os.Bundle bundle, String key);
-    method public D![] parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D![]? value);
-    property public String name;
-  }
-
-  public static final class NavType.ParcelableType<D> extends androidx.navigation.NavType<D> {
-    ctor public NavType.ParcelableType(Class<D> type);
-    method public D? get(android.os.Bundle bundle, String key);
-    method public D! parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D? value);
-    property public String name;
-  }
-
-  public static final class NavType.SerializableArrayType<D extends java.io.Serializable> extends androidx.navigation.NavType<D[]> {
-    ctor public NavType.SerializableArrayType(Class<D> type);
-    method public D![]? get(android.os.Bundle bundle, String key);
-    method public D![] parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D![]? value);
-    property public String name;
-  }
-
-  public static class NavType.SerializableType<D extends java.io.Serializable> extends androidx.navigation.NavType<D> {
-    ctor public NavType.SerializableType(Class<D> type);
-    method public D? get(android.os.Bundle bundle, String key);
-    method public D parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D value);
-    property public String name;
-  }
-
-  public abstract class Navigator<D extends androidx.navigation.NavDestination> {
-    ctor public Navigator();
-    method public abstract D createDestination();
-    method protected final androidx.navigation.NavigatorState getState();
-    method public final boolean isAttached();
-    method public void navigate(java.util.List<androidx.navigation.NavBackStackEntry> entries, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method public androidx.navigation.NavDestination? navigate(D destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @CallSuper public void onAttach(androidx.navigation.NavigatorState state);
-    method public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
-    method public void onRestoreState(android.os.Bundle savedState);
-    method public android.os.Bundle? onSaveState();
-    method public void popBackStack(androidx.navigation.NavBackStackEntry popUpTo, boolean savedState);
-    method public boolean popBackStack();
-    property public final boolean isAttached;
-    property protected final androidx.navigation.NavigatorState state;
-  }
-
-  public static interface Navigator.Extras {
-  }
-
-  @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface Navigator.Name {
-    method public abstract String value();
-    property public abstract String value;
-  }
-
-  public class NavigatorProvider {
-    ctor public NavigatorProvider();
-    method public final androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method @CallSuper public androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method public final <T extends androidx.navigation.Navigator<?>> T getNavigator(Class<T> navigatorClass);
-    method @CallSuper public <T extends androidx.navigation.Navigator<?>> T getNavigator(String name);
-  }
-
-  public final class NavigatorProviderKt {
-    method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, String name);
-    method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, kotlin.reflect.KClass<T> clazz);
-    method public static inline operator void plusAssign(androidx.navigation.NavigatorProvider, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method public static inline operator androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? set(androidx.navigation.NavigatorProvider, String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-  }
-
-  public abstract class NavigatorState {
-    ctor public NavigatorState();
-    method public abstract androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
-    method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
-    method public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> getTransitionsInProgress();
-    method public void markTransitionComplete(androidx.navigation.NavBackStackEntry entry);
-    method @CallSuper public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
-    method public void pop(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
-    method public void popWithTransition(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
-    method public void push(androidx.navigation.NavBackStackEntry backStackEntry);
-    method public void pushWithTransition(androidx.navigation.NavBackStackEntry backStackEntry);
-    property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
-    property public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> transitionsInProgress;
-  }
-
-  @androidx.navigation.NavOptionsDsl public final class PopUpToBuilder {
-    ctor public PopUpToBuilder();
-    method public boolean getInclusive();
-    method public boolean getSaveState();
-    method public void setInclusive(boolean);
-    method public void setSaveState(boolean);
-    property public final boolean inclusive;
-    property public final boolean saveState;
-  }
-
-}
-
diff --git a/navigation/navigation-common/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-common/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index fe9681f..0000000
--- a/navigation/navigation-common/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,522 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation {
-
-  public final class ActionOnlyNavDirections implements androidx.navigation.NavDirections {
-    ctor public ActionOnlyNavDirections(int actionId);
-    method public int component1();
-    method public androidx.navigation.ActionOnlyNavDirections copy(int actionId);
-    method public int getActionId();
-    method public android.os.Bundle getArguments();
-    property public int actionId;
-    property public android.os.Bundle arguments;
-  }
-
-  @androidx.navigation.NavOptionsDsl public final class AnimBuilder {
-    ctor public AnimBuilder();
-    method public int getEnter();
-    method public int getExit();
-    method public int getPopEnter();
-    method public int getPopExit();
-    method public void setEnter(int);
-    method public void setExit(int);
-    method public void setPopEnter(int);
-    method public void setPopExit(int);
-    property public final int enter;
-    property public final int exit;
-    property public final int popEnter;
-    property public final int popExit;
-  }
-
-  public interface FloatingWindow {
-  }
-
-  public final class NamedNavArgument {
-    method public operator String component1();
-    method public operator androidx.navigation.NavArgument component2();
-    method public androidx.navigation.NavArgument getArgument();
-    method public String getName();
-    property public final androidx.navigation.NavArgument argument;
-    property public final String name;
-  }
-
-  public final class NamedNavArgumentKt {
-    method public static androidx.navigation.NamedNavArgument navArgument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavAction {
-    ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions, optional android.os.Bundle? defaultArguments);
-    ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions);
-    ctor public NavAction(@IdRes int destinationId);
-    method public android.os.Bundle? getDefaultArguments();
-    method public int getDestinationId();
-    method public androidx.navigation.NavOptions? getNavOptions();
-    method public void setDefaultArguments(android.os.Bundle?);
-    method public void setNavOptions(androidx.navigation.NavOptions?);
-    property public final android.os.Bundle? defaultArguments;
-    property public final int destinationId;
-    property public final androidx.navigation.NavOptions? navOptions;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class NavActionBuilder {
-    ctor public NavActionBuilder();
-    method public java.util.Map<java.lang.String,java.lang.Object> getDefaultArguments();
-    method public int getDestinationId();
-    method public void navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
-    method public void setDestinationId(int);
-    property public final java.util.Map<java.lang.String,java.lang.Object> defaultArguments;
-    property public final int destinationId;
-  }
-
-  public interface NavArgs {
-  }
-
-  public final class NavArgsLazy<Args extends androidx.navigation.NavArgs> implements kotlin.Lazy<Args> {
-    ctor public NavArgsLazy(kotlin.reflect.KClass<Args> navArgsClass, kotlin.jvm.functions.Function0<android.os.Bundle> argumentProducer);
-    method public Args getValue();
-    method public boolean isInitialized();
-    property public Args value;
-  }
-
-  public final class NavArgsLazyKt {
-  }
-
-  public final class NavArgument {
-    method public Object? getDefaultValue();
-    method public androidx.navigation.NavType<java.lang.Object> getType();
-    method public boolean isDefaultValuePresent();
-    method public boolean isNullable();
-    property public final Object? defaultValue;
-    property public final boolean isDefaultValuePresent;
-    property public final boolean isNullable;
-    property public final androidx.navigation.NavType<java.lang.Object> type;
-  }
-
-  public static final class NavArgument.Builder {
-    ctor public NavArgument.Builder();
-    method public androidx.navigation.NavArgument build();
-    method public androidx.navigation.NavArgument.Builder setDefaultValue(Object? defaultValue);
-    method public androidx.navigation.NavArgument.Builder setIsNullable(boolean isNullable);
-    method public <T> androidx.navigation.NavArgument.Builder setType(androidx.navigation.NavType<T> type);
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class NavArgumentBuilder {
-    ctor public NavArgumentBuilder();
-    method public androidx.navigation.NavArgument build();
-    method public Object? getDefaultValue();
-    method public boolean getNullable();
-    method public androidx.navigation.NavType<?> getType();
-    method public void setDefaultValue(Object?);
-    method public void setNullable(boolean);
-    method public void setType(androidx.navigation.NavType<?>);
-    property public final Object? defaultValue;
-    property public final boolean nullable;
-    property public final androidx.navigation.NavType<?> type;
-  }
-
-  public final class NavBackStackEntry implements androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
-    method public android.os.Bundle? getArguments();
-    method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
-    method public androidx.navigation.NavDestination getDestination();
-    method public String getId();
-    method public androidx.lifecycle.Lifecycle getLifecycle();
-    method public androidx.lifecycle.SavedStateHandle getSavedStateHandle();
-    method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
-    method public androidx.lifecycle.ViewModelStore getViewModelStore();
-    property public final android.os.Bundle? arguments;
-    property public final androidx.navigation.NavDestination destination;
-    property public final String id;
-    property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
-    property public androidx.savedstate.SavedStateRegistry savedStateRegistry;
-  }
-
-  public final class NavDeepLink {
-    method public String? getAction();
-    method public String? getMimeType();
-    method public String? getUriPattern();
-    property public final String? action;
-    property public final String? mimeType;
-    property public final String? uriPattern;
-  }
-
-  public static final class NavDeepLink.Builder {
-    method public androidx.navigation.NavDeepLink build();
-    method public static androidx.navigation.NavDeepLink.Builder fromAction(String action);
-    method public static androidx.navigation.NavDeepLink.Builder fromMimeType(String mimeType);
-    method public static androidx.navigation.NavDeepLink.Builder fromUriPattern(String uriPattern);
-    method public androidx.navigation.NavDeepLink.Builder setAction(String action);
-    method public androidx.navigation.NavDeepLink.Builder setMimeType(String mimeType);
-    method public androidx.navigation.NavDeepLink.Builder setUriPattern(String uriPattern);
-  }
-
-  @kotlin.DslMarker public @interface NavDeepLinkDsl {
-  }
-
-  @androidx.navigation.NavDeepLinkDsl public final class NavDeepLinkDslBuilder {
-    ctor public NavDeepLinkDslBuilder();
-    method public String? getAction();
-    method public String? getMimeType();
-    method public String? getUriPattern();
-    method public void setAction(String?);
-    method public void setMimeType(String?);
-    method public void setUriPattern(String?);
-    property public final String? action;
-    property public final String? mimeType;
-    property public final String? uriPattern;
-  }
-
-  public final class NavDeepLinkDslBuilderKt {
-    method public static androidx.navigation.NavDeepLink navDeepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> deepLinkBuilder);
-  }
-
-  public class NavDeepLinkRequest {
-    method public String? getAction();
-    method public String? getMimeType();
-    method public android.net.Uri? getUri();
-    property public String? action;
-    property public String? mimeType;
-    property public android.net.Uri? uri;
-  }
-
-  public static final class NavDeepLinkRequest.Builder {
-    method public androidx.navigation.NavDeepLinkRequest build();
-    method public static androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
-    method public static androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
-    method public static androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
-    method public androidx.navigation.NavDeepLinkRequest.Builder setAction(String action);
-    method public androidx.navigation.NavDeepLinkRequest.Builder setMimeType(String mimeType);
-    method public androidx.navigation.NavDeepLinkRequest.Builder setUri(android.net.Uri uri);
-    field public static final androidx.navigation.NavDeepLinkRequest.Builder.Companion Companion;
-  }
-
-  public static final class NavDeepLinkRequest.Builder.Companion {
-    method public androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
-    method public androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
-    method public androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
-  }
-
-  public class NavDestination {
-    ctor public NavDestination(String navigatorName);
-    ctor public NavDestination(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method public final void addArgument(String argumentName, androidx.navigation.NavArgument argument);
-    method public final void addDeepLink(String uriPattern);
-    method public final void addDeepLink(androidx.navigation.NavDeepLink navDeepLink);
-    method public final androidx.navigation.NavAction? getAction(@IdRes int id);
-    method public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> getArguments();
-    method public static final kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
-    method @IdRes public final int getId();
-    method public final CharSequence? getLabel();
-    method public final String getNavigatorName();
-    method public final androidx.navigation.NavGraph? getParent();
-    method public final String? getRoute();
-    method public boolean hasDeepLink(android.net.Uri deepLink);
-    method public boolean hasDeepLink(androidx.navigation.NavDeepLinkRequest deepLinkRequest);
-    method @CallSuper public void onInflate(android.content.Context context, android.util.AttributeSet attrs);
-    method protected static final <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
-    method public final void putAction(@IdRes int actionId, @IdRes int destId);
-    method public final void putAction(@IdRes int actionId, androidx.navigation.NavAction action);
-    method public final void removeAction(@IdRes int actionId);
-    method public final void removeArgument(String argumentName);
-    method public final void setId(@IdRes int);
-    method public final void setLabel(CharSequence?);
-    method public final void setRoute(String?);
-    property public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> arguments;
-    property @IdRes public final int id;
-    property public final CharSequence? label;
-    property public final String navigatorName;
-    property public final androidx.navigation.NavGraph? parent;
-    property public final String? route;
-    field public static final androidx.navigation.NavDestination.Companion Companion;
-  }
-
-  @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface NavDestination.ClassType {
-    method public abstract kotlin.reflect.KClass<?> value();
-    property public abstract kotlin.reflect.KClass<?> value;
-  }
-
-  public static final class NavDestination.Companion {
-    method public kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
-    method protected <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
-  }
-
-  @androidx.navigation.NavDestinationDsl public class NavDestinationBuilder<D extends androidx.navigation.NavDestination> {
-    ctor @Deprecated public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, @IdRes int id);
-    ctor public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, String? route);
-    method @Deprecated public final void action(int actionId, kotlin.jvm.functions.Function1<? super androidx.navigation.NavActionBuilder,kotlin.Unit> actionBuilder);
-    method public final void argument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> argumentBuilder);
-    method public D build();
-    method public final void deepLink(String uriPattern);
-    method public final void deepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> navDeepLink);
-    method public final int getId();
-    method public final CharSequence? getLabel();
-    method protected final androidx.navigation.Navigator<? extends D> getNavigator();
-    method public final String? getRoute();
-    method public final void setLabel(CharSequence?);
-    property public final int id;
-    property public final CharSequence? label;
-    property protected final androidx.navigation.Navigator<? extends D> navigator;
-    property public final String? route;
-  }
-
-  @kotlin.DslMarker public @interface NavDestinationDsl {
-  }
-
-  public interface NavDirections {
-    method @IdRes public int getActionId();
-    method public android.os.Bundle getArguments();
-    property @IdRes public abstract int actionId;
-    property public abstract android.os.Bundle arguments;
-  }
-
-  public class NavGraph extends androidx.navigation.NavDestination implements java.lang.Iterable<androidx.navigation.NavDestination> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public NavGraph(androidx.navigation.Navigator<? extends androidx.navigation.NavGraph> navGraphNavigator);
-    method public final void addAll(androidx.navigation.NavGraph other);
-    method public final void addDestination(androidx.navigation.NavDestination node);
-    method public final void addDestinations(java.util.Collection<? extends androidx.navigation.NavDestination> nodes);
-    method public final void addDestinations(androidx.navigation.NavDestination... nodes);
-    method public final void clear();
-    method public final androidx.navigation.NavDestination? findNode(@IdRes int resId);
-    method public final androidx.navigation.NavDestination? findNode(String? route);
-    method public static final androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
-    method @Deprecated @IdRes public final int getStartDestination();
-    method @IdRes public final int getStartDestinationId();
-    method public final String? getStartDestinationRoute();
-    method public final java.util.Iterator<androidx.navigation.NavDestination> iterator();
-    method public final void remove(androidx.navigation.NavDestination node);
-    method public final void setStartDestination(int startDestId);
-    method public final void setStartDestination(String startDestRoute);
-    property @IdRes public final int startDestinationId;
-    property public final String? startDestinationRoute;
-    field public static final androidx.navigation.NavGraph.Companion Companion;
-  }
-
-  public static final class NavGraph.Companion {
-    method public androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
-  }
-
-  @androidx.navigation.NavDestinationDsl public class NavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.NavGraph> {
-    ctor @Deprecated public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
-    ctor public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, String? route);
-    method public final void addDestination(androidx.navigation.NavDestination destination);
-    method public androidx.navigation.NavGraph build();
-    method public final <D extends androidx.navigation.NavDestination> void destination(androidx.navigation.NavDestinationBuilder<? extends D> navDestination);
-    method public final androidx.navigation.NavigatorProvider getProvider();
-    method public final operator void unaryPlus(androidx.navigation.NavDestination);
-    property public final androidx.navigation.NavigatorProvider provider;
-  }
-
-  public final class NavGraphBuilderKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline void navigation(androidx.navigation.NavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavGraphKt {
-    method public static operator boolean contains(androidx.navigation.NavGraph, @IdRes int id);
-    method public static operator boolean contains(androidx.navigation.NavGraph, String route);
-    method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, @IdRes int id);
-    method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, String route);
-    method public static inline operator void minusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
-    method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
-    method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavGraph other);
-  }
-
-  @androidx.navigation.Navigator.Name("navigation") public class NavGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.NavGraph> {
-    ctor public NavGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public androidx.navigation.NavGraph createDestination();
-  }
-
-  public final class NavOptions {
-    method @AnimRes @AnimatorRes public int getEnterAnim();
-    method @AnimRes @AnimatorRes public int getExitAnim();
-    method @AnimRes @AnimatorRes public int getPopEnterAnim();
-    method @AnimRes @AnimatorRes public int getPopExitAnim();
-    method @Deprecated @IdRes public int getPopUpTo();
-    method @IdRes public int getPopUpToId();
-    method public String? getPopUpToRoute();
-    method public boolean isPopUpToInclusive();
-    method public boolean shouldLaunchSingleTop();
-    method public boolean shouldPopUpToSaveState();
-    method public boolean shouldRestoreState();
-    property @AnimRes @AnimatorRes public final int enterAnim;
-    property @AnimRes @AnimatorRes public final int exitAnim;
-    property @AnimRes @AnimatorRes public final int popEnterAnim;
-    property @AnimRes @AnimatorRes public final int popExitAnim;
-    property @IdRes public final int popUpToId;
-    property public final String? popUpToRoute;
-  }
-
-  public static final class NavOptions.Builder {
-    ctor public NavOptions.Builder();
-    method public androidx.navigation.NavOptions build();
-    method public androidx.navigation.NavOptions.Builder setEnterAnim(@AnimRes @AnimatorRes int enterAnim);
-    method public androidx.navigation.NavOptions.Builder setExitAnim(@AnimRes @AnimatorRes int exitAnim);
-    method public androidx.navigation.NavOptions.Builder setLaunchSingleTop(boolean singleTop);
-    method public androidx.navigation.NavOptions.Builder setPopEnterAnim(@AnimRes @AnimatorRes int popEnterAnim);
-    method public androidx.navigation.NavOptions.Builder setPopExitAnim(@AnimRes @AnimatorRes int popExitAnim);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive, optional boolean saveState);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive, optional boolean saveState);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive);
-    method public androidx.navigation.NavOptions.Builder setRestoreState(boolean restoreState);
-  }
-
-  @androidx.navigation.NavOptionsDsl public final class NavOptionsBuilder {
-    ctor public NavOptionsBuilder();
-    method public void anim(kotlin.jvm.functions.Function1<? super androidx.navigation.AnimBuilder,kotlin.Unit> animBuilder);
-    method public boolean getLaunchSingleTop();
-    method @Deprecated public int getPopUpTo();
-    method public int getPopUpToId();
-    method public String? getPopUpToRoute();
-    method public boolean getRestoreState();
-    method public void popUpTo(@IdRes int id, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
-    method public void popUpTo(String route, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
-    method public void setLaunchSingleTop(boolean);
-    method @Deprecated public void setPopUpTo(int);
-    method public void setRestoreState(boolean);
-    property public final boolean launchSingleTop;
-    property @Deprecated public final int popUpTo;
-    property public final int popUpToId;
-    property public final String? popUpToRoute;
-    property public final boolean restoreState;
-  }
-
-  public final class NavOptionsBuilderKt {
-    method public static androidx.navigation.NavOptions navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
-  }
-
-  @kotlin.DslMarker public @interface NavOptionsDsl {
-  }
-
-  public abstract class NavType<T> {
-    ctor public NavType(boolean isNullableAllowed);
-    method public static androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
-    method public abstract operator T? get(android.os.Bundle bundle, String key);
-    method public String getName();
-    method public boolean isNullableAllowed();
-    method public abstract T! parseValue(String value);
-    method public abstract void put(android.os.Bundle bundle, String key, T? value);
-    property public boolean isNullableAllowed;
-    property public String name;
-    field public static final androidx.navigation.NavType<boolean[]> BoolArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Boolean> BoolType;
-    field public static final androidx.navigation.NavType.Companion Companion;
-    field public static final androidx.navigation.NavType<float[]> FloatArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Float> FloatType;
-    field public static final androidx.navigation.NavType<int[]> IntArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Integer> IntType;
-    field public static final androidx.navigation.NavType<long[]> LongArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Long> LongType;
-    field public static final androidx.navigation.NavType<java.lang.Integer> ReferenceType;
-    field public static final androidx.navigation.NavType<java.lang.String[]> StringArrayType;
-    field public static final androidx.navigation.NavType<java.lang.String> StringType;
-  }
-
-  public static final class NavType.Companion {
-    method public androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
-  }
-
-  public static final class NavType.EnumType<D extends java.lang.Enum<?>> extends androidx.navigation.NavType.SerializableType<D> {
-    ctor public NavType.EnumType(Class<D> type);
-    property public String name;
-  }
-
-  public static final class NavType.ParcelableArrayType<D extends android.os.Parcelable> extends androidx.navigation.NavType<D[]> {
-    ctor public NavType.ParcelableArrayType(Class<D> type);
-    method public D![]? get(android.os.Bundle bundle, String key);
-    method public D![] parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D![]? value);
-    property public String name;
-  }
-
-  public static final class NavType.ParcelableType<D> extends androidx.navigation.NavType<D> {
-    ctor public NavType.ParcelableType(Class<D> type);
-    method public D? get(android.os.Bundle bundle, String key);
-    method public D! parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D? value);
-    property public String name;
-  }
-
-  public static final class NavType.SerializableArrayType<D extends java.io.Serializable> extends androidx.navigation.NavType<D[]> {
-    ctor public NavType.SerializableArrayType(Class<D> type);
-    method public D![]? get(android.os.Bundle bundle, String key);
-    method public D![] parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D![]? value);
-    property public String name;
-  }
-
-  public static class NavType.SerializableType<D extends java.io.Serializable> extends androidx.navigation.NavType<D> {
-    ctor public NavType.SerializableType(Class<D> type);
-    method public D? get(android.os.Bundle bundle, String key);
-    method public D parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D value);
-    property public String name;
-  }
-
-  public abstract class Navigator<D extends androidx.navigation.NavDestination> {
-    ctor public Navigator();
-    method public abstract D createDestination();
-    method protected final androidx.navigation.NavigatorState getState();
-    method public final boolean isAttached();
-    method public void navigate(java.util.List<androidx.navigation.NavBackStackEntry> entries, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method public androidx.navigation.NavDestination? navigate(D destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @CallSuper public void onAttach(androidx.navigation.NavigatorState state);
-    method public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
-    method public void onRestoreState(android.os.Bundle savedState);
-    method public android.os.Bundle? onSaveState();
-    method public void popBackStack(androidx.navigation.NavBackStackEntry popUpTo, boolean savedState);
-    method public boolean popBackStack();
-    property public final boolean isAttached;
-    property protected final androidx.navigation.NavigatorState state;
-  }
-
-  public static interface Navigator.Extras {
-  }
-
-  @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface Navigator.Name {
-    method public abstract String value();
-    property public abstract String value;
-  }
-
-  public class NavigatorProvider {
-    ctor public NavigatorProvider();
-    method public final androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method @CallSuper public androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method public final <T extends androidx.navigation.Navigator<?>> T getNavigator(Class<T> navigatorClass);
-    method @CallSuper public <T extends androidx.navigation.Navigator<?>> T getNavigator(String name);
-  }
-
-  public final class NavigatorProviderKt {
-    method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, String name);
-    method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, kotlin.reflect.KClass<T> clazz);
-    method public static inline operator void plusAssign(androidx.navigation.NavigatorProvider, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method public static inline operator androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? set(androidx.navigation.NavigatorProvider, String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-  }
-
-  public abstract class NavigatorState {
-    ctor public NavigatorState();
-    method public abstract androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
-    method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
-    method public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> getTransitionsInProgress();
-    method public void markTransitionComplete(androidx.navigation.NavBackStackEntry entry);
-    method @CallSuper public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
-    method public void pop(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
-    method public void popWithTransition(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
-    method public void push(androidx.navigation.NavBackStackEntry backStackEntry);
-    method public void pushWithTransition(androidx.navigation.NavBackStackEntry backStackEntry);
-    property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
-    property public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> transitionsInProgress;
-  }
-
-  @androidx.navigation.NavOptionsDsl public final class PopUpToBuilder {
-    ctor public PopUpToBuilder();
-    method public boolean getInclusive();
-    method public boolean getSaveState();
-    method public void setInclusive(boolean);
-    method public void setSaveState(boolean);
-    property public final boolean inclusive;
-    property public final boolean saveState;
-  }
-
-}
-
diff --git a/navigation/navigation-common/api/res-2.5.0-beta01.txt b/navigation/navigation-common/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-common/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-common/api/restricted_2.5.0-beta01.txt b/navigation/navigation-common/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index fe9681f..0000000
--- a/navigation/navigation-common/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,522 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation {
-
-  public final class ActionOnlyNavDirections implements androidx.navigation.NavDirections {
-    ctor public ActionOnlyNavDirections(int actionId);
-    method public int component1();
-    method public androidx.navigation.ActionOnlyNavDirections copy(int actionId);
-    method public int getActionId();
-    method public android.os.Bundle getArguments();
-    property public int actionId;
-    property public android.os.Bundle arguments;
-  }
-
-  @androidx.navigation.NavOptionsDsl public final class AnimBuilder {
-    ctor public AnimBuilder();
-    method public int getEnter();
-    method public int getExit();
-    method public int getPopEnter();
-    method public int getPopExit();
-    method public void setEnter(int);
-    method public void setExit(int);
-    method public void setPopEnter(int);
-    method public void setPopExit(int);
-    property public final int enter;
-    property public final int exit;
-    property public final int popEnter;
-    property public final int popExit;
-  }
-
-  public interface FloatingWindow {
-  }
-
-  public final class NamedNavArgument {
-    method public operator String component1();
-    method public operator androidx.navigation.NavArgument component2();
-    method public androidx.navigation.NavArgument getArgument();
-    method public String getName();
-    property public final androidx.navigation.NavArgument argument;
-    property public final String name;
-  }
-
-  public final class NamedNavArgumentKt {
-    method public static androidx.navigation.NamedNavArgument navArgument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavAction {
-    ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions, optional android.os.Bundle? defaultArguments);
-    ctor public NavAction(@IdRes int destinationId, optional androidx.navigation.NavOptions? navOptions);
-    ctor public NavAction(@IdRes int destinationId);
-    method public android.os.Bundle? getDefaultArguments();
-    method public int getDestinationId();
-    method public androidx.navigation.NavOptions? getNavOptions();
-    method public void setDefaultArguments(android.os.Bundle?);
-    method public void setNavOptions(androidx.navigation.NavOptions?);
-    property public final android.os.Bundle? defaultArguments;
-    property public final int destinationId;
-    property public final androidx.navigation.NavOptions? navOptions;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class NavActionBuilder {
-    ctor public NavActionBuilder();
-    method public java.util.Map<java.lang.String,java.lang.Object> getDefaultArguments();
-    method public int getDestinationId();
-    method public void navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
-    method public void setDestinationId(int);
-    property public final java.util.Map<java.lang.String,java.lang.Object> defaultArguments;
-    property public final int destinationId;
-  }
-
-  public interface NavArgs {
-  }
-
-  public final class NavArgsLazy<Args extends androidx.navigation.NavArgs> implements kotlin.Lazy<Args> {
-    ctor public NavArgsLazy(kotlin.reflect.KClass<Args> navArgsClass, kotlin.jvm.functions.Function0<android.os.Bundle> argumentProducer);
-    method public Args getValue();
-    method public boolean isInitialized();
-    property public Args value;
-  }
-
-  public final class NavArgsLazyKt {
-  }
-
-  public final class NavArgument {
-    method public Object? getDefaultValue();
-    method public androidx.navigation.NavType<java.lang.Object> getType();
-    method public boolean isDefaultValuePresent();
-    method public boolean isNullable();
-    property public final Object? defaultValue;
-    property public final boolean isDefaultValuePresent;
-    property public final boolean isNullable;
-    property public final androidx.navigation.NavType<java.lang.Object> type;
-  }
-
-  public static final class NavArgument.Builder {
-    ctor public NavArgument.Builder();
-    method public androidx.navigation.NavArgument build();
-    method public androidx.navigation.NavArgument.Builder setDefaultValue(Object? defaultValue);
-    method public androidx.navigation.NavArgument.Builder setIsNullable(boolean isNullable);
-    method public <T> androidx.navigation.NavArgument.Builder setType(androidx.navigation.NavType<T> type);
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class NavArgumentBuilder {
-    ctor public NavArgumentBuilder();
-    method public androidx.navigation.NavArgument build();
-    method public Object? getDefaultValue();
-    method public boolean getNullable();
-    method public androidx.navigation.NavType<?> getType();
-    method public void setDefaultValue(Object?);
-    method public void setNullable(boolean);
-    method public void setType(androidx.navigation.NavType<?>);
-    property public final Object? defaultValue;
-    property public final boolean nullable;
-    property public final androidx.navigation.NavType<?> type;
-  }
-
-  public final class NavBackStackEntry implements androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
-    method public android.os.Bundle? getArguments();
-    method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
-    method public androidx.navigation.NavDestination getDestination();
-    method public String getId();
-    method public androidx.lifecycle.Lifecycle getLifecycle();
-    method public androidx.lifecycle.SavedStateHandle getSavedStateHandle();
-    method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
-    method public androidx.lifecycle.ViewModelStore getViewModelStore();
-    property public final android.os.Bundle? arguments;
-    property public final androidx.navigation.NavDestination destination;
-    property public final String id;
-    property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
-    property public androidx.savedstate.SavedStateRegistry savedStateRegistry;
-  }
-
-  public final class NavDeepLink {
-    method public String? getAction();
-    method public String? getMimeType();
-    method public String? getUriPattern();
-    property public final String? action;
-    property public final String? mimeType;
-    property public final String? uriPattern;
-  }
-
-  public static final class NavDeepLink.Builder {
-    method public androidx.navigation.NavDeepLink build();
-    method public static androidx.navigation.NavDeepLink.Builder fromAction(String action);
-    method public static androidx.navigation.NavDeepLink.Builder fromMimeType(String mimeType);
-    method public static androidx.navigation.NavDeepLink.Builder fromUriPattern(String uriPattern);
-    method public androidx.navigation.NavDeepLink.Builder setAction(String action);
-    method public androidx.navigation.NavDeepLink.Builder setMimeType(String mimeType);
-    method public androidx.navigation.NavDeepLink.Builder setUriPattern(String uriPattern);
-  }
-
-  @kotlin.DslMarker public @interface NavDeepLinkDsl {
-  }
-
-  @androidx.navigation.NavDeepLinkDsl public final class NavDeepLinkDslBuilder {
-    ctor public NavDeepLinkDslBuilder();
-    method public String? getAction();
-    method public String? getMimeType();
-    method public String? getUriPattern();
-    method public void setAction(String?);
-    method public void setMimeType(String?);
-    method public void setUriPattern(String?);
-    property public final String? action;
-    property public final String? mimeType;
-    property public final String? uriPattern;
-  }
-
-  public final class NavDeepLinkDslBuilderKt {
-    method public static androidx.navigation.NavDeepLink navDeepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> deepLinkBuilder);
-  }
-
-  public class NavDeepLinkRequest {
-    method public String? getAction();
-    method public String? getMimeType();
-    method public android.net.Uri? getUri();
-    property public String? action;
-    property public String? mimeType;
-    property public android.net.Uri? uri;
-  }
-
-  public static final class NavDeepLinkRequest.Builder {
-    method public androidx.navigation.NavDeepLinkRequest build();
-    method public static androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
-    method public static androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
-    method public static androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
-    method public androidx.navigation.NavDeepLinkRequest.Builder setAction(String action);
-    method public androidx.navigation.NavDeepLinkRequest.Builder setMimeType(String mimeType);
-    method public androidx.navigation.NavDeepLinkRequest.Builder setUri(android.net.Uri uri);
-    field public static final androidx.navigation.NavDeepLinkRequest.Builder.Companion Companion;
-  }
-
-  public static final class NavDeepLinkRequest.Builder.Companion {
-    method public androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
-    method public androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
-    method public androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
-  }
-
-  public class NavDestination {
-    ctor public NavDestination(String navigatorName);
-    ctor public NavDestination(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method public final void addArgument(String argumentName, androidx.navigation.NavArgument argument);
-    method public final void addDeepLink(String uriPattern);
-    method public final void addDeepLink(androidx.navigation.NavDeepLink navDeepLink);
-    method public final androidx.navigation.NavAction? getAction(@IdRes int id);
-    method public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> getArguments();
-    method public static final kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
-    method @IdRes public final int getId();
-    method public final CharSequence? getLabel();
-    method public final String getNavigatorName();
-    method public final androidx.navigation.NavGraph? getParent();
-    method public final String? getRoute();
-    method public boolean hasDeepLink(android.net.Uri deepLink);
-    method public boolean hasDeepLink(androidx.navigation.NavDeepLinkRequest deepLinkRequest);
-    method @CallSuper public void onInflate(android.content.Context context, android.util.AttributeSet attrs);
-    method protected static final <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
-    method public final void putAction(@IdRes int actionId, @IdRes int destId);
-    method public final void putAction(@IdRes int actionId, androidx.navigation.NavAction action);
-    method public final void removeAction(@IdRes int actionId);
-    method public final void removeArgument(String argumentName);
-    method public final void setId(@IdRes int);
-    method public final void setLabel(CharSequence?);
-    method public final void setRoute(String?);
-    property public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> arguments;
-    property @IdRes public final int id;
-    property public final CharSequence? label;
-    property public final String navigatorName;
-    property public final androidx.navigation.NavGraph? parent;
-    property public final String? route;
-    field public static final androidx.navigation.NavDestination.Companion Companion;
-  }
-
-  @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface NavDestination.ClassType {
-    method public abstract kotlin.reflect.KClass<?> value();
-    property public abstract kotlin.reflect.KClass<?> value;
-  }
-
-  public static final class NavDestination.Companion {
-    method public kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
-    method protected <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
-  }
-
-  @androidx.navigation.NavDestinationDsl public class NavDestinationBuilder<D extends androidx.navigation.NavDestination> {
-    ctor @Deprecated public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, @IdRes int id);
-    ctor public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, String? route);
-    method @Deprecated public final void action(int actionId, kotlin.jvm.functions.Function1<? super androidx.navigation.NavActionBuilder,kotlin.Unit> actionBuilder);
-    method public final void argument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> argumentBuilder);
-    method public D build();
-    method public final void deepLink(String uriPattern);
-    method public final void deepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> navDeepLink);
-    method public final int getId();
-    method public final CharSequence? getLabel();
-    method protected final androidx.navigation.Navigator<? extends D> getNavigator();
-    method public final String? getRoute();
-    method public final void setLabel(CharSequence?);
-    property public final int id;
-    property public final CharSequence? label;
-    property protected final androidx.navigation.Navigator<? extends D> navigator;
-    property public final String? route;
-  }
-
-  @kotlin.DslMarker public @interface NavDestinationDsl {
-  }
-
-  public interface NavDirections {
-    method @IdRes public int getActionId();
-    method public android.os.Bundle getArguments();
-    property @IdRes public abstract int actionId;
-    property public abstract android.os.Bundle arguments;
-  }
-
-  public class NavGraph extends androidx.navigation.NavDestination implements java.lang.Iterable<androidx.navigation.NavDestination> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public NavGraph(androidx.navigation.Navigator<? extends androidx.navigation.NavGraph> navGraphNavigator);
-    method public final void addAll(androidx.navigation.NavGraph other);
-    method public final void addDestination(androidx.navigation.NavDestination node);
-    method public final void addDestinations(java.util.Collection<? extends androidx.navigation.NavDestination> nodes);
-    method public final void addDestinations(androidx.navigation.NavDestination... nodes);
-    method public final void clear();
-    method public final androidx.navigation.NavDestination? findNode(@IdRes int resId);
-    method public final androidx.navigation.NavDestination? findNode(String? route);
-    method public static final androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
-    method @Deprecated @IdRes public final int getStartDestination();
-    method @IdRes public final int getStartDestinationId();
-    method public final String? getStartDestinationRoute();
-    method public final java.util.Iterator<androidx.navigation.NavDestination> iterator();
-    method public final void remove(androidx.navigation.NavDestination node);
-    method public final void setStartDestination(int startDestId);
-    method public final void setStartDestination(String startDestRoute);
-    property @IdRes public final int startDestinationId;
-    property public final String? startDestinationRoute;
-    field public static final androidx.navigation.NavGraph.Companion Companion;
-  }
-
-  public static final class NavGraph.Companion {
-    method public androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
-  }
-
-  @androidx.navigation.NavDestinationDsl public class NavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.NavGraph> {
-    ctor @Deprecated public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
-    ctor public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, String? route);
-    method public final void addDestination(androidx.navigation.NavDestination destination);
-    method public androidx.navigation.NavGraph build();
-    method public final <D extends androidx.navigation.NavDestination> void destination(androidx.navigation.NavDestinationBuilder<? extends D> navDestination);
-    method public final androidx.navigation.NavigatorProvider getProvider();
-    method public final operator void unaryPlus(androidx.navigation.NavDestination);
-    property public final androidx.navigation.NavigatorProvider provider;
-  }
-
-  public final class NavGraphBuilderKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline void navigation(androidx.navigation.NavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavGraphKt {
-    method public static operator boolean contains(androidx.navigation.NavGraph, @IdRes int id);
-    method public static operator boolean contains(androidx.navigation.NavGraph, String route);
-    method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, @IdRes int id);
-    method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, String route);
-    method public static inline operator void minusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
-    method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
-    method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavGraph other);
-  }
-
-  @androidx.navigation.Navigator.Name("navigation") public class NavGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.NavGraph> {
-    ctor public NavGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public androidx.navigation.NavGraph createDestination();
-  }
-
-  public final class NavOptions {
-    method @AnimRes @AnimatorRes public int getEnterAnim();
-    method @AnimRes @AnimatorRes public int getExitAnim();
-    method @AnimRes @AnimatorRes public int getPopEnterAnim();
-    method @AnimRes @AnimatorRes public int getPopExitAnim();
-    method @Deprecated @IdRes public int getPopUpTo();
-    method @IdRes public int getPopUpToId();
-    method public String? getPopUpToRoute();
-    method public boolean isPopUpToInclusive();
-    method public boolean shouldLaunchSingleTop();
-    method public boolean shouldPopUpToSaveState();
-    method public boolean shouldRestoreState();
-    property @AnimRes @AnimatorRes public final int enterAnim;
-    property @AnimRes @AnimatorRes public final int exitAnim;
-    property @AnimRes @AnimatorRes public final int popEnterAnim;
-    property @AnimRes @AnimatorRes public final int popExitAnim;
-    property @IdRes public final int popUpToId;
-    property public final String? popUpToRoute;
-  }
-
-  public static final class NavOptions.Builder {
-    ctor public NavOptions.Builder();
-    method public androidx.navigation.NavOptions build();
-    method public androidx.navigation.NavOptions.Builder setEnterAnim(@AnimRes @AnimatorRes int enterAnim);
-    method public androidx.navigation.NavOptions.Builder setExitAnim(@AnimRes @AnimatorRes int exitAnim);
-    method public androidx.navigation.NavOptions.Builder setLaunchSingleTop(boolean singleTop);
-    method public androidx.navigation.NavOptions.Builder setPopEnterAnim(@AnimRes @AnimatorRes int popEnterAnim);
-    method public androidx.navigation.NavOptions.Builder setPopExitAnim(@AnimRes @AnimatorRes int popExitAnim);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive, optional boolean saveState);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive, optional boolean saveState);
-    method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive);
-    method public androidx.navigation.NavOptions.Builder setRestoreState(boolean restoreState);
-  }
-
-  @androidx.navigation.NavOptionsDsl public final class NavOptionsBuilder {
-    ctor public NavOptionsBuilder();
-    method public void anim(kotlin.jvm.functions.Function1<? super androidx.navigation.AnimBuilder,kotlin.Unit> animBuilder);
-    method public boolean getLaunchSingleTop();
-    method @Deprecated public int getPopUpTo();
-    method public int getPopUpToId();
-    method public String? getPopUpToRoute();
-    method public boolean getRestoreState();
-    method public void popUpTo(@IdRes int id, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
-    method public void popUpTo(String route, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
-    method public void setLaunchSingleTop(boolean);
-    method @Deprecated public void setPopUpTo(int);
-    method public void setRestoreState(boolean);
-    property public final boolean launchSingleTop;
-    property @Deprecated public final int popUpTo;
-    property public final int popUpToId;
-    property public final String? popUpToRoute;
-    property public final boolean restoreState;
-  }
-
-  public final class NavOptionsBuilderKt {
-    method public static androidx.navigation.NavOptions navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
-  }
-
-  @kotlin.DslMarker public @interface NavOptionsDsl {
-  }
-
-  public abstract class NavType<T> {
-    ctor public NavType(boolean isNullableAllowed);
-    method public static androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
-    method public abstract operator T? get(android.os.Bundle bundle, String key);
-    method public String getName();
-    method public boolean isNullableAllowed();
-    method public abstract T! parseValue(String value);
-    method public abstract void put(android.os.Bundle bundle, String key, T? value);
-    property public boolean isNullableAllowed;
-    property public String name;
-    field public static final androidx.navigation.NavType<boolean[]> BoolArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Boolean> BoolType;
-    field public static final androidx.navigation.NavType.Companion Companion;
-    field public static final androidx.navigation.NavType<float[]> FloatArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Float> FloatType;
-    field public static final androidx.navigation.NavType<int[]> IntArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Integer> IntType;
-    field public static final androidx.navigation.NavType<long[]> LongArrayType;
-    field public static final androidx.navigation.NavType<java.lang.Long> LongType;
-    field public static final androidx.navigation.NavType<java.lang.Integer> ReferenceType;
-    field public static final androidx.navigation.NavType<java.lang.String[]> StringArrayType;
-    field public static final androidx.navigation.NavType<java.lang.String> StringType;
-  }
-
-  public static final class NavType.Companion {
-    method public androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
-  }
-
-  public static final class NavType.EnumType<D extends java.lang.Enum<?>> extends androidx.navigation.NavType.SerializableType<D> {
-    ctor public NavType.EnumType(Class<D> type);
-    property public String name;
-  }
-
-  public static final class NavType.ParcelableArrayType<D extends android.os.Parcelable> extends androidx.navigation.NavType<D[]> {
-    ctor public NavType.ParcelableArrayType(Class<D> type);
-    method public D![]? get(android.os.Bundle bundle, String key);
-    method public D![] parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D![]? value);
-    property public String name;
-  }
-
-  public static final class NavType.ParcelableType<D> extends androidx.navigation.NavType<D> {
-    ctor public NavType.ParcelableType(Class<D> type);
-    method public D? get(android.os.Bundle bundle, String key);
-    method public D! parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D? value);
-    property public String name;
-  }
-
-  public static final class NavType.SerializableArrayType<D extends java.io.Serializable> extends androidx.navigation.NavType<D[]> {
-    ctor public NavType.SerializableArrayType(Class<D> type);
-    method public D![]? get(android.os.Bundle bundle, String key);
-    method public D![] parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D![]? value);
-    property public String name;
-  }
-
-  public static class NavType.SerializableType<D extends java.io.Serializable> extends androidx.navigation.NavType<D> {
-    ctor public NavType.SerializableType(Class<D> type);
-    method public D? get(android.os.Bundle bundle, String key);
-    method public D parseValue(String value);
-    method public void put(android.os.Bundle bundle, String key, D value);
-    property public String name;
-  }
-
-  public abstract class Navigator<D extends androidx.navigation.NavDestination> {
-    ctor public Navigator();
-    method public abstract D createDestination();
-    method protected final androidx.navigation.NavigatorState getState();
-    method public final boolean isAttached();
-    method public void navigate(java.util.List<androidx.navigation.NavBackStackEntry> entries, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method public androidx.navigation.NavDestination? navigate(D destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @CallSuper public void onAttach(androidx.navigation.NavigatorState state);
-    method public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
-    method public void onRestoreState(android.os.Bundle savedState);
-    method public android.os.Bundle? onSaveState();
-    method public void popBackStack(androidx.navigation.NavBackStackEntry popUpTo, boolean savedState);
-    method public boolean popBackStack();
-    property public final boolean isAttached;
-    property protected final androidx.navigation.NavigatorState state;
-  }
-
-  public static interface Navigator.Extras {
-  }
-
-  @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface Navigator.Name {
-    method public abstract String value();
-    property public abstract String value;
-  }
-
-  public class NavigatorProvider {
-    ctor public NavigatorProvider();
-    method public final androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method @CallSuper public androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method public final <T extends androidx.navigation.Navigator<?>> T getNavigator(Class<T> navigatorClass);
-    method @CallSuper public <T extends androidx.navigation.Navigator<?>> T getNavigator(String name);
-  }
-
-  public final class NavigatorProviderKt {
-    method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, String name);
-    method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, kotlin.reflect.KClass<T> clazz);
-    method public static inline operator void plusAssign(androidx.navigation.NavigatorProvider, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-    method public static inline operator androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? set(androidx.navigation.NavigatorProvider, String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
-  }
-
-  public abstract class NavigatorState {
-    ctor public NavigatorState();
-    method public abstract androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
-    method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
-    method public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> getTransitionsInProgress();
-    method public void markTransitionComplete(androidx.navigation.NavBackStackEntry entry);
-    method @CallSuper public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
-    method public void pop(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
-    method public void popWithTransition(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
-    method public void push(androidx.navigation.NavBackStackEntry backStackEntry);
-    method public void pushWithTransition(androidx.navigation.NavBackStackEntry backStackEntry);
-    property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
-    property public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> transitionsInProgress;
-  }
-
-  @androidx.navigation.NavOptionsDsl public final class PopUpToBuilder {
-    ctor public PopUpToBuilder();
-    method public boolean getInclusive();
-    method public boolean getSaveState();
-    method public void setInclusive(boolean);
-    method public void setSaveState(boolean);
-    property public final boolean inclusive;
-    property public final boolean saveState;
-  }
-
-}
-
diff --git a/navigation/navigation-compose/api/2.5.0-beta01.txt b/navigation/navigation-compose/api/2.5.0-beta01.txt
deleted file mode 100644
index d46757e..0000000
--- a/navigation/navigation-compose/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.compose {
-
-  @androidx.navigation.Navigator.Name("composable") public final class ComposeNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.ComposeNavigator.Destination> {
-    ctor public ComposeNavigator();
-    method public androidx.navigation.compose.ComposeNavigator.Destination createDestination();
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class ComposeNavigator.Destination extends androidx.navigation.NavDestination {
-    ctor public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-  }
-
-  public final class DialogHostKt {
-    method @androidx.compose.runtime.Composable public static void DialogHost(androidx.navigation.compose.DialogNavigator dialogNavigator);
-  }
-
-  @androidx.navigation.Navigator.Name("dialog") public final class DialogNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.DialogNavigator.Destination> {
-    ctor public DialogNavigator();
-    method public androidx.navigation.compose.DialogNavigator.Destination createDestination();
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class DialogNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
-    ctor public DialogNavigator.Destination(androidx.navigation.compose.DialogNavigator navigator, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-  }
-
-  public final class NavBackStackEntryProviderKt {
-    method @androidx.compose.runtime.Composable public static void LocalOwnersProvider(androidx.navigation.NavBackStackEntry, androidx.compose.runtime.saveable.SaveableStateHolder saveableStateHolder, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-  }
-
-  public final class NavGraphBuilderKt {
-    method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-    method public static void dialog(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-    method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavHostControllerKt {
-    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.navigation.NavBackStackEntry> currentBackStackEntryAsState(androidx.navigation.NavController);
-    method @androidx.compose.runtime.Composable public static androidx.navigation.NavHostController rememberNavController(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>... navigators);
-  }
-
-  public final class NavHostKt {
-    method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
-  }
-
-}
-
diff --git a/navigation/navigation-compose/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-compose/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index d46757e..0000000
--- a/navigation/navigation-compose/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.compose {
-
-  @androidx.navigation.Navigator.Name("composable") public final class ComposeNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.ComposeNavigator.Destination> {
-    ctor public ComposeNavigator();
-    method public androidx.navigation.compose.ComposeNavigator.Destination createDestination();
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class ComposeNavigator.Destination extends androidx.navigation.NavDestination {
-    ctor public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-  }
-
-  public final class DialogHostKt {
-    method @androidx.compose.runtime.Composable public static void DialogHost(androidx.navigation.compose.DialogNavigator dialogNavigator);
-  }
-
-  @androidx.navigation.Navigator.Name("dialog") public final class DialogNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.DialogNavigator.Destination> {
-    ctor public DialogNavigator();
-    method public androidx.navigation.compose.DialogNavigator.Destination createDestination();
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class DialogNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
-    ctor public DialogNavigator.Destination(androidx.navigation.compose.DialogNavigator navigator, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-  }
-
-  public final class NavBackStackEntryProviderKt {
-    method @androidx.compose.runtime.Composable public static void LocalOwnersProvider(androidx.navigation.NavBackStackEntry, androidx.compose.runtime.saveable.SaveableStateHolder saveableStateHolder, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-  }
-
-  public final class NavGraphBuilderKt {
-    method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-    method public static void dialog(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-    method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavHostControllerKt {
-    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.navigation.NavBackStackEntry> currentBackStackEntryAsState(androidx.navigation.NavController);
-    method @androidx.compose.runtime.Composable public static androidx.navigation.NavHostController rememberNavController(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>... navigators);
-  }
-
-  public final class NavHostKt {
-    method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
-  }
-
-}
-
diff --git a/navigation/navigation-compose/api/restricted_2.5.0-beta01.txt b/navigation/navigation-compose/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index d46757e..0000000
--- a/navigation/navigation-compose/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.compose {
-
-  @androidx.navigation.Navigator.Name("composable") public final class ComposeNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.ComposeNavigator.Destination> {
-    ctor public ComposeNavigator();
-    method public androidx.navigation.compose.ComposeNavigator.Destination createDestination();
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class ComposeNavigator.Destination extends androidx.navigation.NavDestination {
-    ctor public ComposeNavigator.Destination(androidx.navigation.compose.ComposeNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-  }
-
-  public final class DialogHostKt {
-    method @androidx.compose.runtime.Composable public static void DialogHost(androidx.navigation.compose.DialogNavigator dialogNavigator);
-  }
-
-  @androidx.navigation.Navigator.Name("dialog") public final class DialogNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.DialogNavigator.Destination> {
-    ctor public DialogNavigator();
-    method public androidx.navigation.compose.DialogNavigator.Destination createDestination();
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class DialogNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
-    ctor public DialogNavigator.Destination(androidx.navigation.compose.DialogNavigator navigator, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-  }
-
-  public final class NavBackStackEntryProviderKt {
-    method @androidx.compose.runtime.Composable public static void LocalOwnersProvider(androidx.navigation.NavBackStackEntry, androidx.compose.runtime.saveable.SaveableStateHolder saveableStateHolder, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-  }
-
-  public final class NavGraphBuilderKt {
-    method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-    method public static void dialog(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
-    method public static void navigation(androidx.navigation.NavGraphBuilder, String startDestination, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavHostControllerKt {
-    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.navigation.NavBackStackEntry> currentBackStackEntryAsState(androidx.navigation.NavController);
-    method @androidx.compose.runtime.Composable public static androidx.navigation.NavHostController rememberNavController(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>... navigators);
-  }
-
-  public final class NavHostKt {
-    method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method @androidx.compose.runtime.Composable public static void NavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier);
-  }
-
-}
-
diff --git a/navigation/navigation-dynamic-features-fragment/api/2.5.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/2.5.0-beta01.txt
deleted file mode 100644
index fe32d9b..0000000
--- a/navigation/navigation-dynamic-features-fragment/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.dynamicfeatures.fragment {
-
-  @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
-    ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
-  }
-
-  public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
-    ctor public DynamicFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    ctor public DynamicFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
-    method public String? getModuleName();
-    method public void setModuleName(String?);
-    property public final String? moduleName;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
-    ctor @Deprecated public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, @IdRes int id, String fragmentClassName);
-    ctor public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, String route, String fragmentClassName);
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination build();
-    method public String? getModuleName();
-    method public void setModuleName(String?);
-    property public final String? moduleName;
-  }
-
-  public final class DynamicFragmentNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-  }
-
-  public class DynamicNavHostFragment extends androidx.navigation.fragment.NavHostFragment {
-    ctor public DynamicNavHostFragment();
-    method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
-    method protected com.google.android.play.core.splitinstall.SplitInstallManager createSplitInstallManager();
-    field public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment.Companion Companion;
-  }
-
-  public static final class DynamicNavHostFragment.Companion {
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
-  }
-
-}
-
-package androidx.navigation.dynamicfeatures.fragment.ui {
-
-  public abstract class AbstractProgressFragment extends androidx.fragment.app.Fragment {
-    ctor public AbstractProgressFragment();
-    ctor public AbstractProgressFragment(int contentLayoutId);
-    method protected abstract void onCancelled();
-    method protected abstract void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
-    method protected void onInstalled();
-    method protected abstract void onProgress(@com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus int status, long bytesDownloaded, long bytesTotal);
-  }
-
-  public final class DefaultProgressFragment extends androidx.navigation.dynamicfeatures.fragment.ui.AbstractProgressFragment {
-    ctor public DefaultProgressFragment();
-    method protected void onCancelled();
-    method protected void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
-    method protected void onProgress(int status, long bytesDownloaded, long bytesTotal);
-  }
-
-}
-
diff --git a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index fe32d9b..0000000
--- a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.dynamicfeatures.fragment {
-
-  @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
-    ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
-  }
-
-  public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
-    ctor public DynamicFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    ctor public DynamicFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
-    method public String? getModuleName();
-    method public void setModuleName(String?);
-    property public final String? moduleName;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
-    ctor @Deprecated public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, @IdRes int id, String fragmentClassName);
-    ctor public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, String route, String fragmentClassName);
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination build();
-    method public String? getModuleName();
-    method public void setModuleName(String?);
-    property public final String? moduleName;
-  }
-
-  public final class DynamicFragmentNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-  }
-
-  public class DynamicNavHostFragment extends androidx.navigation.fragment.NavHostFragment {
-    ctor public DynamicNavHostFragment();
-    method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
-    method protected com.google.android.play.core.splitinstall.SplitInstallManager createSplitInstallManager();
-    field public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment.Companion Companion;
-  }
-
-  public static final class DynamicNavHostFragment.Companion {
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
-  }
-
-}
-
-package androidx.navigation.dynamicfeatures.fragment.ui {
-
-  public abstract class AbstractProgressFragment extends androidx.fragment.app.Fragment {
-    ctor public AbstractProgressFragment();
-    ctor public AbstractProgressFragment(int contentLayoutId);
-    method protected abstract void onCancelled();
-    method protected abstract void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
-    method protected void onInstalled();
-    method protected abstract void onProgress(@com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus int status, long bytesDownloaded, long bytesTotal);
-  }
-
-  public final class DefaultProgressFragment extends androidx.navigation.dynamicfeatures.fragment.ui.AbstractProgressFragment {
-    ctor public DefaultProgressFragment();
-    method protected void onCancelled();
-    method protected void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
-    method protected void onProgress(int status, long bytesDownloaded, long bytesTotal);
-  }
-
-}
-
diff --git a/navigation/navigation-dynamic-features-fragment/api/res-2.5.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-dynamic-features-fragment/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-dynamic-features-fragment/api/restricted_2.5.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index fe32d9b..0000000
--- a/navigation/navigation-dynamic-features-fragment/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.dynamicfeatures.fragment {
-
-  @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
-    ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
-  }
-
-  public static final class DynamicFragmentNavigator.Destination extends androidx.navigation.fragment.FragmentNavigator.Destination {
-    ctor public DynamicFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    ctor public DynamicFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
-    method public String? getModuleName();
-    method public void setModuleName(String?);
-    property public final String? moduleName;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
-    ctor @Deprecated public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, @IdRes int id, String fragmentClassName);
-    ctor public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, String route, String fragmentClassName);
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination build();
-    method public String? getModuleName();
-    method public void setModuleName(String?);
-    property public final String? moduleName;
-  }
-
-  public final class DynamicFragmentNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String fragmentClassName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-  }
-
-  public class DynamicNavHostFragment extends androidx.navigation.fragment.NavHostFragment {
-    ctor public DynamicNavHostFragment();
-    method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
-    method protected com.google.android.play.core.splitinstall.SplitInstallManager createSplitInstallManager();
-    field public static final androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment.Companion Companion;
-  }
-
-  public static final class DynamicNavHostFragment.Companion {
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment create(@NavigationRes int graphResId);
-  }
-
-}
-
-package androidx.navigation.dynamicfeatures.fragment.ui {
-
-  public abstract class AbstractProgressFragment extends androidx.fragment.app.Fragment {
-    ctor public AbstractProgressFragment();
-    ctor public AbstractProgressFragment(int contentLayoutId);
-    method protected abstract void onCancelled();
-    method protected abstract void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
-    method protected void onInstalled();
-    method protected abstract void onProgress(@com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus int status, long bytesDownloaded, long bytesTotal);
-  }
-
-  public final class DefaultProgressFragment extends androidx.navigation.dynamicfeatures.fragment.ui.AbstractProgressFragment {
-    ctor public DefaultProgressFragment();
-    method protected void onCancelled();
-    method protected void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
-    method protected void onProgress(int status, long bytesDownloaded, long bytesTotal);
-  }
-
-}
-
diff --git a/navigation/navigation-dynamic-features-runtime/api/2.5.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/2.5.0-beta01.txt
deleted file mode 100644
index e4c37db..0000000
--- a/navigation/navigation-dynamic-features-runtime/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,154 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.dynamicfeatures {
-
-  @androidx.navigation.Navigator.Name("activity") public final class DynamicActivityNavigator extends androidx.navigation.ActivityNavigator {
-    ctor public DynamicActivityNavigator(android.content.Context context, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination createDestination();
-  }
-
-  public static final class DynamicActivityNavigator.Destination extends androidx.navigation.ActivityNavigator.Destination {
-    ctor public DynamicActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    ctor public DynamicActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
-    method public String? getModuleName();
-    method public void setModuleName(String?);
-    property public final String? moduleName;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
-    ctor @Deprecated public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, @IdRes int id);
-    ctor public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, String route);
-    method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination build();
-    method public String? getAction();
-    method public String? getActivityClassName();
-    method public android.net.Uri? getData();
-    method public String? getDataPattern();
-    method public String? getModuleName();
-    method public String? getTargetPackage();
-    method public void setAction(String?);
-    method public void setActivityClassName(String?);
-    method public void setData(android.net.Uri?);
-    method public void setDataPattern(String?);
-    method public void setModuleName(String?);
-    method public void setTargetPackage(String?);
-    property public final String? action;
-    property public final String? activityClassName;
-    property public final android.net.Uri? data;
-    property public final String? dataPattern;
-    property public final String? moduleName;
-    property public final String? targetPackage;
-  }
-
-  public final class DynamicActivityNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-  }
-
-  public final class DynamicExtras implements androidx.navigation.Navigator.Extras {
-    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
-    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
-    ctor public DynamicExtras();
-    method public androidx.navigation.Navigator.Extras? getDestinationExtras();
-    method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
-    property public final androidx.navigation.Navigator.Extras? destinationExtras;
-    property public final androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor;
-  }
-
-  @androidx.navigation.Navigator.Name("navigation") public final class DynamicGraphNavigator extends androidx.navigation.NavGraphNavigator {
-    ctor public DynamicGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.DynamicGraphNavigator.DynamicNavGraph createDestination();
-    method public void installDefaultProgressDestination(kotlin.jvm.functions.Function0<? extends androidx.navigation.NavDestination> progressDestinationSupplier);
-  }
-
-  public static final class DynamicGraphNavigator.DynamicNavGraph extends androidx.navigation.NavGraph {
-    ctor public DynamicGraphNavigator.DynamicNavGraph(androidx.navigation.dynamicfeatures.DynamicGraphNavigator navGraphNavigator, androidx.navigation.NavigatorProvider navigatorProvider);
-    method public String? getModuleName();
-    method public int getProgressDestination();
-    method public void setModuleName(String?);
-    method public void setProgressDestination(int);
-    property public final String? moduleName;
-    property public final int progressDestination;
-  }
-
-  @androidx.navigation.Navigator.Name("include-dynamic") public final class DynamicIncludeGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
-    ctor public DynamicIncludeGraphNavigator(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.NavInflater navInflater, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph createDestination();
-  }
-
-  public static final class DynamicIncludeGraphNavigator.DynamicIncludeNavGraph extends androidx.navigation.NavDestination {
-    method public String? getGraphPackage();
-    method public String? getGraphResourceName();
-    method public String? getModuleName();
-    method public void setGraphPackage(String?);
-    method public void setGraphResourceName(String?);
-    method public void setModuleName(String?);
-    property public final String? graphPackage;
-    property public final String? graphResourceName;
-    property public final String? moduleName;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicIncludeNavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
-    ctor @Deprecated public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, @IdRes int id, String moduleName, String graphResourceName);
-    ctor public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, String route, String moduleName, String graphResourceName);
-    method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph build();
-    method public String? getGraphPackage();
-    method public void setGraphPackage(String?);
-    property public final String? graphPackage;
-  }
-
-  public final class DynamicIncludeNavGraphBuilderKt {
-    method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName);
-    method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName);
-    method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public class DynamicInstallManager {
-    ctor public DynamicInstallManager(android.content.Context context, com.google.android.play.core.splitinstall.SplitInstallManager splitInstallManager);
-  }
-
-  public final class DynamicInstallMonitor {
-    ctor public DynamicInstallMonitor();
-    method public void cancelInstall();
-    method public Exception? getException();
-    method public int getSessionId();
-    method public androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> getStatus();
-    method public boolean isInstallRequired();
-    property public final Exception? exception;
-    property public final boolean isInstallRequired;
-    property public final int sessionId;
-    property public final androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> status;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicNavGraphBuilder extends androidx.navigation.NavGraphBuilder {
-    ctor @Deprecated public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
-    ctor public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, optional String? route);
-    method public String? getModuleName();
-    method public int getProgressDestination();
-    method public String? getProgressDestinationRoute();
-    method public void setModuleName(String?);
-    method public void setProgressDestination(int);
-    method public void setProgressDestinationRoute(String?);
-    property public final String? moduleName;
-    property public final int progressDestination;
-    property public final String? progressDestinationRoute;
-  }
-
-  public final class DynamicNavGraphBuilderKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavControllerKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavHostKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-}
-
diff --git a/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index e4c37db..0000000
--- a/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,154 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.dynamicfeatures {
-
-  @androidx.navigation.Navigator.Name("activity") public final class DynamicActivityNavigator extends androidx.navigation.ActivityNavigator {
-    ctor public DynamicActivityNavigator(android.content.Context context, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination createDestination();
-  }
-
-  public static final class DynamicActivityNavigator.Destination extends androidx.navigation.ActivityNavigator.Destination {
-    ctor public DynamicActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    ctor public DynamicActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
-    method public String? getModuleName();
-    method public void setModuleName(String?);
-    property public final String? moduleName;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
-    ctor @Deprecated public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, @IdRes int id);
-    ctor public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, String route);
-    method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination build();
-    method public String? getAction();
-    method public String? getActivityClassName();
-    method public android.net.Uri? getData();
-    method public String? getDataPattern();
-    method public String? getModuleName();
-    method public String? getTargetPackage();
-    method public void setAction(String?);
-    method public void setActivityClassName(String?);
-    method public void setData(android.net.Uri?);
-    method public void setDataPattern(String?);
-    method public void setModuleName(String?);
-    method public void setTargetPackage(String?);
-    property public final String? action;
-    property public final String? activityClassName;
-    property public final android.net.Uri? data;
-    property public final String? dataPattern;
-    property public final String? moduleName;
-    property public final String? targetPackage;
-  }
-
-  public final class DynamicActivityNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-  }
-
-  public final class DynamicExtras implements androidx.navigation.Navigator.Extras {
-    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
-    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
-    ctor public DynamicExtras();
-    method public androidx.navigation.Navigator.Extras? getDestinationExtras();
-    method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
-    property public final androidx.navigation.Navigator.Extras? destinationExtras;
-    property public final androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor;
-  }
-
-  @androidx.navigation.Navigator.Name("navigation") public final class DynamicGraphNavigator extends androidx.navigation.NavGraphNavigator {
-    ctor public DynamicGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.DynamicGraphNavigator.DynamicNavGraph createDestination();
-    method public void installDefaultProgressDestination(kotlin.jvm.functions.Function0<? extends androidx.navigation.NavDestination> progressDestinationSupplier);
-  }
-
-  public static final class DynamicGraphNavigator.DynamicNavGraph extends androidx.navigation.NavGraph {
-    ctor public DynamicGraphNavigator.DynamicNavGraph(androidx.navigation.dynamicfeatures.DynamicGraphNavigator navGraphNavigator, androidx.navigation.NavigatorProvider navigatorProvider);
-    method public String? getModuleName();
-    method public int getProgressDestination();
-    method public void setModuleName(String?);
-    method public void setProgressDestination(int);
-    property public final String? moduleName;
-    property public final int progressDestination;
-  }
-
-  @androidx.navigation.Navigator.Name("include-dynamic") public final class DynamicIncludeGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
-    ctor public DynamicIncludeGraphNavigator(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.NavInflater navInflater, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph createDestination();
-  }
-
-  public static final class DynamicIncludeGraphNavigator.DynamicIncludeNavGraph extends androidx.navigation.NavDestination {
-    method public String? getGraphPackage();
-    method public String? getGraphResourceName();
-    method public String? getModuleName();
-    method public void setGraphPackage(String?);
-    method public void setGraphResourceName(String?);
-    method public void setModuleName(String?);
-    property public final String? graphPackage;
-    property public final String? graphResourceName;
-    property public final String? moduleName;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicIncludeNavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
-    ctor @Deprecated public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, @IdRes int id, String moduleName, String graphResourceName);
-    ctor public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, String route, String moduleName, String graphResourceName);
-    method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph build();
-    method public String? getGraphPackage();
-    method public void setGraphPackage(String?);
-    property public final String? graphPackage;
-  }
-
-  public final class DynamicIncludeNavGraphBuilderKt {
-    method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName);
-    method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName);
-    method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public class DynamicInstallManager {
-    ctor public DynamicInstallManager(android.content.Context context, com.google.android.play.core.splitinstall.SplitInstallManager splitInstallManager);
-  }
-
-  public final class DynamicInstallMonitor {
-    ctor public DynamicInstallMonitor();
-    method public void cancelInstall();
-    method public Exception? getException();
-    method public int getSessionId();
-    method public androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> getStatus();
-    method public boolean isInstallRequired();
-    property public final Exception? exception;
-    property public final boolean isInstallRequired;
-    property public final int sessionId;
-    property public final androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> status;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicNavGraphBuilder extends androidx.navigation.NavGraphBuilder {
-    ctor @Deprecated public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
-    ctor public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, optional String? route);
-    method public String? getModuleName();
-    method public int getProgressDestination();
-    method public String? getProgressDestinationRoute();
-    method public void setModuleName(String?);
-    method public void setProgressDestination(int);
-    method public void setProgressDestinationRoute(String?);
-    property public final String? moduleName;
-    property public final int progressDestination;
-    property public final String? progressDestinationRoute;
-  }
-
-  public final class DynamicNavGraphBuilderKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavControllerKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavHostKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-}
-
diff --git a/navigation/navigation-dynamic-features-runtime/api/res-2.5.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-dynamic-features-runtime/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-dynamic-features-runtime/api/restricted_2.5.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index e4c37db..0000000
--- a/navigation/navigation-dynamic-features-runtime/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,154 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.dynamicfeatures {
-
-  @androidx.navigation.Navigator.Name("activity") public final class DynamicActivityNavigator extends androidx.navigation.ActivityNavigator {
-    ctor public DynamicActivityNavigator(android.content.Context context, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination createDestination();
-  }
-
-  public static final class DynamicActivityNavigator.Destination extends androidx.navigation.ActivityNavigator.Destination {
-    ctor public DynamicActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    ctor public DynamicActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
-    method public String? getModuleName();
-    method public void setModuleName(String?);
-    property public final String? moduleName;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
-    ctor @Deprecated public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, @IdRes int id);
-    ctor public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, String route);
-    method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination build();
-    method public String? getAction();
-    method public String? getActivityClassName();
-    method public android.net.Uri? getData();
-    method public String? getDataPattern();
-    method public String? getModuleName();
-    method public String? getTargetPackage();
-    method public void setAction(String?);
-    method public void setActivityClassName(String?);
-    method public void setData(android.net.Uri?);
-    method public void setDataPattern(String?);
-    method public void setModuleName(String?);
-    method public void setTargetPackage(String?);
-    property public final String? action;
-    property public final String? activityClassName;
-    property public final android.net.Uri? data;
-    property public final String? dataPattern;
-    property public final String? moduleName;
-    property public final String? targetPackage;
-  }
-
-  public final class DynamicActivityNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-  }
-
-  public final class DynamicExtras implements androidx.navigation.Navigator.Extras {
-    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
-    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
-    ctor public DynamicExtras();
-    method public androidx.navigation.Navigator.Extras? getDestinationExtras();
-    method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
-    property public final androidx.navigation.Navigator.Extras? destinationExtras;
-    property public final androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor;
-  }
-
-  @androidx.navigation.Navigator.Name("navigation") public final class DynamicGraphNavigator extends androidx.navigation.NavGraphNavigator {
-    ctor public DynamicGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.DynamicGraphNavigator.DynamicNavGraph createDestination();
-    method public void installDefaultProgressDestination(kotlin.jvm.functions.Function0<? extends androidx.navigation.NavDestination> progressDestinationSupplier);
-  }
-
-  public static final class DynamicGraphNavigator.DynamicNavGraph extends androidx.navigation.NavGraph {
-    ctor public DynamicGraphNavigator.DynamicNavGraph(androidx.navigation.dynamicfeatures.DynamicGraphNavigator navGraphNavigator, androidx.navigation.NavigatorProvider navigatorProvider);
-    method public String? getModuleName();
-    method public int getProgressDestination();
-    method public void setModuleName(String?);
-    method public void setProgressDestination(int);
-    property public final String? moduleName;
-    property public final int progressDestination;
-  }
-
-  @androidx.navigation.Navigator.Name("include-dynamic") public final class DynamicIncludeGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
-    ctor public DynamicIncludeGraphNavigator(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.NavInflater navInflater, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
-    method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph createDestination();
-  }
-
-  public static final class DynamicIncludeGraphNavigator.DynamicIncludeNavGraph extends androidx.navigation.NavDestination {
-    method public String? getGraphPackage();
-    method public String? getGraphResourceName();
-    method public String? getModuleName();
-    method public void setGraphPackage(String?);
-    method public void setGraphResourceName(String?);
-    method public void setModuleName(String?);
-    property public final String? graphPackage;
-    property public final String? graphResourceName;
-    property public final String? moduleName;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicIncludeNavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
-    ctor @Deprecated public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, @IdRes int id, String moduleName, String graphResourceName);
-    ctor public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, String route, String moduleName, String graphResourceName);
-    method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph build();
-    method public String? getGraphPackage();
-    method public void setGraphPackage(String?);
-    property public final String? graphPackage;
-  }
-
-  public final class DynamicIncludeNavGraphBuilderKt {
-    method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName);
-    method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName);
-    method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public class DynamicInstallManager {
-    ctor public DynamicInstallManager(android.content.Context context, com.google.android.play.core.splitinstall.SplitInstallManager splitInstallManager);
-  }
-
-  public final class DynamicInstallMonitor {
-    ctor public DynamicInstallMonitor();
-    method public void cancelInstall();
-    method public Exception? getException();
-    method public int getSessionId();
-    method public androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> getStatus();
-    method public boolean isInstallRequired();
-    property public final Exception? exception;
-    property public final boolean isInstallRequired;
-    property public final int sessionId;
-    property public final androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> status;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DynamicNavGraphBuilder extends androidx.navigation.NavGraphBuilder {
-    ctor @Deprecated public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
-    ctor public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, optional String? route);
-    method public String? getModuleName();
-    method public int getProgressDestination();
-    method public String? getProgressDestinationRoute();
-    method public void setModuleName(String?);
-    method public void setProgressDestination(int);
-    method public void setProgressDestinationRoute(String?);
-    property public final String? moduleName;
-    property public final int progressDestination;
-    property public final String? progressDestinationRoute;
-  }
-
-  public final class DynamicNavGraphBuilderKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method @Deprecated public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph navigation(androidx.navigation.NavigatorProvider, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline void navigation(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String startDestination, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavControllerKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavHostKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
-  }
-
-}
-
diff --git a/navigation/navigation-fragment-ktx/api/2.5.0-beta01.txt b/navigation/navigation-fragment-ktx/api/2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-fragment-ktx/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-fragment-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-fragment-ktx/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-fragment-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-fragment-ktx/api/res-2.5.0-beta01.txt b/navigation/navigation-fragment-ktx/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-fragment-ktx/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-fragment-ktx/api/restricted_2.5.0-beta01.txt b/navigation/navigation-fragment-ktx/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-fragment-ktx/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-fragment/api/2.5.0-beta01.txt b/navigation/navigation-fragment/api/2.5.0-beta01.txt
deleted file mode 100644
index 52fc882..0000000
--- a/navigation/navigation-fragment/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation {
-
-  public final class NavGraphViewModelLazyKt {
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-  }
-
-}
-
-package androidx.navigation.fragment {
-
-  public abstract class AbstractListDetailFragment extends androidx.fragment.app.Fragment {
-    ctor public AbstractListDetailFragment();
-    method public final androidx.navigation.fragment.NavHostFragment getDetailPaneNavHostFragment();
-    method public final androidx.slidingpanelayout.widget.SlidingPaneLayout getSlidingPaneLayout();
-    method public androidx.navigation.fragment.NavHostFragment onCreateDetailPaneNavHostFragment();
-    method public abstract android.view.View onCreateListPaneView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
-    method @CallSuper public final android.view.View onCreateView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
-    method public void onListPaneViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
-    method @CallSuper public final void onViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
-    property public final androidx.navigation.fragment.NavHostFragment detailPaneNavHostFragment;
-    property public final androidx.slidingpanelayout.widget.SlidingPaneLayout slidingPaneLayout;
-  }
-
-  @androidx.navigation.Navigator.Name("dialog") public final class DialogFragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
-    ctor public DialogFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager);
-    method public androidx.navigation.fragment.DialogFragmentNavigator.Destination createDestination();
-  }
-
-  @androidx.navigation.NavDestination.ClassType(DialogFragment::class) public static class DialogFragmentNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
-    ctor public DialogFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.DialogFragmentNavigator.Destination> fragmentNavigator);
-    ctor public DialogFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public final String getClassName();
-    method public final androidx.navigation.fragment.DialogFragmentNavigator.Destination setClassName(String className);
-    property public final String className;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
-    ctor @Deprecated public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
-    ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
-    method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build();
-  }
-
-  public final class DialogFragmentNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-  }
-
-  public final class FragmentKt {
-    method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment);
-  }
-
-  public final class FragmentNavArgsLazyKt {
-    method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args>! navArgs(androidx.fragment.app.Fragment);
-  }
-
-  @androidx.navigation.Navigator.Name("fragment") public class FragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.FragmentNavigator.Destination> {
-    ctor public FragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, int containerId);
-    method public androidx.navigation.fragment.FragmentNavigator.Destination createDestination();
-    method @Deprecated public androidx.fragment.app.Fragment instantiateFragment(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, String className, android.os.Bundle? args);
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Fragment::class) public static class FragmentNavigator.Destination extends androidx.navigation.NavDestination {
-    ctor public FragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
-    ctor public FragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public final String getClassName();
-    method public final androidx.navigation.fragment.FragmentNavigator.Destination setClassName(String className);
-    property public final String className;
-  }
-
-  public static final class FragmentNavigator.Extras implements androidx.navigation.Navigator.Extras {
-    method public java.util.Map<android.view.View,java.lang.String> getSharedElements();
-    property public final java.util.Map<android.view.View,java.lang.String> sharedElements;
-  }
-
-  public static final class FragmentNavigator.Extras.Builder {
-    ctor public FragmentNavigator.Extras.Builder();
-    method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElement(android.view.View sharedElement, String name);
-    method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElements(java.util.Map<android.view.View,java.lang.String> sharedElements);
-    method public androidx.navigation.fragment.FragmentNavigator.Extras build();
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
-    ctor @Deprecated public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
-    ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
-    method public androidx.navigation.fragment.FragmentNavigator.Destination build();
-  }
-
-  public final class FragmentNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-  }
-
-  public final class FragmentNavigatorExtrasKt {
-    method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair<? extends android.view.View,java.lang.String>... sharedElements);
-  }
-
-  public class NavHostFragment extends androidx.fragment.app.Fragment implements androidx.navigation.NavHost {
-    ctor public NavHostFragment();
-    method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
-    method @Deprecated protected androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> createFragmentNavigator();
-    method public static final androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
-    method public final androidx.navigation.NavController getNavController();
-    method @Deprecated @CallSuper protected void onCreateNavController(androidx.navigation.NavController navController);
-    method @CallSuper protected void onCreateNavHostController(androidx.navigation.NavHostController navHostController);
-    property public final androidx.navigation.NavController navController;
-    field public static final androidx.navigation.fragment.NavHostFragment.Companion Companion;
-  }
-
-  public static final class NavHostFragment.Companion {
-    method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
-    method public androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
-  }
-
-}
-
diff --git a/navigation/navigation-fragment/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-fragment/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index 52fc882..0000000
--- a/navigation/navigation-fragment/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation {
-
-  public final class NavGraphViewModelLazyKt {
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-  }
-
-}
-
-package androidx.navigation.fragment {
-
-  public abstract class AbstractListDetailFragment extends androidx.fragment.app.Fragment {
-    ctor public AbstractListDetailFragment();
-    method public final androidx.navigation.fragment.NavHostFragment getDetailPaneNavHostFragment();
-    method public final androidx.slidingpanelayout.widget.SlidingPaneLayout getSlidingPaneLayout();
-    method public androidx.navigation.fragment.NavHostFragment onCreateDetailPaneNavHostFragment();
-    method public abstract android.view.View onCreateListPaneView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
-    method @CallSuper public final android.view.View onCreateView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
-    method public void onListPaneViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
-    method @CallSuper public final void onViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
-    property public final androidx.navigation.fragment.NavHostFragment detailPaneNavHostFragment;
-    property public final androidx.slidingpanelayout.widget.SlidingPaneLayout slidingPaneLayout;
-  }
-
-  @androidx.navigation.Navigator.Name("dialog") public final class DialogFragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
-    ctor public DialogFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager);
-    method public androidx.navigation.fragment.DialogFragmentNavigator.Destination createDestination();
-  }
-
-  @androidx.navigation.NavDestination.ClassType(DialogFragment::class) public static class DialogFragmentNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
-    ctor public DialogFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.DialogFragmentNavigator.Destination> fragmentNavigator);
-    ctor public DialogFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public final String getClassName();
-    method public final androidx.navigation.fragment.DialogFragmentNavigator.Destination setClassName(String className);
-    property public final String className;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
-    ctor @Deprecated public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
-    ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
-    method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build();
-  }
-
-  public final class DialogFragmentNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-  }
-
-  public final class FragmentKt {
-    method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment);
-  }
-
-  public final class FragmentNavArgsLazyKt {
-    method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args>! navArgs(androidx.fragment.app.Fragment);
-  }
-
-  @androidx.navigation.Navigator.Name("fragment") public class FragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.FragmentNavigator.Destination> {
-    ctor public FragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, int containerId);
-    method public androidx.navigation.fragment.FragmentNavigator.Destination createDestination();
-    method @Deprecated public androidx.fragment.app.Fragment instantiateFragment(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, String className, android.os.Bundle? args);
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Fragment::class) public static class FragmentNavigator.Destination extends androidx.navigation.NavDestination {
-    ctor public FragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
-    ctor public FragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public final String getClassName();
-    method public final androidx.navigation.fragment.FragmentNavigator.Destination setClassName(String className);
-    property public final String className;
-  }
-
-  public static final class FragmentNavigator.Extras implements androidx.navigation.Navigator.Extras {
-    method public java.util.Map<android.view.View,java.lang.String> getSharedElements();
-    property public final java.util.Map<android.view.View,java.lang.String> sharedElements;
-  }
-
-  public static final class FragmentNavigator.Extras.Builder {
-    ctor public FragmentNavigator.Extras.Builder();
-    method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElement(android.view.View sharedElement, String name);
-    method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElements(java.util.Map<android.view.View,java.lang.String> sharedElements);
-    method public androidx.navigation.fragment.FragmentNavigator.Extras build();
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
-    ctor @Deprecated public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
-    ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
-    method public androidx.navigation.fragment.FragmentNavigator.Destination build();
-  }
-
-  public final class FragmentNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-  }
-
-  public final class FragmentNavigatorExtrasKt {
-    method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair<? extends android.view.View,java.lang.String>... sharedElements);
-  }
-
-  public class NavHostFragment extends androidx.fragment.app.Fragment implements androidx.navigation.NavHost {
-    ctor public NavHostFragment();
-    method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
-    method @Deprecated protected androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> createFragmentNavigator();
-    method public static final androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
-    method public final androidx.navigation.NavController getNavController();
-    method @Deprecated @CallSuper protected void onCreateNavController(androidx.navigation.NavController navController);
-    method @CallSuper protected void onCreateNavHostController(androidx.navigation.NavHostController navHostController);
-    property public final androidx.navigation.NavController navController;
-    field public static final androidx.navigation.fragment.NavHostFragment.Companion Companion;
-  }
-
-  public static final class NavHostFragment.Companion {
-    method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
-    method public androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
-  }
-
-}
-
diff --git a/navigation/navigation-fragment/api/res-2.5.0-beta01.txt b/navigation/navigation-fragment/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-fragment/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-fragment/api/restricted_2.5.0-beta01.txt b/navigation/navigation-fragment/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index 52fc882..0000000
--- a/navigation/navigation-fragment/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation {
-
-  public final class NavGraphViewModelLazyKt {
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, String navGraphRoute, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
-  }
-
-}
-
-package androidx.navigation.fragment {
-
-  public abstract class AbstractListDetailFragment extends androidx.fragment.app.Fragment {
-    ctor public AbstractListDetailFragment();
-    method public final androidx.navigation.fragment.NavHostFragment getDetailPaneNavHostFragment();
-    method public final androidx.slidingpanelayout.widget.SlidingPaneLayout getSlidingPaneLayout();
-    method public androidx.navigation.fragment.NavHostFragment onCreateDetailPaneNavHostFragment();
-    method public abstract android.view.View onCreateListPaneView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
-    method @CallSuper public final android.view.View onCreateView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
-    method public void onListPaneViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
-    method @CallSuper public final void onViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
-    property public final androidx.navigation.fragment.NavHostFragment detailPaneNavHostFragment;
-    property public final androidx.slidingpanelayout.widget.SlidingPaneLayout slidingPaneLayout;
-  }
-
-  @androidx.navigation.Navigator.Name("dialog") public final class DialogFragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
-    ctor public DialogFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager);
-    method public androidx.navigation.fragment.DialogFragmentNavigator.Destination createDestination();
-  }
-
-  @androidx.navigation.NavDestination.ClassType(DialogFragment::class) public static class DialogFragmentNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
-    ctor public DialogFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.DialogFragmentNavigator.Destination> fragmentNavigator);
-    ctor public DialogFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public final String getClassName();
-    method public final androidx.navigation.fragment.DialogFragmentNavigator.Destination setClassName(String className);
-    property public final String className;
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
-    ctor @Deprecated public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
-    ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
-    method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build();
-  }
-
-  public final class DialogFragmentNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-  }
-
-  public final class FragmentKt {
-    method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment);
-  }
-
-  public final class FragmentNavArgsLazyKt {
-    method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args>! navArgs(androidx.fragment.app.Fragment);
-  }
-
-  @androidx.navigation.Navigator.Name("fragment") public class FragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.FragmentNavigator.Destination> {
-    ctor public FragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, int containerId);
-    method public androidx.navigation.fragment.FragmentNavigator.Destination createDestination();
-    method @Deprecated public androidx.fragment.app.Fragment instantiateFragment(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, String className, android.os.Bundle? args);
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Fragment::class) public static class FragmentNavigator.Destination extends androidx.navigation.NavDestination {
-    ctor public FragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
-    ctor public FragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public final String getClassName();
-    method public final androidx.navigation.fragment.FragmentNavigator.Destination setClassName(String className);
-    property public final String className;
-  }
-
-  public static final class FragmentNavigator.Extras implements androidx.navigation.Navigator.Extras {
-    method public java.util.Map<android.view.View,java.lang.String> getSharedElements();
-    property public final java.util.Map<android.view.View,java.lang.String> sharedElements;
-  }
-
-  public static final class FragmentNavigator.Extras.Builder {
-    ctor public FragmentNavigator.Extras.Builder();
-    method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElement(android.view.View sharedElement, String name);
-    method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElements(java.util.Map<android.view.View,java.lang.String> sharedElements);
-    method public androidx.navigation.fragment.FragmentNavigator.Extras build();
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
-    ctor @Deprecated public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
-    ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
-    method public androidx.navigation.fragment.FragmentNavigator.Destination build();
-  }
-
-  public final class FragmentNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id);
-    method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route);
-    method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
-  }
-
-  public final class FragmentNavigatorExtrasKt {
-    method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair<? extends android.view.View,java.lang.String>... sharedElements);
-  }
-
-  public class NavHostFragment extends androidx.fragment.app.Fragment implements androidx.navigation.NavHost {
-    ctor public NavHostFragment();
-    method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public static final androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
-    method @Deprecated protected androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> createFragmentNavigator();
-    method public static final androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
-    method public final androidx.navigation.NavController getNavController();
-    method @Deprecated @CallSuper protected void onCreateNavController(androidx.navigation.NavController navController);
-    method @CallSuper protected void onCreateNavHostController(androidx.navigation.NavHostController navHostController);
-    property public final androidx.navigation.NavController navController;
-    field public static final androidx.navigation.fragment.NavHostFragment.Companion Companion;
-  }
-
-  public static final class NavHostFragment.Companion {
-    method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId, optional android.os.Bundle? startDestinationArgs);
-    method public androidx.navigation.fragment.NavHostFragment create(@NavigationRes int graphResId);
-    method public androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment fragment);
-  }
-
-}
-
diff --git a/navigation/navigation-runtime-ktx/api/2.5.0-beta01.txt b/navigation/navigation-runtime-ktx/api/2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-runtime-ktx/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-runtime-ktx/api/res-2.5.0-beta01.txt b/navigation/navigation-runtime-ktx/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-runtime-ktx/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-runtime-ktx/api/restricted_2.5.0-beta01.txt b/navigation/navigation-runtime-ktx/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-runtime-ktx/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-runtime/api/2.5.0-beta01.txt b/navigation/navigation-runtime/api/2.5.0-beta01.txt
deleted file mode 100644
index 7f117bb..0000000
--- a/navigation/navigation-runtime/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,224 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation {
-
-  public final class ActivityKt {
-    method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId);
-  }
-
-  public final class ActivityNavArgsLazyKt {
-    method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args>! navArgs(android.app.Activity);
-  }
-
-  @androidx.navigation.Navigator.Name("activity") public class ActivityNavigator extends androidx.navigation.Navigator<androidx.navigation.ActivityNavigator.Destination> {
-    ctor public ActivityNavigator(android.content.Context context);
-    method public static final void applyPopAnimationsToPendingTransition(android.app.Activity activity);
-    method public androidx.navigation.ActivityNavigator.Destination createDestination();
-    method public androidx.navigation.NavDestination? navigate(androidx.navigation.ActivityNavigator.Destination destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    field public static final androidx.navigation.ActivityNavigator.Companion Companion;
-  }
-
-  public static final class ActivityNavigator.Companion {
-    method public void applyPopAnimationsToPendingTransition(android.app.Activity activity);
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Activity::class) public static class ActivityNavigator.Destination extends androidx.navigation.NavDestination {
-    ctor public ActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
-    ctor public ActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public final String? getAction();
-    method public final android.content.ComponentName? getComponent();
-    method public final android.net.Uri? getData();
-    method public final String? getDataPattern();
-    method public final android.content.Intent? getIntent();
-    method public final String? getTargetPackage();
-    method public final androidx.navigation.ActivityNavigator.Destination setAction(String? action);
-    method public final androidx.navigation.ActivityNavigator.Destination setComponentName(android.content.ComponentName? name);
-    method public final androidx.navigation.ActivityNavigator.Destination setData(android.net.Uri? data);
-    method public final androidx.navigation.ActivityNavigator.Destination setDataPattern(String? dataPattern);
-    method public final androidx.navigation.ActivityNavigator.Destination setIntent(android.content.Intent? intent);
-    method public final androidx.navigation.ActivityNavigator.Destination setTargetPackage(String? packageName);
-    property public final String? action;
-    property public final android.content.ComponentName? component;
-    property public final android.net.Uri? data;
-    property public final String? dataPattern;
-    property public final android.content.Intent? intent;
-    property public final String? targetPackage;
-  }
-
-  public static final class ActivityNavigator.Extras implements androidx.navigation.Navigator.Extras {
-    method public androidx.core.app.ActivityOptionsCompat? getActivityOptions();
-    method public int getFlags();
-    property public final androidx.core.app.ActivityOptionsCompat? activityOptions;
-    property public final int flags;
-  }
-
-  public static final class ActivityNavigator.Extras.Builder {
-    ctor public ActivityNavigator.Extras.Builder();
-    method public androidx.navigation.ActivityNavigator.Extras.Builder addFlags(int flags);
-    method public androidx.navigation.ActivityNavigator.Extras build();
-    method public androidx.navigation.ActivityNavigator.Extras.Builder setActivityOptions(androidx.core.app.ActivityOptionsCompat activityOptions);
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
-    ctor @Deprecated public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id);
-    ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, String route);
-    method public androidx.navigation.ActivityNavigator.Destination build();
-    method public String? getAction();
-    method public kotlin.reflect.KClass<? extends android.app.Activity>? getActivityClass();
-    method public android.net.Uri? getData();
-    method public String? getDataPattern();
-    method public String? getTargetPackage();
-    method public void setAction(String?);
-    method public void setActivityClass(kotlin.reflect.KClass<? extends android.app.Activity>?);
-    method public void setData(android.net.Uri?);
-    method public void setDataPattern(String?);
-    method public void setTargetPackage(String?);
-    property public final String? action;
-    property public final kotlin.reflect.KClass<? extends android.app.Activity>? activityClass;
-    property public final android.net.Uri? data;
-    property public final String? dataPattern;
-    property public final String? targetPackage;
-  }
-
-  public final class ActivityNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline void activity(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-  }
-
-  public final class ActivityNavigatorExtrasKt {
-    method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags);
-  }
-
-  public class NavController {
-    ctor public NavController(android.content.Context context);
-    method public void addOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
-    method @MainThread public final boolean clearBackStack(String route);
-    method @MainThread public final boolean clearBackStack(@IdRes int destinationId);
-    method public androidx.navigation.NavDeepLinkBuilder createDeepLink();
-    method public androidx.navigation.NavBackStackEntry getBackStackEntry(@IdRes int destinationId);
-    method public final androidx.navigation.NavBackStackEntry getBackStackEntry(String route);
-    method public androidx.navigation.NavBackStackEntry? getCurrentBackStackEntry();
-    method public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> getCurrentBackStackEntryFlow();
-    method public androidx.navigation.NavDestination? getCurrentDestination();
-    method @MainThread public androidx.navigation.NavGraph getGraph();
-    method public androidx.navigation.NavInflater getNavInflater();
-    method public androidx.navigation.NavigatorProvider getNavigatorProvider();
-    method public androidx.navigation.NavBackStackEntry? getPreviousBackStackEntry();
-    method public androidx.lifecycle.ViewModelStoreOwner getViewModelStoreOwner(@IdRes int navGraphId);
-    method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getVisibleEntries();
-    method @MainThread public boolean handleDeepLink(android.content.Intent? intent);
-    method @MainThread public void navigate(@IdRes int resId);
-    method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args);
-    method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @MainThread public void navigate(android.net.Uri deepLink);
-    method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request);
-    method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @MainThread public void navigate(androidx.navigation.NavDirections directions);
-    method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.Navigator.Extras navigatorExtras);
-    method public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
-    method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
-    method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
-    method public final void navigate(String route);
-    method @MainThread public boolean navigateUp();
-    method @MainThread public boolean popBackStack();
-    method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive);
-    method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive, boolean saveState);
-    method @MainThread public final boolean popBackStack(String route, boolean inclusive, optional boolean saveState);
-    method @MainThread public final boolean popBackStack(String route, boolean inclusive);
-    method public void removeOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
-    method @CallSuper public void restoreState(android.os.Bundle? navState);
-    method @CallSuper public android.os.Bundle? saveState();
-    method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph);
-    method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId);
-    method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId, android.os.Bundle? startDestinationArgs);
-    method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph graph, android.os.Bundle? startDestinationArgs);
-    property public androidx.navigation.NavBackStackEntry? currentBackStackEntry;
-    property public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> currentBackStackEntryFlow;
-    property public androidx.navigation.NavDestination? currentDestination;
-    property @MainThread public androidx.navigation.NavGraph graph;
-    property public androidx.navigation.NavInflater navInflater;
-    property public androidx.navigation.NavigatorProvider navigatorProvider;
-    property public androidx.navigation.NavBackStackEntry? previousBackStackEntry;
-    property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> visibleEntries;
-    field public static final androidx.navigation.NavController.Companion Companion;
-    field public static final String KEY_DEEP_LINK_INTENT = "android-support-nav:controller:deepLinkIntent";
-  }
-
-  public static final class NavController.Companion {
-  }
-
-  public static fun interface NavController.OnDestinationChangedListener {
-    method public void onDestinationChanged(androidx.navigation.NavController controller, androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
-  }
-
-  public final class NavControllerKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavDeepLinkBuilder {
-    ctor public NavDeepLinkBuilder(android.content.Context context);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(String route, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(String route);
-    method public android.app.PendingIntent createPendingIntent();
-    method public androidx.core.app.TaskStackBuilder createTaskStackBuilder();
-    method public androidx.navigation.NavDeepLinkBuilder setArguments(android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder setComponentName(Class<? extends android.app.Activity> activityClass);
-    method public androidx.navigation.NavDeepLinkBuilder setComponentName(android.content.ComponentName componentName);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute);
-    method public androidx.navigation.NavDeepLinkBuilder setGraph(@NavigationRes int navGraphId);
-    method public androidx.navigation.NavDeepLinkBuilder setGraph(androidx.navigation.NavGraph navGraph);
-  }
-
-  public interface NavHost {
-    method public androidx.navigation.NavController getNavController();
-    property public abstract androidx.navigation.NavController navController;
-  }
-
-  public class NavHostController extends androidx.navigation.NavController {
-    ctor public NavHostController(android.content.Context context);
-    method public final void enableOnBackPressed(boolean enabled);
-    method public final void setLifecycleOwner(androidx.lifecycle.LifecycleOwner owner);
-    method public final void setOnBackPressedDispatcher(androidx.activity.OnBackPressedDispatcher dispatcher);
-    method public final void setViewModelStore(androidx.lifecycle.ViewModelStore viewModelStore);
-  }
-
-  public final class NavHostKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavInflater {
-    ctor public NavInflater(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider);
-    method public androidx.navigation.NavGraph inflate(@NavigationRes int graphResId);
-    field public static final androidx.navigation.NavInflater.Companion Companion;
-  }
-
-  public static final class NavInflater.Companion {
-  }
-
-  public final class Navigation {
-    method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId, optional android.os.Bundle? args);
-    method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId);
-    method public static android.view.View.OnClickListener createNavigateOnClickListener(androidx.navigation.NavDirections directions);
-    method public static androidx.navigation.NavController findNavController(android.app.Activity activity, @IdRes int viewId);
-    method public static androidx.navigation.NavController findNavController(android.view.View view);
-    method public static void setViewNavController(android.view.View view, androidx.navigation.NavController? controller);
-    field public static final androidx.navigation.Navigation INSTANCE;
-  }
-
-  public final class ViewKt {
-    method public static androidx.navigation.NavController findNavController(android.view.View);
-  }
-
-}
-
diff --git a/navigation/navigation-runtime/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-runtime/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index 70ea8db..0000000
--- a/navigation/navigation-runtime/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation {
-
-  public final class ActivityKt {
-    method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId);
-  }
-
-  public final class ActivityNavArgsLazyKt {
-    method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args>! navArgs(android.app.Activity);
-  }
-
-  @androidx.navigation.Navigator.Name("activity") public class ActivityNavigator extends androidx.navigation.Navigator<androidx.navigation.ActivityNavigator.Destination> {
-    ctor public ActivityNavigator(android.content.Context context);
-    method public static final void applyPopAnimationsToPendingTransition(android.app.Activity activity);
-    method public androidx.navigation.ActivityNavigator.Destination createDestination();
-    method public androidx.navigation.NavDestination? navigate(androidx.navigation.ActivityNavigator.Destination destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    field public static final androidx.navigation.ActivityNavigator.Companion Companion;
-  }
-
-  public static final class ActivityNavigator.Companion {
-    method public void applyPopAnimationsToPendingTransition(android.app.Activity activity);
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Activity::class) public static class ActivityNavigator.Destination extends androidx.navigation.NavDestination {
-    ctor public ActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
-    ctor public ActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public final String? getAction();
-    method public final android.content.ComponentName? getComponent();
-    method public final android.net.Uri? getData();
-    method public final String? getDataPattern();
-    method public final android.content.Intent? getIntent();
-    method public final String? getTargetPackage();
-    method public final androidx.navigation.ActivityNavigator.Destination setAction(String? action);
-    method public final androidx.navigation.ActivityNavigator.Destination setComponentName(android.content.ComponentName? name);
-    method public final androidx.navigation.ActivityNavigator.Destination setData(android.net.Uri? data);
-    method public final androidx.navigation.ActivityNavigator.Destination setDataPattern(String? dataPattern);
-    method public final androidx.navigation.ActivityNavigator.Destination setIntent(android.content.Intent? intent);
-    method public final androidx.navigation.ActivityNavigator.Destination setTargetPackage(String? packageName);
-    property public final String? action;
-    property public final android.content.ComponentName? component;
-    property public final android.net.Uri? data;
-    property public final String? dataPattern;
-    property public final android.content.Intent? intent;
-    property public final String? targetPackage;
-  }
-
-  public static final class ActivityNavigator.Extras implements androidx.navigation.Navigator.Extras {
-    method public androidx.core.app.ActivityOptionsCompat? getActivityOptions();
-    method public int getFlags();
-    property public final androidx.core.app.ActivityOptionsCompat? activityOptions;
-    property public final int flags;
-  }
-
-  public static final class ActivityNavigator.Extras.Builder {
-    ctor public ActivityNavigator.Extras.Builder();
-    method public androidx.navigation.ActivityNavigator.Extras.Builder addFlags(int flags);
-    method public androidx.navigation.ActivityNavigator.Extras build();
-    method public androidx.navigation.ActivityNavigator.Extras.Builder setActivityOptions(androidx.core.app.ActivityOptionsCompat activityOptions);
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
-    ctor @Deprecated public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id);
-    ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, String route);
-    method public androidx.navigation.ActivityNavigator.Destination build();
-    method public String? getAction();
-    method public kotlin.reflect.KClass<? extends android.app.Activity>? getActivityClass();
-    method public android.net.Uri? getData();
-    method public String? getDataPattern();
-    method public String? getTargetPackage();
-    method public void setAction(String?);
-    method public void setActivityClass(kotlin.reflect.KClass<? extends android.app.Activity>?);
-    method public void setData(android.net.Uri?);
-    method public void setDataPattern(String?);
-    method public void setTargetPackage(String?);
-    property public final String? action;
-    property public final kotlin.reflect.KClass<? extends android.app.Activity>? activityClass;
-    property public final android.net.Uri? data;
-    property public final String? dataPattern;
-    property public final String? targetPackage;
-  }
-
-  public final class ActivityNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline void activity(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-  }
-
-  public final class ActivityNavigatorExtrasKt {
-    method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags);
-  }
-
-  public class NavController {
-    ctor public NavController(android.content.Context context);
-    method public void addOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
-    method @MainThread public final boolean clearBackStack(String route);
-    method @MainThread public final boolean clearBackStack(@IdRes int destinationId);
-    method public androidx.navigation.NavDeepLinkBuilder createDeepLink();
-    method @androidx.navigation.NavDeepLinkSaveStateControl public static final void enableDeepLinkSaveState(boolean saveState);
-    method public androidx.navigation.NavBackStackEntry getBackStackEntry(@IdRes int destinationId);
-    method public final androidx.navigation.NavBackStackEntry getBackStackEntry(String route);
-    method public androidx.navigation.NavBackStackEntry? getCurrentBackStackEntry();
-    method public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> getCurrentBackStackEntryFlow();
-    method public androidx.navigation.NavDestination? getCurrentDestination();
-    method @MainThread public androidx.navigation.NavGraph getGraph();
-    method public androidx.navigation.NavInflater getNavInflater();
-    method public androidx.navigation.NavigatorProvider getNavigatorProvider();
-    method public androidx.navigation.NavBackStackEntry? getPreviousBackStackEntry();
-    method public androidx.lifecycle.ViewModelStoreOwner getViewModelStoreOwner(@IdRes int navGraphId);
-    method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getVisibleEntries();
-    method @MainThread public boolean handleDeepLink(android.content.Intent? intent);
-    method @MainThread public void navigate(@IdRes int resId);
-    method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args);
-    method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @MainThread public void navigate(android.net.Uri deepLink);
-    method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request);
-    method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @MainThread public void navigate(androidx.navigation.NavDirections directions);
-    method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.Navigator.Extras navigatorExtras);
-    method public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
-    method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
-    method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
-    method public final void navigate(String route);
-    method @MainThread public boolean navigateUp();
-    method @MainThread public boolean popBackStack();
-    method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive);
-    method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive, boolean saveState);
-    method @MainThread public final boolean popBackStack(String route, boolean inclusive, optional boolean saveState);
-    method @MainThread public final boolean popBackStack(String route, boolean inclusive);
-    method public void removeOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
-    method @CallSuper public void restoreState(android.os.Bundle? navState);
-    method @CallSuper public android.os.Bundle? saveState();
-    method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph);
-    method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId);
-    method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId, android.os.Bundle? startDestinationArgs);
-    method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph graph, android.os.Bundle? startDestinationArgs);
-    property public androidx.navigation.NavBackStackEntry? currentBackStackEntry;
-    property public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> currentBackStackEntryFlow;
-    property public androidx.navigation.NavDestination? currentDestination;
-    property @MainThread public androidx.navigation.NavGraph graph;
-    property public androidx.navigation.NavInflater navInflater;
-    property public androidx.navigation.NavigatorProvider navigatorProvider;
-    property public androidx.navigation.NavBackStackEntry? previousBackStackEntry;
-    property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> visibleEntries;
-    field public static final androidx.navigation.NavController.Companion Companion;
-    field public static final String KEY_DEEP_LINK_INTENT = "android-support-nav:controller:deepLinkIntent";
-  }
-
-  public static final class NavController.Companion {
-    method @androidx.navigation.NavDeepLinkSaveStateControl public void enableDeepLinkSaveState(boolean saveState);
-  }
-
-  public static fun interface NavController.OnDestinationChangedListener {
-    method public void onDestinationChanged(androidx.navigation.NavController controller, androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
-  }
-
-  public final class NavControllerKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavDeepLinkBuilder {
-    ctor public NavDeepLinkBuilder(android.content.Context context);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(String route, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(String route);
-    method public android.app.PendingIntent createPendingIntent();
-    method public androidx.core.app.TaskStackBuilder createTaskStackBuilder();
-    method public androidx.navigation.NavDeepLinkBuilder setArguments(android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder setComponentName(Class<? extends android.app.Activity> activityClass);
-    method public androidx.navigation.NavDeepLinkBuilder setComponentName(android.content.ComponentName componentName);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute);
-    method public androidx.navigation.NavDeepLinkBuilder setGraph(@NavigationRes int navGraphId);
-    method public androidx.navigation.NavDeepLinkBuilder setGraph(androidx.navigation.NavGraph navGraph);
-  }
-
-  @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface NavDeepLinkSaveStateControl {
-  }
-
-  public interface NavHost {
-    method public androidx.navigation.NavController getNavController();
-    property public abstract androidx.navigation.NavController navController;
-  }
-
-  public class NavHostController extends androidx.navigation.NavController {
-    ctor public NavHostController(android.content.Context context);
-    method public final void enableOnBackPressed(boolean enabled);
-    method public final void setLifecycleOwner(androidx.lifecycle.LifecycleOwner owner);
-    method public final void setOnBackPressedDispatcher(androidx.activity.OnBackPressedDispatcher dispatcher);
-    method public final void setViewModelStore(androidx.lifecycle.ViewModelStore viewModelStore);
-  }
-
-  public final class NavHostKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavInflater {
-    ctor public NavInflater(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider);
-    method public androidx.navigation.NavGraph inflate(@NavigationRes int graphResId);
-    field public static final androidx.navigation.NavInflater.Companion Companion;
-  }
-
-  public static final class NavInflater.Companion {
-  }
-
-  public final class Navigation {
-    method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId, optional android.os.Bundle? args);
-    method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId);
-    method public static android.view.View.OnClickListener createNavigateOnClickListener(androidx.navigation.NavDirections directions);
-    method public static androidx.navigation.NavController findNavController(android.app.Activity activity, @IdRes int viewId);
-    method public static androidx.navigation.NavController findNavController(android.view.View view);
-    method public static void setViewNavController(android.view.View view, androidx.navigation.NavController? controller);
-    field public static final androidx.navigation.Navigation INSTANCE;
-  }
-
-  public final class ViewKt {
-    method public static androidx.navigation.NavController findNavController(android.view.View);
-  }
-
-}
-
diff --git a/navigation/navigation-runtime/api/res-2.5.0-beta01.txt b/navigation/navigation-runtime/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-runtime/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-runtime/api/restricted_2.5.0-beta01.txt b/navigation/navigation-runtime/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index 7f117bb..0000000
--- a/navigation/navigation-runtime/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,224 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation {
-
-  public final class ActivityKt {
-    method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId);
-  }
-
-  public final class ActivityNavArgsLazyKt {
-    method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args>! navArgs(android.app.Activity);
-  }
-
-  @androidx.navigation.Navigator.Name("activity") public class ActivityNavigator extends androidx.navigation.Navigator<androidx.navigation.ActivityNavigator.Destination> {
-    ctor public ActivityNavigator(android.content.Context context);
-    method public static final void applyPopAnimationsToPendingTransition(android.app.Activity activity);
-    method public androidx.navigation.ActivityNavigator.Destination createDestination();
-    method public androidx.navigation.NavDestination? navigate(androidx.navigation.ActivityNavigator.Destination destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    field public static final androidx.navigation.ActivityNavigator.Companion Companion;
-  }
-
-  public static final class ActivityNavigator.Companion {
-    method public void applyPopAnimationsToPendingTransition(android.app.Activity activity);
-  }
-
-  @androidx.navigation.NavDestination.ClassType(Activity::class) public static class ActivityNavigator.Destination extends androidx.navigation.NavDestination {
-    ctor public ActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
-    ctor public ActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
-    method public final String? getAction();
-    method public final android.content.ComponentName? getComponent();
-    method public final android.net.Uri? getData();
-    method public final String? getDataPattern();
-    method public final android.content.Intent? getIntent();
-    method public final String? getTargetPackage();
-    method public final androidx.navigation.ActivityNavigator.Destination setAction(String? action);
-    method public final androidx.navigation.ActivityNavigator.Destination setComponentName(android.content.ComponentName? name);
-    method public final androidx.navigation.ActivityNavigator.Destination setData(android.net.Uri? data);
-    method public final androidx.navigation.ActivityNavigator.Destination setDataPattern(String? dataPattern);
-    method public final androidx.navigation.ActivityNavigator.Destination setIntent(android.content.Intent? intent);
-    method public final androidx.navigation.ActivityNavigator.Destination setTargetPackage(String? packageName);
-    property public final String? action;
-    property public final android.content.ComponentName? component;
-    property public final android.net.Uri? data;
-    property public final String? dataPattern;
-    property public final android.content.Intent? intent;
-    property public final String? targetPackage;
-  }
-
-  public static final class ActivityNavigator.Extras implements androidx.navigation.Navigator.Extras {
-    method public androidx.core.app.ActivityOptionsCompat? getActivityOptions();
-    method public int getFlags();
-    property public final androidx.core.app.ActivityOptionsCompat? activityOptions;
-    property public final int flags;
-  }
-
-  public static final class ActivityNavigator.Extras.Builder {
-    ctor public ActivityNavigator.Extras.Builder();
-    method public androidx.navigation.ActivityNavigator.Extras.Builder addFlags(int flags);
-    method public androidx.navigation.ActivityNavigator.Extras build();
-    method public androidx.navigation.ActivityNavigator.Extras.Builder setActivityOptions(androidx.core.app.ActivityOptionsCompat activityOptions);
-  }
-
-  @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
-    ctor @Deprecated public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id);
-    ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, String route);
-    method public androidx.navigation.ActivityNavigator.Destination build();
-    method public String? getAction();
-    method public kotlin.reflect.KClass<? extends android.app.Activity>? getActivityClass();
-    method public android.net.Uri? getData();
-    method public String? getDataPattern();
-    method public String? getTargetPackage();
-    method public void setAction(String?);
-    method public void setActivityClass(kotlin.reflect.KClass<? extends android.app.Activity>?);
-    method public void setData(android.net.Uri?);
-    method public void setDataPattern(String?);
-    method public void setTargetPackage(String?);
-    property public final String? action;
-    property public final kotlin.reflect.KClass<? extends android.app.Activity>? activityClass;
-    property public final android.net.Uri? data;
-    property public final String? dataPattern;
-    property public final String? targetPackage;
-  }
-
-  public final class ActivityNavigatorDestinationBuilderKt {
-    method @Deprecated public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-    method public static inline void activity(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
-  }
-
-  public final class ActivityNavigatorExtrasKt {
-    method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags);
-  }
-
-  public class NavController {
-    ctor public NavController(android.content.Context context);
-    method public void addOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
-    method @MainThread public final boolean clearBackStack(String route);
-    method @MainThread public final boolean clearBackStack(@IdRes int destinationId);
-    method public androidx.navigation.NavDeepLinkBuilder createDeepLink();
-    method public androidx.navigation.NavBackStackEntry getBackStackEntry(@IdRes int destinationId);
-    method public final androidx.navigation.NavBackStackEntry getBackStackEntry(String route);
-    method public androidx.navigation.NavBackStackEntry? getCurrentBackStackEntry();
-    method public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> getCurrentBackStackEntryFlow();
-    method public androidx.navigation.NavDestination? getCurrentDestination();
-    method @MainThread public androidx.navigation.NavGraph getGraph();
-    method public androidx.navigation.NavInflater getNavInflater();
-    method public androidx.navigation.NavigatorProvider getNavigatorProvider();
-    method public androidx.navigation.NavBackStackEntry? getPreviousBackStackEntry();
-    method public androidx.lifecycle.ViewModelStoreOwner getViewModelStoreOwner(@IdRes int navGraphId);
-    method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getVisibleEntries();
-    method @MainThread public boolean handleDeepLink(android.content.Intent? intent);
-    method @MainThread public void navigate(@IdRes int resId);
-    method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args);
-    method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(@IdRes int resId, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @MainThread public void navigate(android.net.Uri deepLink);
-    method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(android.net.Uri deepLink, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request);
-    method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
-    method @MainThread public void navigate(androidx.navigation.NavDirections directions);
-    method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.NavOptions? navOptions);
-    method @MainThread public void navigate(androidx.navigation.NavDirections directions, androidx.navigation.Navigator.Extras navigatorExtras);
-    method public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
-    method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
-    method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
-    method public final void navigate(String route);
-    method @MainThread public boolean navigateUp();
-    method @MainThread public boolean popBackStack();
-    method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive);
-    method @MainThread public boolean popBackStack(@IdRes int destinationId, boolean inclusive, boolean saveState);
-    method @MainThread public final boolean popBackStack(String route, boolean inclusive, optional boolean saveState);
-    method @MainThread public final boolean popBackStack(String route, boolean inclusive);
-    method public void removeOnDestinationChangedListener(androidx.navigation.NavController.OnDestinationChangedListener listener);
-    method @CallSuper public void restoreState(android.os.Bundle? navState);
-    method @CallSuper public android.os.Bundle? saveState();
-    method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph);
-    method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId);
-    method @CallSuper @MainThread public void setGraph(@NavigationRes int graphResId, android.os.Bundle? startDestinationArgs);
-    method @CallSuper @MainThread public void setGraph(androidx.navigation.NavGraph graph, android.os.Bundle? startDestinationArgs);
-    property public androidx.navigation.NavBackStackEntry? currentBackStackEntry;
-    property public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> currentBackStackEntryFlow;
-    property public androidx.navigation.NavDestination? currentDestination;
-    property @MainThread public androidx.navigation.NavGraph graph;
-    property public androidx.navigation.NavInflater navInflater;
-    property public androidx.navigation.NavigatorProvider navigatorProvider;
-    property public androidx.navigation.NavBackStackEntry? previousBackStackEntry;
-    property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> visibleEntries;
-    field public static final androidx.navigation.NavController.Companion Companion;
-    field public static final String KEY_DEEP_LINK_INTENT = "android-support-nav:controller:deepLinkIntent";
-  }
-
-  public static final class NavController.Companion {
-  }
-
-  public static fun interface NavController.OnDestinationChangedListener {
-    method public void onDestinationChanged(androidx.navigation.NavController controller, androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
-  }
-
-  public final class NavControllerKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavDeepLinkBuilder {
-    ctor public NavDeepLinkBuilder(android.content.Context context);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(@IdRes int destId);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(String route, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder addDestination(String route);
-    method public android.app.PendingIntent createPendingIntent();
-    method public androidx.core.app.TaskStackBuilder createTaskStackBuilder();
-    method public androidx.navigation.NavDeepLinkBuilder setArguments(android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder setComponentName(Class<? extends android.app.Activity> activityClass);
-    method public androidx.navigation.NavDeepLinkBuilder setComponentName(android.content.ComponentName componentName);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(@IdRes int destId);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, optional android.os.Bundle? args);
-    method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute);
-    method public androidx.navigation.NavDeepLinkBuilder setGraph(@NavigationRes int navGraphId);
-    method public androidx.navigation.NavDeepLinkBuilder setGraph(androidx.navigation.NavGraph navGraph);
-  }
-
-  public interface NavHost {
-    method public androidx.navigation.NavController getNavController();
-    property public abstract androidx.navigation.NavController navController;
-  }
-
-  public class NavHostController extends androidx.navigation.NavController {
-    ctor public NavHostController(android.content.Context context);
-    method public final void enableOnBackPressed(boolean enabled);
-    method public final void setLifecycleOwner(androidx.lifecycle.LifecycleOwner owner);
-    method public final void setOnBackPressedDispatcher(androidx.activity.OnBackPressedDispatcher dispatcher);
-    method public final void setViewModelStore(androidx.lifecycle.ViewModelStore viewModelStore);
-  }
-
-  public final class NavHostKt {
-    method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, optional @IdRes int id, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
-  }
-
-  public final class NavInflater {
-    ctor public NavInflater(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider);
-    method public androidx.navigation.NavGraph inflate(@NavigationRes int graphResId);
-    field public static final androidx.navigation.NavInflater.Companion Companion;
-  }
-
-  public static final class NavInflater.Companion {
-  }
-
-  public final class Navigation {
-    method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId, optional android.os.Bundle? args);
-    method public static android.view.View.OnClickListener createNavigateOnClickListener(@IdRes int resId);
-    method public static android.view.View.OnClickListener createNavigateOnClickListener(androidx.navigation.NavDirections directions);
-    method public static androidx.navigation.NavController findNavController(android.app.Activity activity, @IdRes int viewId);
-    method public static androidx.navigation.NavController findNavController(android.view.View view);
-    method public static void setViewNavController(android.view.View view, androidx.navigation.NavController? controller);
-    field public static final androidx.navigation.Navigation INSTANCE;
-  }
-
-  public final class ViewKt {
-    method public static androidx.navigation.NavController findNavController(android.view.View);
-  }
-
-}
-
diff --git a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt
index b53c19f..602e9f0 100644
--- a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt
+++ b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt
@@ -184,6 +184,7 @@
         assertThat(ids).asList().containsExactly(R.id.nav_root, R.id.second_test)
     }
 
+    @Suppress("DEPRECATION")
     @Test
     fun generateExplicitStartDestinationWithArgs() {
         val deepLinkBuilder = NavDeepLinkBuilder(targetContext)
@@ -204,6 +205,7 @@
         assertThat(args).containsExactly("arg1", "arg2").inOrder()
     }
 
+    @Suppress("DEPRECATION")
     @Test
     fun generateExplicitNavRootWithArgs() {
         val deepLinkBuilder = NavDeepLinkBuilder(targetContext)
diff --git a/navigation/navigation-testing/api/2.5.0-beta01.txt b/navigation/navigation-testing/api/2.5.0-beta01.txt
deleted file mode 100644
index 89f60a4..0000000
--- a/navigation/navigation-testing/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.testing {
-
-  public final class TestNavHostController extends androidx.navigation.NavHostController {
-    ctor public TestNavHostController(android.content.Context context);
-    method public java.util.List<androidx.navigation.NavBackStackEntry> getBackStack();
-    method public void setCurrentDestination(@IdRes int destId, optional android.os.Bundle args);
-    method public void setCurrentDestination(@IdRes int destId);
-    method public void setCurrentDestination(String destRoute, optional android.os.Bundle args);
-    method public void setCurrentDestination(String destRoute);
-    property public final java.util.List<androidx.navigation.NavBackStackEntry> backStack;
-  }
-
-  public final class TestNavigatorState extends androidx.navigation.NavigatorState {
-    ctor public TestNavigatorState(optional android.content.Context? context, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
-    ctor public TestNavigatorState(optional android.content.Context? context);
-    ctor public TestNavigatorState();
-    method public androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
-    method public androidx.navigation.NavBackStackEntry restoreBackStackEntry(androidx.navigation.NavBackStackEntry previouslySavedEntry);
-  }
-
-}
-
diff --git a/navigation/navigation-testing/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-testing/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index 89f60a4..0000000
--- a/navigation/navigation-testing/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.testing {
-
-  public final class TestNavHostController extends androidx.navigation.NavHostController {
-    ctor public TestNavHostController(android.content.Context context);
-    method public java.util.List<androidx.navigation.NavBackStackEntry> getBackStack();
-    method public void setCurrentDestination(@IdRes int destId, optional android.os.Bundle args);
-    method public void setCurrentDestination(@IdRes int destId);
-    method public void setCurrentDestination(String destRoute, optional android.os.Bundle args);
-    method public void setCurrentDestination(String destRoute);
-    property public final java.util.List<androidx.navigation.NavBackStackEntry> backStack;
-  }
-
-  public final class TestNavigatorState extends androidx.navigation.NavigatorState {
-    ctor public TestNavigatorState(optional android.content.Context? context, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
-    ctor public TestNavigatorState(optional android.content.Context? context);
-    ctor public TestNavigatorState();
-    method public androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
-    method public androidx.navigation.NavBackStackEntry restoreBackStackEntry(androidx.navigation.NavBackStackEntry previouslySavedEntry);
-  }
-
-}
-
diff --git a/navigation/navigation-testing/api/res-2.5.0-beta01.txt b/navigation/navigation-testing/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-testing/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-testing/api/restricted_2.5.0-beta01.txt b/navigation/navigation-testing/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index 89f60a4..0000000
--- a/navigation/navigation-testing/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.testing {
-
-  public final class TestNavHostController extends androidx.navigation.NavHostController {
-    ctor public TestNavHostController(android.content.Context context);
-    method public java.util.List<androidx.navigation.NavBackStackEntry> getBackStack();
-    method public void setCurrentDestination(@IdRes int destId, optional android.os.Bundle args);
-    method public void setCurrentDestination(@IdRes int destId);
-    method public void setCurrentDestination(String destRoute, optional android.os.Bundle args);
-    method public void setCurrentDestination(String destRoute);
-    property public final java.util.List<androidx.navigation.NavBackStackEntry> backStack;
-  }
-
-  public final class TestNavigatorState extends androidx.navigation.NavigatorState {
-    ctor public TestNavigatorState(optional android.content.Context? context, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
-    ctor public TestNavigatorState(optional android.content.Context? context);
-    ctor public TestNavigatorState();
-    method public androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
-    method public androidx.navigation.NavBackStackEntry restoreBackStackEntry(androidx.navigation.NavBackStackEntry previouslySavedEntry);
-  }
-
-}
-
diff --git a/navigation/navigation-ui-ktx/api/2.5.0-beta01.txt b/navigation/navigation-ui-ktx/api/2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-ui-ktx/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-ui-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-ui-ktx/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-ui-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-ui-ktx/api/res-2.5.0-beta01.txt b/navigation/navigation-ui-ktx/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-ui-ktx/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-ui-ktx/api/restricted_2.5.0-beta01.txt b/navigation/navigation-ui-ktx/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-ui-ktx/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-ui/api/2.5.0-beta01.txt b/navigation/navigation-ui/api/2.5.0-beta01.txt
deleted file mode 100644
index 9551da2..0000000
--- a/navigation/navigation-ui/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.ui {
-
-  public final class ActivityKt {
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-  }
-
-  public final class AppBarConfiguration {
-    method @Deprecated public androidx.drawerlayout.widget.DrawerLayout? getDrawerLayout();
-    method public androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? getFallbackOnNavigateUpListener();
-    method public androidx.customview.widget.Openable? getOpenableLayout();
-    method public java.util.Set<java.lang.Integer> getTopLevelDestinations();
-    property @Deprecated public final androidx.drawerlayout.widget.DrawerLayout? drawerLayout;
-    property public final androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener;
-    property public final androidx.customview.widget.Openable? openableLayout;
-    property public final java.util.Set<java.lang.Integer> topLevelDestinations;
-  }
-
-  public static final class AppBarConfiguration.Builder {
-    ctor public AppBarConfiguration.Builder(androidx.navigation.NavGraph navGraph);
-    ctor public AppBarConfiguration.Builder(android.view.Menu topLevelMenu);
-    ctor public AppBarConfiguration.Builder(int... topLevelDestinationIds);
-    ctor public AppBarConfiguration.Builder(java.util.Set<java.lang.Integer> topLevelDestinationIds);
-    method public androidx.navigation.ui.AppBarConfiguration build();
-    method @Deprecated public androidx.navigation.ui.AppBarConfiguration.Builder setDrawerLayout(androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public androidx.navigation.ui.AppBarConfiguration.Builder setFallbackOnNavigateUpListener(androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener);
-    method public androidx.navigation.ui.AppBarConfiguration.Builder setOpenableLayout(androidx.customview.widget.Openable? openableLayout);
-  }
-
-  public static fun interface AppBarConfiguration.OnNavigateUpListener {
-    method public boolean onNavigateUp();
-  }
-
-  public final class AppBarConfigurationKt {
-    method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(androidx.navigation.NavGraph navGraph, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
-    method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(android.view.Menu topLevelMenu, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
-    method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(java.util.Set<java.lang.Integer> topLevelDestinationIds, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
-  }
-
-  public final class BottomNavigationViewKt {
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView, androidx.navigation.NavController navController);
-  }
-
-  public final class CollapsingToolbarLayoutKt {
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-  }
-
-  public final class MenuItemKt {
-    method public static boolean onNavDestinationSelected(android.view.MenuItem, androidx.navigation.NavController navController);
-  }
-
-  public final class NavControllerKt {
-    method public static boolean navigateUp(androidx.navigation.NavController, androidx.customview.widget.Openable? drawerLayout);
-    method public static boolean navigateUp(androidx.navigation.NavController, androidx.navigation.ui.AppBarConfiguration appBarConfiguration);
-  }
-
-  public final class NavigationUI {
-    method public static boolean navigateUp(androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static boolean navigateUp(androidx.navigation.NavController navController, androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static boolean onNavDestinationSelected(android.view.MenuItem item, androidx.navigation.NavController navController);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController);
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView navigationBarView, androidx.navigation.NavController navController);
-    field public static final androidx.navigation.ui.NavigationUI INSTANCE;
-  }
-
-  public final class NavigationViewKt {
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationView, androidx.navigation.NavController navController);
-  }
-
-  public final class ToolbarKt {
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-  }
-
-}
-
diff --git a/navigation/navigation-ui/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-ui/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index 62b5ce4..0000000
--- a/navigation/navigation-ui/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.ui {
-
-  public final class ActivityKt {
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-  }
-
-  public final class AppBarConfiguration {
-    method @Deprecated public androidx.drawerlayout.widget.DrawerLayout? getDrawerLayout();
-    method public androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? getFallbackOnNavigateUpListener();
-    method public androidx.customview.widget.Openable? getOpenableLayout();
-    method public java.util.Set<java.lang.Integer> getTopLevelDestinations();
-    property @Deprecated public final androidx.drawerlayout.widget.DrawerLayout? drawerLayout;
-    property public final androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener;
-    property public final androidx.customview.widget.Openable? openableLayout;
-    property public final java.util.Set<java.lang.Integer> topLevelDestinations;
-  }
-
-  public static final class AppBarConfiguration.Builder {
-    ctor public AppBarConfiguration.Builder(androidx.navigation.NavGraph navGraph);
-    ctor public AppBarConfiguration.Builder(android.view.Menu topLevelMenu);
-    ctor public AppBarConfiguration.Builder(int... topLevelDestinationIds);
-    ctor public AppBarConfiguration.Builder(java.util.Set<java.lang.Integer> topLevelDestinationIds);
-    method public androidx.navigation.ui.AppBarConfiguration build();
-    method @Deprecated public androidx.navigation.ui.AppBarConfiguration.Builder setDrawerLayout(androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public androidx.navigation.ui.AppBarConfiguration.Builder setFallbackOnNavigateUpListener(androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener);
-    method public androidx.navigation.ui.AppBarConfiguration.Builder setOpenableLayout(androidx.customview.widget.Openable? openableLayout);
-  }
-
-  public static fun interface AppBarConfiguration.OnNavigateUpListener {
-    method public boolean onNavigateUp();
-  }
-
-  public final class AppBarConfigurationKt {
-    method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(androidx.navigation.NavGraph navGraph, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
-    method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(android.view.Menu topLevelMenu, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
-    method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(java.util.Set<java.lang.Integer> topLevelDestinationIds, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
-  }
-
-  public final class BottomNavigationViewKt {
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView, androidx.navigation.NavController navController);
-  }
-
-  public final class CollapsingToolbarLayoutKt {
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-  }
-
-  public final class MenuItemKt {
-    method public static boolean onNavDestinationSelected(android.view.MenuItem, androidx.navigation.NavController navController);
-  }
-
-  public final class NavControllerKt {
-    method public static boolean navigateUp(androidx.navigation.NavController, androidx.customview.widget.Openable? drawerLayout);
-    method public static boolean navigateUp(androidx.navigation.NavController, androidx.navigation.ui.AppBarConfiguration appBarConfiguration);
-  }
-
-  public final class NavigationUI {
-    method public static boolean navigateUp(androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static boolean navigateUp(androidx.navigation.NavController navController, androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static boolean onNavDestinationSelected(android.view.MenuItem item, androidx.navigation.NavController navController);
-    method @androidx.navigation.ui.NavigationUiSaveStateControl public static boolean onNavDestinationSelected(android.view.MenuItem item, androidx.navigation.NavController navController, boolean saveState);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController);
-    method @androidx.navigation.ui.NavigationUiSaveStateControl public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController, boolean saveState);
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView navigationBarView, androidx.navigation.NavController navController);
-    method @androidx.navigation.ui.NavigationUiSaveStateControl public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView navigationBarView, androidx.navigation.NavController navController, boolean saveState);
-    field public static final androidx.navigation.ui.NavigationUI INSTANCE;
-  }
-
-  @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface NavigationUiSaveStateControl {
-  }
-
-  public final class NavigationViewKt {
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationView, androidx.navigation.NavController navController);
-  }
-
-  public final class ToolbarKt {
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-  }
-
-}
-
diff --git a/navigation/navigation-ui/api/res-2.5.0-beta01.txt b/navigation/navigation-ui/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e65fdbe..0000000
--- a/navigation/navigation-ui/api/res-2.5.0-beta01.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-anim nav_default_enter_anim
-anim nav_default_exit_anim
-anim nav_default_pop_enter_anim
-anim nav_default_pop_exit_anim
-animator nav_default_enter_anim
-animator nav_default_exit_anim
-animator nav_default_pop_enter_anim
-animator nav_default_pop_exit_anim
diff --git a/navigation/navigation-ui/api/restricted_2.5.0-beta01.txt b/navigation/navigation-ui/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index 9551da2..0000000
--- a/navigation/navigation-ui/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-// Signature format: 4.0
-package androidx.navigation.ui {
-
-  public final class ActivityKt {
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-  }
-
-  public final class AppBarConfiguration {
-    method @Deprecated public androidx.drawerlayout.widget.DrawerLayout? getDrawerLayout();
-    method public androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? getFallbackOnNavigateUpListener();
-    method public androidx.customview.widget.Openable? getOpenableLayout();
-    method public java.util.Set<java.lang.Integer> getTopLevelDestinations();
-    property @Deprecated public final androidx.drawerlayout.widget.DrawerLayout? drawerLayout;
-    property public final androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener;
-    property public final androidx.customview.widget.Openable? openableLayout;
-    property public final java.util.Set<java.lang.Integer> topLevelDestinations;
-  }
-
-  public static final class AppBarConfiguration.Builder {
-    ctor public AppBarConfiguration.Builder(androidx.navigation.NavGraph navGraph);
-    ctor public AppBarConfiguration.Builder(android.view.Menu topLevelMenu);
-    ctor public AppBarConfiguration.Builder(int... topLevelDestinationIds);
-    ctor public AppBarConfiguration.Builder(java.util.Set<java.lang.Integer> topLevelDestinationIds);
-    method public androidx.navigation.ui.AppBarConfiguration build();
-    method @Deprecated public androidx.navigation.ui.AppBarConfiguration.Builder setDrawerLayout(androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public androidx.navigation.ui.AppBarConfiguration.Builder setFallbackOnNavigateUpListener(androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener);
-    method public androidx.navigation.ui.AppBarConfiguration.Builder setOpenableLayout(androidx.customview.widget.Openable? openableLayout);
-  }
-
-  public static fun interface AppBarConfiguration.OnNavigateUpListener {
-    method public boolean onNavigateUp();
-  }
-
-  public final class AppBarConfigurationKt {
-    method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(androidx.navigation.NavGraph navGraph, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
-    method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(android.view.Menu topLevelMenu, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
-    method public static inline androidx.navigation.ui.AppBarConfiguration AppBarConfiguration(java.util.Set<java.lang.Integer> topLevelDestinationIds, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
-  }
-
-  public final class BottomNavigationViewKt {
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView, androidx.navigation.NavController navController);
-  }
-
-  public final class CollapsingToolbarLayoutKt {
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-  }
-
-  public final class MenuItemKt {
-    method public static boolean onNavDestinationSelected(android.view.MenuItem, androidx.navigation.NavController navController);
-  }
-
-  public final class NavControllerKt {
-    method public static boolean navigateUp(androidx.navigation.NavController, androidx.customview.widget.Openable? drawerLayout);
-    method public static boolean navigateUp(androidx.navigation.NavController, androidx.navigation.ui.AppBarConfiguration appBarConfiguration);
-  }
-
-  public final class NavigationUI {
-    method public static boolean navigateUp(androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static boolean navigateUp(androidx.navigation.NavController navController, androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static boolean onNavDestinationSelected(android.view.MenuItem item, androidx.navigation.NavController navController);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity activity, androidx.navigation.NavController navController);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.customview.widget.Openable? openableLayout);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-    method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController);
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationView navigationView, androidx.navigation.NavController navController);
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView navigationBarView, androidx.navigation.NavController navController);
-    field public static final androidx.navigation.ui.NavigationUI INSTANCE;
-  }
-
-  public final class NavigationViewKt {
-    method public static void setupWithNavController(com.google.android.material.navigation.NavigationView, androidx.navigation.NavController navController);
-  }
-
-  public final class ToolbarKt {
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
-    method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
-  }
-
-}
-
diff --git a/preference/preference/lint-baseline.xml b/preference/preference/lint-baseline.xml
index 20e6e28..3c0ec46 100644
--- a/preference/preference/lint-baseline.xml
+++ b/preference/preference/lint-baseline.xml
@@ -1,14 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 28; however, the containing class androidx.preference.PreferenceCategory is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            holder.itemView.setAccessibilityHeading(true);"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceCategory.java"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="cli" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="KotlinPropertyAccess"
@@ -38,15 +29,6 @@
     </issue>
 
     <issue
-        id="KotlinPropertyAccess"
-        message="This method should be called `getShouldUseGeneratedIds` such that `shouldUseGeneratedIds` can be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes"
-        errorLine1="    public boolean shouldUseGeneratedIds() {"
-        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceScreen.java"/>
-    </issue>
-
-    <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected Object onGetDefaultValue(@NonNull TypedArray a, int index) {"
@@ -67,15 +49,6 @@
     <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static EditTextPreferenceDialogFragmentCompat newInstance(String key) {"
-        errorLine2="                                                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/EditTextPreferenceDialogFragmentCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setEntries(CharSequence[] entries) {"
         errorLine2="                           ~~~~~~~~~~~~~~">
         <location
@@ -157,15 +130,6 @@
     <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static ListPreferenceDialogFragmentCompat newInstance(String key) {"
-        errorLine2="                                                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/ListPreferenceDialogFragmentCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setEntries(CharSequence[] entries) {"
         errorLine2="                           ~~~~~~~~~~~~~~">
         <location
@@ -247,15 +211,6 @@
     <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static MultiSelectListPreferenceDialogFragmentCompat newInstance(String key) {"
-        errorLine2="                                                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/MultiSelectListPreferenceDialogFragmentCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setKey(String key) {"
         errorLine2="                       ~~~~~~">
         <location
@@ -382,159 +337,6 @@
     <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void putString(String key, @Nullable String value) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void putStringSet(String key, @Nullable Set&lt;String> values) {"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void putInt(String key, int value) {"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void putLong(String key, long value) {"
-        errorLine2="                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void putFloat(String key, float value) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void putBoolean(String key, boolean value) {"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getString(String key, @Nullable String defValue) {"
-        errorLine2="                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Set&lt;String> getStringSet(String key, @Nullable Set&lt;String> defValues) {"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public int getInt(String key, int defValue) {"
-        errorLine2="                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public long getLong(String key, long defValue) {"
-        errorLine2="                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public float getFloat(String key, float defValue) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public boolean getBoolean(String key, boolean defValue) {"
-        errorLine2="                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public DialogPreference getPreference() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceDialogFragmentCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public PreferenceManager getPreferenceManager() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public PreferenceScreen getPreferenceScreen() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setPreferenceScreen(PreferenceScreen preferenceScreen) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public final RecyclerView getListView() {"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static SharedPreferences getDefaultSharedPreferences(@NonNull Context context) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
@@ -586,40 +388,4 @@
             file="src/main/java/androidx/preference/PreferenceManager.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public View findViewById(@IdRes int id) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/preference/PreferenceViewHolder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    protected void onSetInitialValue(Object defaultValue) {"
-        errorLine2="                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/SeekBarPreference.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    protected void onSetInitialValue(Object defaultValue) {"
-        errorLine2="                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/preference/TwoStatePreference.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    protected void syncSummaryView(View view) {"
-        errorLine2="                                   ~~~~">
-        <location
-            file="src/main/java/androidx/preference/TwoStatePreference.java"/>
-    </issue>
-
 </issues>
diff --git a/preference/preference/src/main/java/androidx/preference/Preference.java b/preference/preference/src/main/java/androidx/preference/Preference.java
index 8872612..79d8a2d 100644
--- a/preference/preference/src/main/java/androidx/preference/Preference.java
+++ b/preference/preference/src/main/java/androidx/preference/Preference.java
@@ -25,6 +25,7 @@
 import android.content.SharedPreferences;
 import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -2274,10 +2275,13 @@
             CharSequence summary = mPreference.getSummary();
             ClipData clip = ClipData.newPlainText(CLIPBOARD_ID, summary);
             clipboard.setPrimaryClip(clip);
-            Toast.makeText(mPreference.getContext(),
-                    mPreference.getContext().getString(R.string.preference_copied,
-                            summary),
-                    Toast.LENGTH_SHORT).show();
+            // T has a clipboard overlay that automatically shows copied text, so only show a Toast
+            // below T.
+            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
+                Toast.makeText(mPreference.getContext(),
+                        mPreference.getContext().getString(R.string.preference_copied, summary),
+                        Toast.LENGTH_SHORT).show();
+            }
             return true;
         }
     }
diff --git a/print/print/lint-baseline.xml b/print/print/lint-baseline.xml
deleted file mode 100644
index 64de3a4..0000000
--- a/print/print/lint-baseline.xml
+++ /dev/null
@@ -1,463 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="        PrintAttributes attr = new PrintAttributes.Builder()"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                .setMediaSize(mediaSize)"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                .setColorMode(mColorMode)"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                .build();"
-        errorLine2="                 ~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="        printManager.print(jobName,"
-        errorLine2="                     ~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="        PrintAttributes.Builder builder = new PrintAttributes.Builder();"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="        builder.setColorMode(mColorMode);"
-        errorLine2="                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            builder.setMediaSize(PrintAttributes.MediaSize.UNKNOWN_LANDSCAPE);"
-        errorLine2="                    ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            builder.setMediaSize(PrintAttributes.MediaSize.UNKNOWN_PORTRAIT);"
-        errorLine2="                    ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="        PrintAttributes attr = builder.build();"
-        errorLine2="                                       ~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="        printManager.print(jobName, printDocumentAdapter, attr);"
-        errorLine2="                     ~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="        PrintAttributes.Builder b = new PrintAttributes.Builder()"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                .setMediaSize(other.getMediaSize())"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                .setMediaSize(other.getMediaSize())"
-        errorLine2="                                    ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                .setResolution(other.getResolution())"
-        errorLine2="                 ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                .setResolution(other.getResolution())"
-        errorLine2="                                     ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                .setMinMargins(other.getMinMargins());"
-        errorLine2="                 ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                .setMinMargins(other.getMinMargins());"
-        errorLine2="                                     ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="        if (other.getColorMode() != 0) {"
-        errorLine2="                  ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            b.setColorMode(other.getColorMode());"
-        errorLine2="              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            b.setColorMode(other.getColorMode());"
-        errorLine2="                                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            if (other.getDuplexMode() != 0) {"
-        errorLine2="                      ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                b.setDuplexMode(other.getDuplexMode());"
-        errorLine2="                  ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                b.setDuplexMode(other.getDuplexMode());"
-        errorLine2="                                      ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    .setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0)).build();"
-        errorLine2="                     ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    .setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0)).build();"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    .setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0)).build();"
-        errorLine2="                                                                            ~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    if (cancellationSignal.isCanceled()) {"
-        errorLine2="                                           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    PrintedPdfDocument pdfDocument = new PrintedPdfDocument(mContext,"
-        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                            pdfAttributes.getColorMode());"
-        errorLine2="                                          ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    if (cancellationSignal.isCanceled()) {"
-        errorLine2="                                           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                        PdfDocument.Page page = pdfDocument.startPage(1);"
-        errorLine2="                                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                            contentRect = new RectF(page.getInfo().getContentRect());"
-        errorLine2="                                                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                            contentRect = new RectF(page.getInfo().getContentRect());"
-        errorLine2="                                                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                            PrintedPdfDocument dummyDocument = new PrintedPdfDocument(mContext,"
-        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                            PdfDocument.Page dummyPage = dummyDocument.startPage(1);"
-        errorLine2="                                                                       ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                            contentRect = new RectF(dummyPage.getInfo().getContentRect());"
-        errorLine2="                                                              ~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                            contentRect = new RectF(dummyPage.getInfo().getContentRect());"
-        errorLine2="                                                                        ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                            dummyDocument.finishPage(dummyPage);"
-        errorLine2="                                          ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                            dummyDocument.close();"
-        errorLine2="                                          ~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                            page.getCanvas().clipRect(contentRect);"
-        errorLine2="                                 ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                        page.getCanvas().drawBitmap(maybeGrayscale, matrix, null);"
-        errorLine2="                             ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                        pdfDocument.finishPage(page);"
-        errorLine2="                                    ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                        if (cancellationSignal.isCanceled()) {"
-        errorLine2="                                               ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                        pdfDocument.writeTo("
-        errorLine2="                                    ~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                        pdfDocument.close();"
-        errorLine2="                                    ~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 16; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                if (cancellationSignal.isCanceled()) {"
-        errorLine2="                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    writeResultCallback.onWriteCancelled();"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    writeResultCallback.onWriteFinished("
-        errorLine2="                                        ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class null is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    writeResultCallback.onWriteFailed(null);"
-        errorLine2="                                        ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 26; however, the containing class androidx.print.PrintHelper is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                mDecodeOptions.inPreferredColorSpace = ColorSpace.get(ColorSpace.Named.SRGB);"
-        errorLine2="                                                                  ~~~">
-        <location
-            file="src/main/java/androidx/print/PrintHelper.java"/>
-    </issue>
-
-</issues>
diff --git a/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java b/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java
index 694d2c1..0bcb376 100644
--- a/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java
+++ b/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java
@@ -307,6 +307,8 @@
                 return ProfileVersion.V010_P;
 
             case Build.VERSION_CODES.S:
+            case Build.VERSION_CODES.S_V2:
+            case Build.VERSION_CODES.TIRAMISU:
                 return ProfileVersion.V015_S;
 
             default:
@@ -339,6 +341,8 @@
 
             // The profiles for S require a typeIdCount. Therefore metadata is required.
             case Build.VERSION_CODES.S:
+            case Build.VERSION_CODES.S_V2:
+            case Build.VERSION_CODES.TIRAMISU:
                 return true;
 
             default:
diff --git a/recommendation/recommendation/lint-baseline.xml b/recommendation/recommendation/lint-baseline.xml
deleted file mode 100644
index f8813c0..0000000
--- a/recommendation/recommendation/lint-baseline.xml
+++ /dev/null
@@ -1,607 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getIdTag() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getTitle() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getText() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getSourceName() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Bitmap getContentImage() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getBackgroundImageUri() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setGroup(String groupTag) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getGroup() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void setSortKey(String sortKey) {"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getSortKey() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public IntentData getContentIntent() {"
-        errorLine2="           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public IntentData getDismissIntent() {"
-        errorLine2="           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String[] getContentTypes() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getPrimaryContentType() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String[] getGenres() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getPricingType() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getPricingValue() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getMaturityRating() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setIdTag(String idTag) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setIdTag(String idTag) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setTitle(String title) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setTitle(String title) {"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setText(@Nullable String description) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setSourceName(@Nullable String source) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setContentImage(Bitmap image) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setContentImage(Bitmap image) {"
-        errorLine2="                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setBadgeIcon(@DrawableRes int iconResourceId) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setBackgroundImageUri(@Nullable String imageUri) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setColor(@ColorInt int color) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setGroup(@Nullable String groupTag) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setSortKey(@Nullable String sortKey) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setProgress(int max, int progress) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setAutoDismiss(boolean autoDismiss) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setContentIntentData(@IntentType int intentType, Intent intent,"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setContentIntentData(@IntentType int intentType, Intent intent,"
-        errorLine2="                                                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setDismissIntentData(@IntentType int intentType, @Nullable Intent intent,"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setContentTypes(String[] types) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setContentTypes(String[] types) {"
-        errorLine2="                                       ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setGenres(String[] genres) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setGenres(String[] genres) {"
-        errorLine2="                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setPricingInformation(@ContentPricing String priceType,"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setPricingInformation(@ContentPricing String priceType,"
-        errorLine2="                                                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setStatus(@ContentStatus int contentStatus) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setMaturityRating(@ContentMaturity String maturityRating) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setMaturityRating(@ContentMaturity String maturityRating) {"
-        errorLine2="                                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setRunningTime(long length) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public ContentRecommendation build() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Notification getNotificationObject(Context context) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Notification getNotificationObject(Context context) {"
-        errorLine2="                                              ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public RecommendationExtender(Notification notif) {"
-        errorLine2="                                  ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public RecommendationExtender setContentTypes(String[] types) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public RecommendationExtender setContentTypes(String[] types) {"
-        errorLine2="                                                  ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String[] getContentTypes() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getPrimaryContentType() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public RecommendationExtender setGenres(String[] genres) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public RecommendationExtender setGenres(String[] genres) {"
-        errorLine2="                                            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String[] getGenres() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public RecommendationExtender setPricingInformation("
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            @ContentRecommendation.ContentPricing String priceType, String priceValue) {"
-        errorLine2="                                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            @ContentRecommendation.ContentPricing String priceType, String priceValue) {"
-        errorLine2="                                                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getPricingType() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getPricingValue() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public RecommendationExtender setStatus("
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public RecommendationExtender setMaturityRating("
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            @ContentRecommendation.ContentMaturity String maturityRating) {"
-        errorLine2="                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getMaturityRating() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public RecommendationExtender setRunningTime(long length) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
-    </issue>
-
-</issues>
diff --git a/recyclerview/recyclerview-selection/src/androidTest/java/androidx/recyclerview/selection/testing/TestData.java b/recyclerview/recyclerview-selection/src/androidTest/java/androidx/recyclerview/selection/testing/TestData.java
index 14e27aa..5fcd73a 100644
--- a/recyclerview/recyclerview-selection/src/androidTest/java/androidx/recyclerview/selection/testing/TestData.java
+++ b/recyclerview/recyclerview-selection/src/androidTest/java/androidx/recyclerview/selection/testing/TestData.java
@@ -31,8 +31,8 @@
 
     public static List<Long> createLongData(int num) {
         List<Long> items = new ArrayList<>(num);
-        for (int i = 0; i < num; ++i) {
-            items.add(new Long(i));
+        for (long i = 0; i < num; ++i) {
+            items.add(i);
         }
         return items;
     }
diff --git a/recyclerview/recyclerview/lint-baseline.xml b/recyclerview/recyclerview/lint-baseline.xml
index 9d51b64..f4df0f4 100644
--- a/recyclerview/recyclerview/lint-baseline.xml
+++ b/recyclerview/recyclerview/lint-baseline.xml
@@ -1,68 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-beta02" type="baseline" client="cli" dependencies="false" name="AGP (7.1.0-beta02)" variant="all" version="7.1.0-beta02">
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 21 (current min is 14): `new android.view.View`"
-        errorLine1="            super(context, attrs, defStyleAttr, defStyleRes);"
-        errorLine2="            ~~~~~">
-        <location
-            file="src/androidTest/java/androidx/recyclerview/widget/BaseWrapContentWithAspectRatioTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 24 (current min is 14): `java.util.Map#getOrDefault`"
-        errorLine1="            } else if (duplicateDiffs.getOrDefault(after[index].id, 0) > 0 &amp;&amp; item.newItem) {"
-        errorLine2="                                      ~~~~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/recyclerview/widget/DiffUtilTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 24 (current min is 14): `java.util.Map#getOrDefault`"
-        errorLine1="            duplicateDiffs[it.id] = 1 + duplicateDiffs.getOrDefault(it.id, 1)"
-        errorLine2="                                                       ~~~~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/recyclerview/widget/DiffUtilTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 24 (current min is 14): `java.util.Map#getOrDefault`"
-        errorLine1="            duplicateDiffs[it.id] = -1 + duplicateDiffs.getOrDefault(it.id, 0)"
-        errorLine2="                                                        ~~~~~~~~~~~~">
-        <location
-            file="src/test/java/androidx/recyclerview/widget/DiffUtilTest.kt"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 16 (current min is 14): `android.view.View#isScrollContainer`"
-        errorLine1="                + &quot;handle it properly&quot;, true, mRecyclerView.isScrollContainer());"
-        errorLine2="                                                            ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/recyclerview/widget/RecyclerViewBasicTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 17 (current min is 14): `android.view.View#setLayoutDirection`"
-        errorLine1="            mRecyclerView.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/recyclerview/widget/RecyclerViewFocusTest.java"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 21 (current min is 14): `new android.widget.FrameLayout`"
-        errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
-        errorLine2="        ~~~~~">
-        <location
-            file="src/androidTest/java/androidx/recyclerview/widget/TestContentView.java"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
@@ -92,42 +29,6 @@
     </issue>
 
     <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="        synchronized SyncQueueItem next() {"
-        errorLine2="        ^">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/MessageThreadUtil.java"/>
-    </issue>
-
-    <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="        synchronized void sendMessageAtFrontOfQueue(SyncQueueItem item) {"
-        errorLine2="        ^">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/MessageThreadUtil.java"/>
-    </issue>
-
-    <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="        synchronized void sendMessage(SyncQueueItem item) {"
-        errorLine2="        ^">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/MessageThreadUtil.java"/>
-    </issue>
-
-    <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="        synchronized void removeMessages(int what) {"
-        errorLine2="        ^">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/MessageThreadUtil.java"/>
-    </issue>
-
-    <issue
         id="KotlinPropertyAccess"
         message="This method should be called `getHasFixedSize` such that `hasFixedSize` can be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes"
         errorLine1="    public boolean hasFixedSize() {"
@@ -156,169 +57,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onChanged(int position, int count, Object payload) {"
-        errorLine2="                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/AdapterListUpdateCallback.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Builder&lt;T> setMainThreadExecutor(Executor executor) {"
-        errorLine2="                                                ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/AsyncDifferConfig.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Builder&lt;T> setBackgroundThreadExecutor(Executor executor) {"
-        errorLine2="                                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/AsyncDifferConfig.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onChanged(int position, int count, Object payload) {"
-        errorLine2="                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/BatchingListUpdateCallback.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean animateRemove(final RecyclerView.ViewHolder holder) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DefaultItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean animateAdd(final RecyclerView.ViewHolder holder) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DefaultItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean animateMove(final RecyclerView.ViewHolder holder, int fromX, int fromY,"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DefaultItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder,"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DefaultItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder,"
-        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DefaultItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void endAnimation(RecyclerView.ViewHolder item) {"
-        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DefaultItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public DividerItemDecoration(Context context, int orientation) {"
-        errorLine2="                                 ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DividerItemDecoration.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DividerItemDecoration.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {"
-        errorLine2="                                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DividerItemDecoration.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {"
-        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DividerItemDecoration.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void getItemOffsets(Rect outRect, View view, RecyclerView parent,"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DividerItemDecoration.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void getItemOffsets(Rect outRect, View view, RecyclerView parent,"
-        errorLine2="                                             ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DividerItemDecoration.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void getItemOffsets(Rect outRect, View view, RecyclerView parent,"
-        errorLine2="                                                        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DividerItemDecoration.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            RecyclerView.State state) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/DividerItemDecoration.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                             ~~~~~~~">
         <location
@@ -327,7 +66,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                              ~~~~~~~~~~~~">
         <location
@@ -336,7 +75,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GridLayoutManager(Context context, int spanCount) {"
         errorLine2="                             ~~~~~~~">
         <location
@@ -345,7 +84,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public GridLayoutManager(Context context, int spanCount,"
         errorLine2="                             ~~~~~~~">
         <location
@@ -354,7 +93,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int getRowCountForAccessibility(RecyclerView.Recycler recycler,"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -363,7 +102,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.State state) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -372,7 +111,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int getColumnCountForAccessibility(RecyclerView.Recycler recycler,"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -381,7 +120,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.State state) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -390,7 +129,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onInitializeAccessibilityNodeInfoForItem(RecyclerView.Recycler recycler,"
         errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -399,7 +138,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.State state, View host, AccessibilityNodeInfoCompat info) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -408,7 +147,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.State state, View host, AccessibilityNodeInfoCompat info) {"
         errorLine2="                                      ~~~~">
         <location
@@ -417,7 +156,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.State state, View host, AccessibilityNodeInfoCompat info) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -426,7 +165,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -435,7 +174,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
         <location
@@ -444,7 +183,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onLayoutCompleted(RecyclerView.State state) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
         <location
@@ -453,7 +192,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemsAdded(RecyclerView recyclerView, int positionStart, int itemCount) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
@@ -462,7 +201,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemsChanged(RecyclerView recyclerView) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
@@ -471,7 +210,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemsRemoved(RecyclerView recyclerView, int positionStart, int itemCount) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
@@ -480,7 +219,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemsUpdated(RecyclerView recyclerView, int positionStart, int itemCount,"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
@@ -489,7 +228,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Object payload) {"
         errorLine2="            ~~~~~~">
         <location
@@ -498,7 +237,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemsMoved(RecyclerView recyclerView, int from, int to, int itemCount) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
@@ -507,7 +246,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateDefaultLayoutParams() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -516,7 +255,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateLayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -525,7 +264,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateLayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                                          ~~~~~~~">
         <location
@@ -534,7 +273,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateLayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                                                     ~~~~~~~~~~~~">
         <location
@@ -543,7 +282,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -552,7 +291,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -561,7 +300,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean checkLayoutParams(RecyclerView.LayoutParams lp) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -570,7 +309,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setSpanSizeLookup(SpanSizeLookup spanSizeLookup) {"
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
@@ -579,7 +318,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SpanSizeLookup getSpanSizeLookup() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -588,7 +327,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMeasuredDimension(Rect childrenBounds, int wSpec, int hSpec) {"
         errorLine2="                                     ~~~~">
         <location
@@ -597,7 +336,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler,"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -606,7 +345,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.State state) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -615,7 +354,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler,"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -624,7 +363,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.State state) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -633,7 +372,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onFocusSearchFailed(View focused, int direction,"
         errorLine2="           ~~~~">
         <location
@@ -642,7 +381,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onFocusSearchFailed(View focused, int direction,"
         errorLine2="                                    ~~~~">
         <location
@@ -651,7 +390,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -660,7 +399,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -669,7 +408,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int computeHorizontalScrollRange(RecyclerView.State state) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -678,7 +417,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int computeVerticalScrollRange(RecyclerView.State state) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
@@ -687,7 +426,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int computeHorizontalScrollOffset(RecyclerView.State state) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
         <location
@@ -696,7 +435,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int computeVerticalScrollOffset(RecyclerView.State state) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~">
         <location
@@ -705,7 +444,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -714,7 +453,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
@@ -723,7 +462,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ViewGroup.MarginLayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -732,7 +471,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -741,7 +480,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(RecyclerView.LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -750,520 +489,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {"
-        errorLine2="                                     ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {"
-        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {"
-        errorLine2="                                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {"
-        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void getItemOffsets(Rect outRect, View view, RecyclerView parent,"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void getItemOffsets(Rect outRect, View view, RecyclerView parent,"
-        errorLine2="                                             ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void getItemOffsets(Rect outRect, View view, RecyclerView parent,"
-        errorLine2="                                                        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            RecyclerView.State state) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public ViewHolder chooseDropTarget(@NonNull ViewHolder selected,"
-        errorLine2="               ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                ViewHolder viewHolder,"
-        errorLine2="                ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    void onDraw(Canvas c, RecyclerView recyclerView, View view,"
-        errorLine2="                ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchUIUtil.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    void onDraw(Canvas c, RecyclerView recyclerView, View view,"
-        errorLine2="                          ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchUIUtil.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    void onDraw(Canvas c, RecyclerView recyclerView, View view,"
-        errorLine2="                                                     ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchUIUtil.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    void onDrawOver(Canvas c, RecyclerView recyclerView, View view,"
-        errorLine2="                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchUIUtil.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    void onDrawOver(Canvas c, RecyclerView recyclerView, View view,"
-        errorLine2="                              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchUIUtil.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    void onDrawOver(Canvas c, RecyclerView recyclerView, View view,"
-        errorLine2="                                                         ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchUIUtil.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    void clearView(View view);"
-        errorLine2="                   ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchUIUtil.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    void onSelected(View view);"
-        errorLine2="                    ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ItemTouchUIUtil.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LinearLayoutManager(Context context) {"
-        errorLine2="                               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LinearLayoutManager(Context context, @RecyclerView.Orientation int orientation,"
-        errorLine2="                               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr,"
-        errorLine2="                               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr,"
-        errorLine2="                                                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public RecyclerView.LayoutParams generateDefaultLayoutParams() {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDetachedFromWindow(RecyclerView view, RecyclerView.Recycler recycler) {"
-        errorLine2="                                     ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDetachedFromWindow(RecyclerView view, RecyclerView.Recycler recycler) {"
-        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Parcelable onSaveInstanceState() {"
-        errorLine2="           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onRestoreInstanceState(Parcelable state) {"
-        errorLine2="                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View findViewByPosition(int position) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected int getExtraLayoutSpace(RecyclerView.State state) {"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,"
-        errorLine2="                                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,"
-        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public PointF computeScrollVectorForPosition(int targetPosition) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onLayoutCompleted(RecyclerView.State state) {"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler,"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            RecyclerView.State state) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler,"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            RecyclerView.State state) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int computeHorizontalScrollOffset(RecyclerView.State state) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int computeVerticalScrollOffset(RecyclerView.State state) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int computeHorizontalScrollExtent(RecyclerView.State state) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int computeVerticalScrollExtent(RecyclerView.State state) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int computeHorizontalScrollRange(RecyclerView.State state) {"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int computeVerticalScrollRange(RecyclerView.State state) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            LayoutPrefetchRegistry layoutPrefetchRegistry) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void collectAdjacentPrefetchPositions(int dx, int dy, RecyclerView.State state,"
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            LayoutPrefetchRegistry layoutPrefetchRegistry) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void assertNotInLayoutOrScroll(String message) {"
-        errorLine2="                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onFocusSearchFailed(View focused, int direction,"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View onFocusSearchFailed(View focused, int direction,"
-        errorLine2="                                    ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            RecyclerView.Recycler recycler, RecyclerView.State state) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            RecyclerView.Recycler recycler, RecyclerView.State state) {"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public SavedState(SavedState other) {"
-        errorLine2="                          ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                                  ~~~~~~">
         <location
@@ -1272,106 +498,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected PointF mTargetVector;"
-        errorLine2="              ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearSmoothScroller.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LinearSmoothScroller(Context context) {"
-        errorLine2="                                ~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearSmoothScroller.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onTargetFound(View targetView, RecyclerView.State state, Action action) {"
-        errorLine2="                                 ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearSmoothScroller.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onTargetFound(View targetView, RecyclerView.State state, Action action) {"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearSmoothScroller.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onTargetFound(View targetView, RecyclerView.State state, Action action) {"
-        errorLine2="                                                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearSmoothScroller.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onSeekTargetStep(int dx, int dy, RecyclerView.State state, Action action) {"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearSmoothScroller.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onSeekTargetStep(int dx, int dy, RecyclerView.State state, Action action) {"
-        errorLine2="                                                                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearSmoothScroller.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearSmoothScroller.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void updateActionForInterimTarget(Action action) {"
-        errorLine2="                                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearSmoothScroller.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int calculateDyToMakeVisible(View view, int snapPreference) {"
-        errorLine2="                                        ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearSmoothScroller.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int calculateDxToMakeVisible(View view, int snapPreference) {"
-        errorLine2="                                        ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/LinearSmoothScroller.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] calculateDistanceToFinalSnap("
         errorLine2="           ~~~~~">
         <location
@@ -1380,7 +507,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX,"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1389,7 +516,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View findSnapView(RecyclerView.LayoutManager layoutManager) {"
         errorLine2="           ~~~~">
         <location
@@ -1398,7 +525,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View findSnapView(RecyclerView.LayoutManager layoutManager) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1407,7 +534,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutManager getLayoutManager() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1416,7 +543,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract int getDecoratedStart(View view);"
         errorLine2="                                          ~~~~">
         <location
@@ -1425,7 +552,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract int getDecoratedEnd(View view);"
         errorLine2="                                        ~~~~">
         <location
@@ -1434,7 +561,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract int getTransformedEndWithDecoration(View view);"
         errorLine2="                                                        ~~~~">
         <location
@@ -1443,7 +570,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract int getTransformedStartWithDecoration(View view);"
         errorLine2="                                                          ~~~~">
         <location
@@ -1452,7 +579,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract int getDecoratedMeasurement(View view);"
         errorLine2="                                                ~~~~">
         <location
@@ -1461,7 +588,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract int getDecoratedMeasurementInOther(View view);"
         errorLine2="                                                       ~~~~">
         <location
@@ -1470,7 +597,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void offsetChild(View view, int offset);"
         errorLine2="                                     ~~~~">
         <location
@@ -1479,7 +606,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static OrientationHelper createOrientationHelper("
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
@@ -1488,7 +615,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.LayoutManager layoutManager, @RecyclerView.Orientation int orientation) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1497,7 +624,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static OrientationHelper createHorizontalHelper("
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
@@ -1506,7 +633,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.LayoutManager layoutManager) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1515,7 +642,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static OrientationHelper createVerticalHelper(RecyclerView.LayoutManager layoutManager) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~">
         <location
@@ -1524,7 +651,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static OrientationHelper createVerticalHelper(RecyclerView.LayoutManager layoutManager) {"
         errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1533,34 +660,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View findSnapView(RecyclerView.LayoutManager layoutManager) {"
-        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/PagerSnapHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX,"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/PagerSnapHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public CharSequence getAccessibilityClassName() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected Parcelable onSaveInstanceState() {"
         errorLine2="              ~~~~~~~~~~">
         <location
@@ -1569,79 +669,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRestoreInstanceState(Parcelable state) {"
-        errorLine2="                                          ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void dispatchSaveInstanceState(SparseArray&lt;Parcelable> container) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void dispatchRestoreInstanceState(SparseArray&lt;Parcelable> container) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setLayoutTransition(LayoutTransition transition) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View focusSearch(View focused, int direction) {"
-        errorLine2="           ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public View focusSearch(View focused, int direction) {"
-        errorLine2="                            ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void requestChildFocus(View child, View focused) {"
-        errorLine2="                                  ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void requestChildFocus(View child, View focused) {"
-        errorLine2="                                              ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) {"
         errorLine2="                                                 ~~~~">
         <location
@@ -1650,160 +678,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) {"
-        errorLine2="                                                             ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addFocusables(ArrayList&lt;View> views, int direction, int focusableMode) {"
-        errorLine2="                              ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {"
-        errorLine2="                                                                 ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onInterceptTouchEvent(MotionEvent e) {"
-        errorLine2="                                         ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent e) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onGenericMotionEvent(MotionEvent event) {"
-        errorLine2="                                        ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void sendAccessibilityEventUnchecked(AccessibilityEvent event) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {"
-        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void removeDetachedView(View child, boolean animate) {"
-        errorLine2="                                      ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void draw(Canvas c) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onDraw(Canvas c) {"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ViewGroup.LayoutParams generateDefaultLayoutParams() {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="                                                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewHolder getChildViewHolder(@NonNull View child) {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -1812,7 +687,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ViewHolder findViewHolderForItemId(long id) {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -1821,25 +696,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean drawChild(Canvas canvas, View child, long drawingTime) {"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean drawChild(Canvas canvas, View child, long drawingTime) {"
-        errorLine2="                                            ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void putRecycledView(ViewHolder scrap) {"
         errorLine2="                                    ~~~~~~~~~~">
         <location
@@ -1848,7 +705,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setMeasuredDimension(Rect childrenBounds, int wSpec, int hSpec) {"
         errorLine2="                                         ~~~~">
         <location
@@ -1857,7 +714,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void assertInLayoutOrScroll(String message) {"
         errorLine2="                                           ~~~~~~">
         <location
@@ -1866,43 +723,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void assertNotInLayoutOrScroll(String message) {"
-        errorLine2="                                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void collectAdjacentPrefetchPositions(int dx, int dy, State state,"
-        errorLine2="                                                                     ~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                LayoutPrefetchRegistry layoutPrefetchRegistry) {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="                LayoutPrefetchRegistry layoutPrefetchRegistry) {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void postOnAnimation(Runnable action) {"
         errorLine2="                                    ~~~~~~~~">
         <location
@@ -1911,7 +732,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean removeCallbacks(Runnable action) {"
         errorLine2="                                       ~~~~~~~~">
         <location
@@ -1920,7 +741,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onAttachedToWindow(RecyclerView view) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
@@ -1929,70 +750,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onDetachedFromWindow(RecyclerView view) {"
-        errorLine2="                                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onDetachedFromWindow(RecyclerView view, Recycler recycler) {"
-        errorLine2="                                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onDetachedFromWindow(RecyclerView view, Recycler recycler) {"
-        errorLine2="                                                            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onLayoutChildren(Recycler recycler, State state) {"
-        errorLine2="                                     ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onLayoutChildren(Recycler recycler, State state) {"
-        errorLine2="                                                        ~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onLayoutCompleted(State state) {"
-        errorLine2="                                      ~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public abstract LayoutParams generateDefaultLayoutParams();"
-        errorLine2="                        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public boolean checkLayoutParams(LayoutParams lp) {"
         errorLine2="                                         ~~~~~~~~~~~~">
         <location
@@ -2001,7 +759,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -2010,7 +768,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2019,7 +777,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams generateLayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -2028,7 +786,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams generateLayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                                 ~~~~~~~">
         <location
@@ -2037,7 +795,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams generateLayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                                            ~~~~~~~~~~~~">
         <location
@@ -2046,61 +804,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public int scrollHorizontallyBy(int dx, Recycler recycler, State state) {"
-        errorLine2="                                                ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public int scrollHorizontallyBy(int dx, Recycler recycler, State state) {"
-        errorLine2="                                                                   ~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public int scrollVerticallyBy(int dy, Recycler recycler, State state) {"
-        errorLine2="                                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public int scrollVerticallyBy(int dy, Recycler recycler, State state) {"
-        errorLine2="                                                                 ~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void smoothScrollToPosition(RecyclerView recyclerView, State state,"
-        errorLine2="                                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void smoothScrollToPosition(RecyclerView recyclerView, State state,"
-        errorLine2="                                                                      ~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void startSmoothScroll(SmoothScroller smoothScroller) {"
         errorLine2="                                      ~~~~~~~~~~~~~~">
         <location
@@ -2109,7 +813,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void endAnimation(View view) {"
         errorLine2="                                 ~~~~">
         <location
@@ -2118,7 +822,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void addDisappearingView(View child) {"
         errorLine2="                                        ~~~~">
         <location
@@ -2127,7 +831,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void addDisappearingView(View child, int index) {"
         errorLine2="                                        ~~~~">
         <location
@@ -2136,7 +840,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void addView(View child) {"
         errorLine2="                            ~~~~">
         <location
@@ -2145,7 +849,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void addView(View child, int index) {"
         errorLine2="                            ~~~~">
         <location
@@ -2154,7 +858,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void removeView(View child) {"
         errorLine2="                               ~~~~">
         <location
@@ -2163,7 +867,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void attachView(@NonNull View child, int index, LayoutParams lp) {"
         errorLine2="                                                               ~~~~~~~~~~~~">
         <location
@@ -2172,16 +876,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onRestoreInstanceState(Parcelable state) {"
-        errorLine2="                                           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public static Properties getProperties(@NonNull Context context,"
         errorLine2="                      ~~~~~~~~~~">
         <location
@@ -2190,7 +885,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            int dyUnconsumed, int[] offsetInWindow) {"
         errorLine2="                              ~~~~~">
         <location
@@ -2199,7 +894,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            int dyUnconsumed, int[] offsetInWindow, int type) {"
         errorLine2="                              ~~~~~">
         <location
@@ -2208,7 +903,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            int dyUnconsumed, int[] offsetInWindow, int type, @NonNull int[] consumed) {"
         errorLine2="                              ~~~~~">
         <location
@@ -2217,7 +912,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {"
         errorLine2="                                                           ~~~~~">
         <location
@@ -2226,7 +921,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {"
         errorLine2="                                                                           ~~~~~">
         <location
@@ -2235,7 +930,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow,"
         errorLine2="                                                           ~~~~~">
         <location
@@ -2244,7 +939,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow,"
         errorLine2="                                                                           ~~~~~">
         <location
@@ -2253,7 +948,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -2262,7 +957,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
@@ -2271,7 +966,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(MarginLayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -2280,7 +975,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2289,7 +984,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~">
         <location
@@ -2298,7 +993,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public int getChildPosition(View view) {"
         errorLine2="                                    ~~~~">
         <location
@@ -2307,7 +1002,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View findViewByPosition(int position) {"
         errorLine2="               ~~~~">
         <location
@@ -2316,7 +1011,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        protected void onChildAttachedToWindow(View child) {"
         errorLine2="                                               ~~~~">
         <location
@@ -2325,7 +1020,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                                  ~~~~~~">
         <location
@@ -2334,7 +1029,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void put(int resourceId, Object data) {"
         errorLine2="                                        ~~~~~~">
         <location
@@ -2343,151 +1038,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean performAccessibilityAction(View host, int action, Bundle args) {"
-        errorLine2="                                              ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerViewAccessibilityDelegate.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean performAccessibilityAction(View host, int action, Bundle args) {"
-        errorLine2="                                                                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerViewAccessibilityDelegate.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {"
-        errorLine2="                                                  ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerViewAccessibilityDelegate.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerViewAccessibilityDelegate.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {"
-        errorLine2="                                               ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerViewAccessibilityDelegate.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {"
-        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerViewAccessibilityDelegate.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {"
-        errorLine2="                                                      ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerViewAccessibilityDelegate.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {"
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerViewAccessibilityDelegate.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public boolean performAccessibilityAction(View host, int action, Bundle args) {"
-        errorLine2="                                                  ~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerViewAccessibilityDelegate.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public boolean performAccessibilityAction(View host, int action, Bundle args) {"
-        errorLine2="                                                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/RecyclerViewAccessibilityDelegate.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract boolean animateRemove(RecyclerView.ViewHolder holder);"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SimpleItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract boolean animateAdd(RecyclerView.ViewHolder holder);"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SimpleItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY,"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SimpleItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract boolean animateChange(RecyclerView.ViewHolder oldHolder,"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SimpleItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            RecyclerView.ViewHolder newHolder, int fromLeft, int fromTop, int toLeft, int toTop);"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SimpleItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public final void dispatchRemoveFinished(RecyclerView.ViewHolder item) {"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SimpleItemAnimator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void dispatchMoveFinished(RecyclerView.ViewHolder item) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2496,7 +1047,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void dispatchAddFinished(RecyclerView.ViewHolder item) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2505,7 +1056,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void dispatchChangeFinished(RecyclerView.ViewHolder item, boolean oldItem) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2514,7 +1065,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void dispatchRemoveStarting(RecyclerView.ViewHolder item) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2523,7 +1074,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void dispatchMoveStarting(RecyclerView.ViewHolder item) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2532,7 +1083,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void dispatchAddStarting(RecyclerView.ViewHolder item) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2541,7 +1092,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public final void dispatchChangeStarting(RecyclerView.ViewHolder item, boolean oldItem) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2550,7 +1101,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onRemoveStarting(RecyclerView.ViewHolder item) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2559,7 +1110,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onRemoveFinished(RecyclerView.ViewHolder item) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2568,7 +1119,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onAddStarting(RecyclerView.ViewHolder item) {"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2577,7 +1128,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onAddFinished(RecyclerView.ViewHolder item) {"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2586,7 +1137,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onMoveStarting(RecyclerView.ViewHolder item) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2595,7 +1146,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onMoveFinished(RecyclerView.ViewHolder item) {"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2604,7 +1155,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onChangeStarting(RecyclerView.ViewHolder item, boolean oldItem) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2613,7 +1164,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onChangeFinished(RecyclerView.ViewHolder item, boolean oldItem) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2622,79 +1173,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public int[] calculateScrollDistance(int velocityX, int velocityY) {"
-        errorLine2="           ~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SnapHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract View findSnapView(RecyclerView.LayoutManager layoutManager);"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SnapHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public abstract int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX,"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SnapHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onChanged(int position, int count, Object payload) {"
-        errorLine2="                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SortedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public BatchedCallback(Callback&lt;T2> wrappedCallback) {"
-        errorLine2="                               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SortedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onChanged(int position, int count, Object payload) {"
-        errorLine2="                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SortedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public SortedListAdapterCallback(RecyclerView.Adapter adapter) {"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SortedListAdapterCallback.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onChanged(int position, int count, Object payload) {"
-        errorLine2="                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/SortedListAdapterCallback.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public StaggeredGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                      ~~~~~~~">
         <location
@@ -2703,7 +1182,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public StaggeredGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                                       ~~~~~~~~~~~~">
         <location
@@ -2712,7 +1191,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onDetachedFromWindow(RecyclerView view, RecyclerView.Recycler recycler) {"
         errorLine2="                                     ~~~~~~~~~~~~">
         <location
@@ -2721,7 +1200,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onDetachedFromWindow(RecyclerView view, RecyclerView.Recycler recycler) {"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2730,7 +1209,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void assertNotInLayoutOrScroll(String message) {"
         errorLine2="                                          ~~~~~~">
         <location
@@ -2739,7 +1218,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setMeasuredDimension(Rect childrenBounds, int wSpec, int hSpec) {"
         errorLine2="                                     ~~~~">
         <location
@@ -2748,7 +1227,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2757,7 +1236,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
         <location
@@ -2766,7 +1245,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onLayoutCompleted(RecyclerView.State state) {"
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
         <location
@@ -2775,7 +1254,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] findFirstVisibleItemPositions(int[] into) {"
         errorLine2="           ~~~~~">
         <location
@@ -2784,7 +1263,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] findFirstVisibleItemPositions(int[] into) {"
         errorLine2="                                               ~~~~~">
         <location
@@ -2793,7 +1272,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] findFirstCompletelyVisibleItemPositions(int[] into) {"
         errorLine2="           ~~~~~">
         <location
@@ -2802,7 +1281,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] findFirstCompletelyVisibleItemPositions(int[] into) {"
         errorLine2="                                                         ~~~~~">
         <location
@@ -2811,7 +1290,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] findLastVisibleItemPositions(int[] into) {"
         errorLine2="           ~~~~~">
         <location
@@ -2820,7 +1299,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] findLastVisibleItemPositions(int[] into) {"
         errorLine2="                                              ~~~~~">
         <location
@@ -2829,7 +1308,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] findLastCompletelyVisibleItemPositions(int[] into) {"
         errorLine2="           ~~~~~">
         <location
@@ -2838,7 +1317,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] findLastCompletelyVisibleItemPositions(int[] into) {"
         errorLine2="                                                        ~~~~~">
         <location
@@ -2847,7 +1326,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int computeHorizontalScrollOffset(RecyclerView.State state) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
         <location
@@ -2856,7 +1335,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int computeVerticalScrollOffset(RecyclerView.State state) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~">
         <location
@@ -2865,7 +1344,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int computeHorizontalScrollExtent(RecyclerView.State state) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
         <location
@@ -2874,7 +1353,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int computeVerticalScrollExtent(RecyclerView.State state) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~">
         <location
@@ -2883,7 +1362,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int computeHorizontalScrollRange(RecyclerView.State state) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -2892,7 +1371,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int computeVerticalScrollRange(RecyclerView.State state) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
@@ -2901,7 +1380,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onRestoreInstanceState(Parcelable state) {"
         errorLine2="                                       ~~~~~~~~~~">
         <location
@@ -2910,7 +1389,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Parcelable onSaveInstanceState() {"
         errorLine2="           ~~~~~~~~~~">
         <location
@@ -2919,7 +1398,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
         <location
@@ -2928,7 +1407,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemsRemoved(RecyclerView recyclerView, int positionStart, int itemCount) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
@@ -2937,7 +1416,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemsAdded(RecyclerView recyclerView, int positionStart, int itemCount) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
@@ -2946,7 +1425,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemsChanged(RecyclerView recyclerView) {"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
@@ -2955,7 +1434,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemsMoved(RecyclerView recyclerView, int from, int to, int itemCount) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
@@ -2964,7 +1443,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemsUpdated(RecyclerView recyclerView, int positionStart, int itemCount,"
         errorLine2="                               ~~~~~~~~~~~~">
         <location
@@ -2973,7 +1452,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Object payload) {"
         errorLine2="            ~~~~~~">
         <location
@@ -2982,7 +1461,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler,"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2991,7 +1470,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.State state) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -3000,7 +1479,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler,"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3009,7 +1488,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.State state) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -3018,7 +1497,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PointF computeScrollVectorForPosition(int targetPosition) {"
         errorLine2="           ~~~~~~">
         <location
@@ -3027,7 +1506,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
@@ -3036,7 +1515,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,"
         errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~">
         <location
@@ -3045,7 +1524,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void collectAdjacentPrefetchPositions(int dx, int dy, RecyclerView.State state,"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
         <location
@@ -3054,7 +1533,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            LayoutPrefetchRegistry layoutPrefetchRegistry) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3063,7 +1542,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateDefaultLayoutParams() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3072,7 +1551,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateLayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3081,7 +1560,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateLayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                                          ~~~~~~~">
         <location
@@ -3090,7 +1569,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateLayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                                                     ~~~~~~~~~~~~">
         <location
@@ -3099,7 +1578,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3108,7 +1587,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public RecyclerView.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3117,7 +1596,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean checkLayoutParams(RecyclerView.LayoutParams lp) {"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3126,7 +1605,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onFocusSearchFailed(View focused, int direction, RecyclerView.Recycler recycler,"
         errorLine2="                                    ~~~~">
         <location
@@ -3135,7 +1614,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public View onFocusSearchFailed(View focused, int direction, RecyclerView.Recycler recycler,"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3144,7 +1623,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            RecyclerView.State state) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~">
         <location
@@ -3153,7 +1632,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -3162,7 +1641,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(Context c, AttributeSet attrs) {"
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
@@ -3171,7 +1650,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ViewGroup.MarginLayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3180,7 +1659,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(ViewGroup.LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3189,7 +1668,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public LayoutParams(RecyclerView.LayoutParams source) {"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3198,7 +1677,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SavedState(SavedState other) {"
         errorLine2="                          ~~~~~~~~~~">
         <location
@@ -3207,38 +1686,11 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                                  ~~~~~~">
         <location
             file="src/main/java/androidx/recyclerview/widget/StaggeredGridLayoutManager.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void addTile(int generation, TileList.Tile&lt;T> tile);"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ThreadUtil.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        void recycleTile(TileList.Tile&lt;T> tile);"
-        errorLine2="                         ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/ThreadUtil.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public Tile(Class&lt;T> klass, int size) {"
-        errorLine2="                    ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/recyclerview/widget/TileList.java"/>
-    </issue>
-
 </issues>
diff --git a/remotecallback/remotecallback/lint-baseline.xml b/remotecallback/remotecallback/lint-baseline.xml
index 1f11b4d..48c975e 100644
--- a/remotecallback/remotecallback/lint-baseline.xml
+++ b/remotecallback/remotecallback/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="WrongConstant"
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XExecutableElement.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XExecutableElement.kt
index 532cfcb..9cc75c0 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XExecutableElement.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XExecutableElement.kt
@@ -46,6 +46,7 @@
      * The list of `Throwable`s that are declared in this executable's signature.
      */
     val thrownTypes: List<XType>
+
     /**
      * Returns true if this method receives a vararg parameter.
      */
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XExecutableType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XExecutableType.kt
index f9f6a09..32a61dd 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XExecutableType.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XExecutableType.kt
@@ -24,4 +24,15 @@
 interface XExecutableType {
     /** Parameter types of the method or constructor. */
     val parameterTypes: List<XType>
+
+    /**
+     * The list of `Throwable`s that are declared in this executable's signature.
+     */
+    val thrownTypes: List<XType>
+
+    /**
+     * Returns `true` if this represents the same type as [other].
+     * TODO: decide on how we want to handle nullability here.
+     */
+    fun isSameType(other: XExecutableType): Boolean
 }
\ No newline at end of file
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacExecutableType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacExecutableType.kt
index fa43af6..727a426 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacExecutableType.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacExecutableType.kt
@@ -17,6 +17,7 @@
 package androidx.room.compiler.processing.javac
 
 import androidx.room.compiler.processing.XExecutableType
+import androidx.room.compiler.processing.XType
 import javax.lang.model.type.ExecutableType
 
 internal abstract class JavacExecutableType(
@@ -47,4 +48,13 @@
     override fun toString(): String {
         return executableType.toString()
     }
+
+    override val thrownTypes: List<XType>
+        // The thrown types are the same as on the element since those can't change
+        get() = element.thrownTypes
+
+    override fun isSameType(other: XExecutableType): Boolean {
+        return other is JavacExecutableType &&
+            env.typeUtils.isSameType(executableType, other.executableType)
+    }
 }
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspExecutableType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspExecutableType.kt
index 93e8ce0..285993a 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspExecutableType.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspExecutableType.kt
@@ -16,14 +16,14 @@
 
 package androidx.room.compiler.processing.ksp
 
-import androidx.room.compiler.processing.XConstructorType
+import androidx.room.compiler.processing.XExecutableType
 import androidx.room.compiler.processing.XType
 
 internal abstract class KspExecutableType(
     val env: KspProcessingEnv,
     open val origin: KspExecutableElement,
     val containing: KspType?
-) : XConstructorType {
+) : XExecutableType {
     override val parameterTypes: List<XType> by lazy {
         if (containing == null) {
             origin.parameters.map {
@@ -35,4 +35,12 @@
             }
         }
     }
+
+    override val thrownTypes: List<XType>
+        // The thrown types are the same as on the origin since those can't change
+        get() = origin.thrownTypes
+
+    override fun isSameType(other: XExecutableType): Boolean {
+        return env.isSameType(this, other)
+    }
 }
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
index 48a0127..d58625a 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
@@ -16,8 +16,11 @@
 
 package androidx.room.compiler.processing.ksp
 
+import androidx.room.compiler.processing.XConstructorType
+import androidx.room.compiler.processing.XExecutableType
 import androidx.room.compiler.processing.XFiler
 import androidx.room.compiler.processing.XMessager
+import androidx.room.compiler.processing.XMethodType
 import androidx.room.compiler.processing.XProcessingEnv
 import androidx.room.compiler.processing.XProcessingEnvConfig
 import androidx.room.compiler.processing.XType
@@ -291,6 +294,28 @@
         typeElementStore.clear()
     }
 
+    internal fun isSameType(type1: XExecutableType, type2: XExecutableType): Boolean {
+        if (type1 == type2) {
+            return true
+        }
+        if (type1.parameterTypes.size != type2.parameterTypes.size) {
+            return false
+        }
+        type1.parameterTypes.indices.forEach { i ->
+            if (!type1.parameterTypes[i].isSameType(type2.parameterTypes[i])) {
+                return false
+            }
+        }
+        fun returnType(type: XExecutableType): XType {
+            return when (type) {
+                is XMethodType -> type.returnType
+                is XConstructorType -> voidType
+                else -> error("Unexpected XExecutableType: $type")
+            }
+        }
+        return returnType(type1).isSameType(returnType(type2))
+    }
+
     class CommonTypes(resolver: Resolver) {
         val nullableInt by lazy {
             resolver.builtIns.intType.makeNullable()
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
index 7366726..71c4d02 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeElement.kt
@@ -311,10 +311,6 @@
             .toList()
     }
 
-    override fun toString(): String {
-        return declaration.toString()
-    }
-
     private class DefaultKspTypeElement(
         env: KspProcessingEnv,
         declaration: KSClassDeclaration
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodElement.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodElement.kt
index af58c59..fe9e1cd 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodElement.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodElement.kt
@@ -94,6 +94,7 @@
 
     final override val executableType: XMethodType by lazy {
         KspSyntheticPropertyMethodType.create(
+            env = env,
             element = this,
             container = field.enclosingElement.type
         )
@@ -118,6 +119,7 @@
 
     final override fun asMemberOf(other: XType): XMethodType {
         return KspSyntheticPropertyMethodType.create(
+            env = env,
             element = this,
             container = other
         )
@@ -131,6 +133,10 @@
         return XEquality.hashCode(equalityItems)
     }
 
+    override fun toString(): String {
+        return jvmName
+    }
+
     final override fun overrides(other: XMethodElement, owner: XTypeElement): Boolean {
         return env.resolver.overrides(this, other)
     }
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodType.kt
index e45e505..e2221aa 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodType.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodType.kt
@@ -16,8 +16,10 @@
 
 package androidx.room.compiler.processing.ksp.synthetic
 
+import androidx.room.compiler.processing.XExecutableType
 import androidx.room.compiler.processing.XMethodType
 import androidx.room.compiler.processing.XType
+import androidx.room.compiler.processing.ksp.KspProcessingEnv
 import com.google.devtools.ksp.symbol.KSPropertyGetter
 import com.google.devtools.ksp.symbol.KSPropertySetter
 import com.squareup.javapoet.TypeVariableName
@@ -26,6 +28,7 @@
  * @see KspSyntheticPropertyMethodElement
  */
 internal sealed class KspSyntheticPropertyMethodType(
+    val env: KspProcessingEnv,
     val origin: KspSyntheticPropertyMethodElement,
     val containing: XType?
 ) : XMethodType {
@@ -45,19 +48,30 @@
     override val typeVariableNames: List<TypeVariableName>
         get() = emptyList()
 
+    override val thrownTypes: List<XType>
+        // The thrown types are the same as on the origin since those can't change
+        get() = origin.thrownTypes
+
+    override fun isSameType(other: XExecutableType): Boolean {
+        return env.isSameType(this, other)
+    }
+
     companion object {
         fun create(
+            env: KspProcessingEnv,
             element: KspSyntheticPropertyMethodElement,
             container: XType?
         ): XMethodType {
             return when (element.accessor) {
                 is KSPropertyGetter ->
                     Getter(
+                        env = env,
                         origin = element,
                         containingType = container
                     )
                 is KSPropertySetter ->
                     Setter(
+                        env = env,
                         origin = element,
                         containingType = container
                     )
@@ -67,9 +81,11 @@
     }
 
     private class Getter(
+        env: KspProcessingEnv,
         origin: KspSyntheticPropertyMethodElement,
         containingType: XType?
     ) : KspSyntheticPropertyMethodType(
+        env = env,
         origin = origin,
         containing = containingType
     ) {
@@ -83,9 +99,11 @@
     }
 
     private class Setter(
+        env: KspProcessingEnv,
         origin: KspSyntheticPropertyMethodElement,
         containingType: XType?
     ) : KspSyntheticPropertyMethodType(
+        env = env,
         origin = origin,
         containing = containingType
     ) {
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt
index 324eeb6..4bdc27b 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt
@@ -142,6 +142,280 @@
     }
 
     @Test
+    fun isSameMethodTypeTest() {
+        val src = Source.kotlin(
+            "MyInterface.kt",
+            """
+            interface MyInterface {
+              fun method(foo: Foo): Bar
+              fun methodWithDifferentName(foo: Foo): Bar
+              @kotlin.jvm.Throws(RuntimeException::class)
+              fun methodWithDifferentThrows(foo: Foo): Bar
+              fun methodWithDifferentReturn(foo: Foo): Unit
+              fun methodWithDifferentParameters(): Bar
+              fun methodWithDefault(foo: Foo): Bar = TODO()
+            }
+            class MyClass {
+              fun classMethod(foo: Foo): Bar = TODO()
+              companion object {
+                fun companionMethod(foo: Foo): Bar = TODO()
+              }
+            }
+            object MyObject {
+              fun objectMethod(foo: Foo): Bar = TODO()
+              @JvmStatic fun staticMethod(foo: Foo): Bar = TODO()
+            }
+            class Foo
+            class Bar
+            """.trimIndent()
+        )
+        runProcessorTest(
+            sources = listOf(src)
+        ) { invocation ->
+            val myInterface = invocation.processingEnv.requireTypeElement("MyInterface")
+            val method = myInterface.getMethodByJvmName("method")
+            val methodWithDifferentName =
+                myInterface.getMethodByJvmName("methodWithDifferentName")
+            val methodWithDifferentThrows =
+                myInterface.getMethodByJvmName("methodWithDifferentThrows")
+            val methodWithDifferentReturn =
+                myInterface.getMethodByJvmName("methodWithDifferentReturn")
+            val methodWithDifferentParameters =
+                myInterface.getMethodByJvmName("methodWithDifferentParameters")
+            val methodWithDefault = myInterface.getMethodByJvmName("methodWithDefault")
+            val myObject = invocation.processingEnv.requireTypeElement("MyObject")
+            val objectMethod = myObject.getMethodByJvmName("objectMethod")
+            val staticMethod = myObject.getMethodByJvmName("staticMethod")
+            val myClass = invocation.processingEnv.requireTypeElement("MyClass")
+            val classMethod = myClass.getMethodByJvmName("classMethod")
+            val companionObject = myClass.getEnclosedElements()
+                .mapNotNull { it as? XTypeElement }
+                .filter { it.isCompanionObject() }
+                .single()
+            val companionMethod = companionObject.getMethodByJvmName("companionMethod")
+
+            assertIsSameType(method, methodWithDifferentName)
+            assertIsSameType(method, methodWithDifferentThrows)
+            assertIsSameType(method, methodWithDefault)
+            assertIsSameType(method, objectMethod)
+            assertIsSameType(method, staticMethod)
+            assertIsSameType(method, objectMethod)
+            assertIsSameType(method, classMethod)
+            assertIsSameType(method, companionMethod)
+
+            // Assert that different return type or parameters result in different method types.
+            assertIsNotSameType(method, methodWithDifferentReturn)
+            assertIsNotSameType(method, methodWithDifferentParameters)
+        }
+    }
+
+    @Test
+    fun isSameGenericMethodTypeTest() {
+        val src = Source.kotlin(
+            "MyInterface.kt",
+            """
+            interface FooBar : MyInterface<Foo, Bar>
+            interface BarFoo : MyInterface<Bar, Foo>
+            interface MyInterface<T1, T2> {
+              fun methodFooBar(foo: Foo): Bar
+              fun methodBarFoo(bar: Bar): Foo
+              fun method(t1: T1): T2
+            }
+            class Foo
+            class Bar
+            """.trimIndent()
+        )
+        runProcessorTest(
+            sources = listOf(src)
+        ) { invocation ->
+            val myInterface = invocation.processingEnv.requireTypeElement("MyInterface")
+            val fooBar = invocation.processingEnv.requireTypeElement("FooBar")
+            val barFoo = invocation.processingEnv.requireTypeElement("BarFoo")
+            val myInterfaceMethod = myInterface.getMethodByJvmName("method")
+            val myInterfaceMethodFooBar = myInterface.getMethodByJvmName("methodFooBar")
+            val myInterfaceMethodBarFoo = myInterface.getMethodByJvmName("methodBarFoo")
+
+            assertIsNotSameType(myInterfaceMethodFooBar, myInterfaceMethod)
+            assertIsSameType(
+                myInterfaceMethodFooBar.executableType,
+                myInterfaceMethod.asMemberOf(fooBar.type)
+            )
+            assertIsNotSameType(myInterfaceMethodBarFoo, myInterfaceMethod)
+            assertIsSameType(
+                myInterfaceMethodBarFoo.executableType,
+                myInterfaceMethod.asMemberOf(barFoo.type)
+            )
+        }
+    }
+
+    @Test
+    fun isSameConstructorTypeTest() {
+        val src = Source.kotlin(
+            "MyInterface.kt",
+            """
+            abstract class ClassFoo constructor(foo: Foo)
+            abstract class ClassBar constructor(bar: Bar)
+            abstract class OtherClassFoo constructor(foo: Foo)
+            abstract class SubClassBar constructor(bar: Bar) : ClassBar(bar)
+            class Foo
+            class Bar
+            """.trimIndent()
+        )
+        runProcessorTest(
+            sources = listOf(src)
+        ) { invocation ->
+            val classFoo = invocation.processingEnv.requireTypeElement("ClassFoo")
+            val classBar = invocation.processingEnv.requireTypeElement("ClassBar")
+            val otherClassFoo = invocation.processingEnv.requireTypeElement("OtherClassFoo")
+            val subClassBar = invocation.processingEnv.requireTypeElement("SubClassBar")
+
+            assertThat(classFoo.getConstructors()).hasSize(1)
+            assertThat(classBar.getConstructors()).hasSize(1)
+            assertThat(otherClassFoo.getConstructors()).hasSize(1)
+            assertThat(subClassBar.getConstructors()).hasSize(1)
+            assertIsSameType(
+                classFoo.getConstructors().single(),
+                otherClassFoo.getConstructors().single()
+            )
+            assertIsSameType(
+                classBar.getConstructors().single(),
+                subClassBar.getConstructors().single()
+            )
+            assertIsNotSameType(
+                classFoo.getConstructors().single(),
+                classBar.getConstructors().single()
+            )
+        }
+    }
+
+    @Test
+    fun isSameConstructorTypeAndMethodTypeTest() {
+        val src = Source.kotlin(
+            "ClassFoo.kt",
+            """
+            abstract class ClassFoo constructor(foo: Foo) {
+              abstract fun method(otherFoo: Foo)
+            }
+            class Foo
+            """.trimIndent()
+        )
+        runProcessorTest(
+            sources = listOf(src)
+        ) { invocation ->
+            val classFoo = invocation.processingEnv.requireTypeElement("ClassFoo")
+
+            assertThat(classFoo.getConstructors()).hasSize(1)
+            // Interestingly, isSameType doesn't care if the type is a constructor or method as long
+            // as the parameter types and return type are the same (Note: constructors have return
+            // types of "void" in Javac).
+            assertIsSameType(
+                classFoo.getConstructors().single(),
+                classFoo.getMethodByJvmName("method")
+            )
+        }
+    }
+
+    @Test
+    fun isSameGenericConstructorTypeTest() {
+        val src = Source.kotlin(
+            "MyInterface.kt",
+            """
+            abstract class GenericClass<T> constructor(t: T)
+            abstract class GenericClassFoo constructor(foo: Foo) : GenericClass<Foo>(foo)
+            abstract class ClassFoo constructor(foo: Foo)
+            class Foo
+            """.trimIndent()
+        )
+        runProcessorTest(
+            sources = listOf(src)
+        ) { invocation ->
+            val genericClass = invocation.processingEnv.requireTypeElement("GenericClass")
+            val genericClassFoo = invocation.processingEnv.requireTypeElement("GenericClassFoo")
+            val classFoo = invocation.processingEnv.requireTypeElement("ClassFoo")
+
+            assertThat(genericClass.getConstructors()).hasSize(1)
+            assertThat(genericClassFoo.getConstructors()).hasSize(1)
+            assertThat(classFoo.getConstructors()).hasSize(1)
+            assertIsNotSameType(
+                genericClass.getConstructors().single(),
+                genericClassFoo.getConstructors().single()
+            )
+            assertIsNotSameType(
+                genericClass.getConstructors().single(),
+                classFoo.getConstructors().single()
+            )
+            assertIsSameType(
+                genericClassFoo.getConstructors().single(),
+                classFoo.getConstructors().single()
+            )
+        }
+    }
+
+    @Test
+    fun isSamePropertyMethodTypeTest() {
+        val src = Source.kotlin(
+            "MyInterface.kt",
+            """
+            class MyClass {
+                var fooField: Foo = TODO()
+                var fooFieldWithDifferentName: Foo = TODO()
+                val fooFieldWithVal: Foo = TODO()
+                var barField: Bar = TODO()
+
+                fun fooMethodGetter(): Foo = TODO()
+                fun fooMethodSetter(foo: Foo) {}
+            }
+            class Foo
+            class Bar
+            """.trimIndent()
+        )
+        runProcessorTest(
+            sources = listOf(src)
+        ) { invocation ->
+            val myClass = invocation.processingEnv.requireTypeElement("MyClass")
+            val fooFieldGetter = myClass.getMethodByJvmName("getFooField")
+            val fooFieldSetter = myClass.getMethodByJvmName("setFooField")
+            val fooFieldWithDifferentNameGetter =
+                myClass.getMethodByJvmName("getFooFieldWithDifferentName")
+            val fooFieldWithDifferentNameSetter =
+                myClass.getMethodByJvmName("setFooFieldWithDifferentName")
+            val fooFieldWithValGetter = myClass.getMethodByJvmName("getFooFieldWithVal")
+            val barFieldGetter = myClass.getMethodByJvmName("getBarField")
+            val barFieldSetter = myClass.getMethodByJvmName("setBarField")
+            val fooMethodGetter = myClass.getMethodByJvmName("fooMethodGetter")
+            val fooMethodSetter = myClass.getMethodByJvmName("fooMethodSetter")
+
+            assertIsSameType(fooFieldGetter, fooFieldWithDifferentNameGetter)
+            assertIsSameType(fooFieldGetter, fooFieldWithValGetter)
+            assertIsSameType(fooMethodGetter, fooFieldGetter)
+            assertIsSameType(fooFieldSetter, fooFieldWithDifferentNameSetter)
+            assertIsSameType(fooFieldSetter, fooMethodSetter)
+            assertIsNotSameType(fooFieldGetter, barFieldGetter)
+            assertIsNotSameType(fooFieldSetter, barFieldSetter)
+        }
+    }
+
+    private fun assertIsSameType(element1: XExecutableElement, element2: XExecutableElement) {
+        assertIsSameType(element1.executableType, element2.executableType)
+    }
+
+    private fun assertIsSameType(type1: XExecutableType, type2: XExecutableType) {
+        // Assert both directions to ensure isSameType is symmetric
+        assertThat(type1.isSameType(type2)).isTrue()
+        assertThat(type2.isSameType(type1)).isTrue()
+    }
+
+    private fun assertIsNotSameType(element1: XExecutableElement, element2: XExecutableElement) {
+        assertIsNotSameType(element1.executableType, element2.executableType)
+    }
+
+    private fun assertIsNotSameType(type1: XExecutableType, type2: XExecutableType) {
+        // Assert both directions to ensure isSameType is symmetric
+        assertThat(type1.isSameType(type2)).isFalse()
+        assertThat(type2.isSameType(type1)).isFalse()
+    }
+
+    @Test
     fun kotlinPropertyInheritance() {
         val src = Source.kotlin(
             "Foo.kt",
diff --git a/room/room-guava/lint-baseline.xml b/room/room-guava/lint-baseline.xml
index a83acbe..a342987 100644
--- a/room/room-guava/lint-baseline.xml
+++ b/room/room-guava/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="LambdaLast"
diff --git a/room/room-runtime/lint-baseline.xml b/room/room-runtime/lint-baseline.xml
index abbcbf7..3868fd8 100644
--- a/room/room-runtime/lint-baseline.xml
+++ b/room/room-runtime/lint-baseline.xml
@@ -1,14 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="KotlinNullnessAnnotation"
-        message="Do not use `@NonNull` in Kotlin; the nullability is determined by the Kotlin type `CancellationSignal?` ending with `?` which declares it nullable, contradicting the annotation"
-        errorLine1="        @NonNull cancellationSignal: CancellationSignal?"
-        errorLine2="        ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/room/QueryInterceptorDatabase.kt"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
@@ -328,7 +319,7 @@
     <issue
         id="NewApi"
         message="Call requires API level 21 (current min is 14): `java.util.Locale#forLanguageTag`"
-        errorLine1="        Locale.setDefault(Locale.forLanguageTag(&quot;tr-TR&quot;));"
+        errorLine1="        Locale.setDefault(Locale.forLanguageTag(&quot;tr-TR&quot;))"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
             file="src/test/java/androidx/room/InvalidationTrackerTest.kt"/>
diff --git a/room/room-rxjava2/lint-baseline.xml b/room/room-rxjava2/lint-baseline.xml
index beacd64..bf4c0c5 100644
--- a/room/room-rxjava2/lint-baseline.xml
+++ b/room/room-rxjava2/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="PrivateConstructorForUtilityClass"
diff --git a/room/room-testing/lint-baseline.xml b/room/room-testing/lint-baseline.xml
index 57b3def..a3e2f3d 100644
--- a/room/room-testing/lint-baseline.xml
+++ b/room/room-testing/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
diff --git a/samples/Support4Demos/lint-baseline.xml b/samples/Support4Demos/lint-baseline.xml
index ecf6f71..f3bf82c 100644
--- a/samples/Support4Demos/lint-baseline.xml
+++ b/samples/Support4Demos/lint-baseline.xml
@@ -1,5 +1,32 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+
+    <issue
+        id="MissingPermission"
+        message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`"
+        errorLine1="                    mNotificationManager.notify(NOTIFICATION_ID, notification);"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
+    </issue>
+
+    <issue
+        id="MissingPermission"
+        message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`"
+        errorLine1="                mNotificationManager.notify(NOTIFICATION_ID, notification);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
+    </issue>
+
+    <issue
+        id="MissingPermission"
+        message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`"
+        errorLine1="                    mNotificationManager.notify(NOTIFICATION_ID, builder.build());"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
+    </issue>
 
     <issue
         id="WifiManagerLeak"
@@ -135,1968 +162,6 @@
     </issue>
 
     <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCache` of class `AlbumArtCache` requires synthetic accessor"
-        errorLine1="                    mCache.put(artUrl, bitmaps);"
-        errorLine2="                    ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/AlbumArtCache.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCache` of class `AlbumArtCache` requires synthetic accessor"
-        errorLine1="                Log.d(TAG, &quot;doInBackground: putting bitmap in cache. cache size=&quot; + mCache.size());"
-        errorLine2="                                                                                    ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/AlbumArtCache.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="            if (itemIndex >= mMediaItems.size()) {"
-        errorLine2="                             ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                mMediaItems.addAll(children);"
-        errorLine2="                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                    if (itemIndex &lt; mMediaItems.size()) {"
-        errorLine2="                                    ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                        mMediaItems.set(itemIndex, item);"
-        errorLine2="                        ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                        mMediaItems.add(item);"
-        errorLine2="                        ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                    while (mMediaItems.size() > itemIndex) {"
-        errorLine2="                           ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                        mMediaItems.remove(mMediaItems.size() - 1);"
-        errorLine2="                        ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                        mMediaItems.remove(mMediaItems.size() - 1);"
-        errorLine2="                                           ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBrowserAdapter` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="            mBrowserAdapter.notifyDataSetChanged();"
-        errorLine2="            ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCanLoadNewPage` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="            mCanLoadNewPage = true;"
-        errorLine2="            ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="            mMediaItems.clear();"
-        errorLine2="            ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="            mMediaItems.addAll(children);"
-        errorLine2="            ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBrowserAdapter` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="            mBrowserAdapter.notifyDataSetChanged();"
-        errorLine2="            ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaBrowser` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="            Log.d(TAG, &quot;onConnected: session token &quot; + mMediaBrowser.getSessionToken());"
-        errorLine2="                                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaBrowser` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="            if (mMediaBrowser.getSessionToken() == null) {"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaBrowser` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                    mMediaBrowser.getSessionToken());"
-        errorLine2="                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaId` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="            if (mMediaId == null) {"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaBrowser` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                mMediaId = mMediaBrowser.getRoot();"
-        errorLine2="                           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaId` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                mMediaId = mMediaBrowser.getRoot();"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="            if (mMediaItems.size() == 0) {"
-        errorLine2="                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `loadPage` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                loadPage(0);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBrowserAdapter` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                MediaBrowserCompat.MediaItem item = mBrowserAdapter.getItem(position);"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCanLoadNewPage` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                if (mCanLoadNewPage &amp;&amp; firstVisibleItem + visibleItemCount == totalItemCount) {"
-        errorLine2="                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCanLoadNewPage` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                    mCanLoadNewPage = false;"
-        errorLine2="                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaItems` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                    loadPage((mMediaItems.size() + PAGE_SIZE - 1) / PAGE_SIZE);"
-        errorLine2="                              ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `loadPage` of class `BrowseFragment` requires synthetic accessor"
-        errorLine1="                    loadPage((mMediaItems.size() + PAGE_SIZE - 1) / PAGE_SIZE);"
-        errorLine2="                    ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/BrowseFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `onCommitContent` of class `CommitContentSupport` requires synthetic accessor"
-        errorLine1="                                CommitContentSupport.this.onCommitContent("
-        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/view/inputmethod/CommitContentSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `clearTint` of class `DrawableCompatActivity` requires synthetic accessor"
-        errorLine1="                        clearTint();"
-        errorLine2="                        ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/graphics/DrawableCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `setColorTint` of class `DrawableCompatActivity` requires synthetic accessor"
-        errorLine1="                        setColorTint();"
-        errorLine2="                        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/graphics/DrawableCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `setColorStateListTint` of class `DrawableCompatActivity` requires synthetic accessor"
-        errorLine1="                        setColorStateListTint();"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/graphics/DrawableCompatActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mId` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            item.mId = mItems.size();"
-        errorLine2="                 ~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBounds` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            item.mBounds = new RectF(left, top, right, bottom);"
-        errorLine2="                 ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDescription` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            item.mDescription = description;"
-        errorLine2="                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mChecked` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            item.mChecked = false;"
-        errorLine2="                 ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mParent` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            item.mParent = parent;"
-        errorLine2="                 ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mChildren` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            parent.mChildren.add(item.mId);"
-        errorLine2="                   ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mId` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            parent.mChildren.add(item.mId);"
-        errorLine2="                                      ~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBoundsInRoot` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            item.mBoundsInRoot = new RectF(item.mBounds);"
-        errorLine2="                 ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBounds` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            item.mBoundsInRoot = new RectF(item.mBounds);"
-        errorLine2="                                                ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mParent` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            CustomItem parent = item.mParent;"
-        errorLine2="                                     ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBoundsInRoot` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                RectF bounds = item.mBoundsInRoot;"
-        errorLine2="                                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBoundsInRoot` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                item.mBoundsInRoot.set(parent.mBounds.left + bounds.left * parent.mBounds.width(),"
-        errorLine2="                     ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBounds` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                item.mBoundsInRoot.set(parent.mBounds.left + bounds.left * parent.mBounds.width(),"
-        errorLine2="                                              ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBounds` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                item.mBoundsInRoot.set(parent.mBounds.left + bounds.left * parent.mBounds.width(),"
-        errorLine2="                                                                                  ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBounds` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                        parent.mBounds.top + bounds.top * parent.mBounds.height(),"
-        errorLine2="                               ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBounds` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                        parent.mBounds.top + bounds.top * parent.mBounds.height(),"
-        errorLine2="                                                                 ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBounds` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                        parent.mBounds.left + bounds.right * parent.mBounds.width(),"
-        errorLine2="                               ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBounds` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                        parent.mBounds.left + bounds.right * parent.mBounds.width(),"
-        errorLine2="                                                                    ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBounds` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                        parent.mBounds.top + bounds.bottom * parent.mBounds.height());"
-        errorLine2="                               ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBounds` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                        parent.mBounds.top + bounds.bottom * parent.mBounds.height());"
-        errorLine2="                                                                    ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mParent` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                parent = parent.mParent;"
-        errorLine2="                                ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mParent` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                if (item.mParent == null) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mChecked` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                    paint.setColor(item.mChecked ? Color.RED : Color.BLUE);"
-        errorLine2="                                        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mChecked` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                    paint.setColor(item.mChecked ? Color.MAGENTA : Color.GREEN);"
-        errorLine2="                                        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBoundsInRoot` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                scaleRectF(item.mBoundsInRoot, bounds, width, height);"
-        errorLine2="                                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDescription` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                canvas.drawText(item.mDescription, bounds.centerX(), bounds.centerY(), paint);"
-        errorLine2="                                     ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mChecked` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            item.mChecked = !item.mChecked;"
-        errorLine2="                 ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mChecked` of class `CustomItem` requires synthetic accessor"
-        errorLine1="            item.mChecked = !item.mChecked;"
-        errorLine2="                                  ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBoundsInRoot` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                if (item.mBoundsInRoot.contains(scaledX, scaledY)) {"
-        errorLine2="                         ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mItems` of class `CustomView` requires synthetic accessor"
-        errorLine1="                final int n = mItems.size();"
-        errorLine2="                              ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mItems` of class `CustomView` requires synthetic accessor"
-        errorLine1="                    if (mItems.get(i).mParent == null) {"
-        errorLine2="                        ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mParent` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                    if (mItems.get(i).mParent == null) {"
-        errorLine2="                                      ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDescription` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                event.getText().add(item.mDescription);"
-        errorLine2="                                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDescription` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                node.setText(item.mDescription);"
-        errorLine2="                                  ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mParent` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                if (item.mParent != null) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBoundsInRoot` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                    width = (int) (width * item.mParent.mBoundsInRoot.width());"
-        errorLine2="                                                        ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mParent` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                    width = (int) (width * item.mParent.mBoundsInRoot.width());"
-        errorLine2="                                                ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBoundsInRoot` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                    height = (int) (height * item.mParent.mBoundsInRoot.height());"
-        errorLine2="                                                          ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mParent` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                    height = (int) (height * item.mParent.mBoundsInRoot.height());"
-        errorLine2="                                                  ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBounds` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                scaleRectF(item.mBounds, bounds, width, height);"
-        errorLine2="                                ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mChecked` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                node.setChecked(item.mChecked);"
-        errorLine2="                                     ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mParent` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                if (item.mParent != null) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mId` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                    node.setParent(CustomView.this, item.mParent.mId);"
-        errorLine2="                                                                 ~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mParent` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                    node.setParent(CustomView.this, item.mParent.mId);"
-        errorLine2="                                                         ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mChildren` of class `CustomItem` requires synthetic accessor"
-        errorLine1="                for (Integer id : item.mChildren) {"
-        errorLine2="                                       ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/widget/ExploreByTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mResults` of class `ReceiveResultFragment` requires synthetic accessor"
-        errorLine1="                    Editable text = (Editable)mResults.getText();"
-        errorLine2="                                              ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/app/FragmentReceiveResultSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `clss` of class `TabInfo` requires synthetic accessor"
-        errorLine1="                    info.clss.getName());"
-        errorLine2="                         ~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/app/FragmentTabsPager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `args` of class `TabInfo` requires synthetic accessor"
-        errorLine1="            fragment.setArguments(info.args);"
-        errorLine2="                                       ~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/app/FragmentTabsPager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` constructor of class `DelayedStopHandler` requires synthetic accessor"
-        errorLine1="    private DelayedStopHandler mDelayedStopHandler = new DelayedStopHandler(this);"
-        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` member of class `MediaSessionCallback` requires synthetic accessor"
-        errorLine1="        mSession.setCallback(new MediaSessionCallback());"
-        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `loadChildrenImpl` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                        loadChildrenImpl(parentMediaId, result, options);"
-        errorLine2="                        ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `updatePlaybackState` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                        updatePlaybackState(getString(R.string.error_no_metadata));"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue == null || mPlayingQueue.isEmpty()) {"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue == null || mPlayingQueue.isEmpty()) {"
-        errorLine2="                                         ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMusicProvider` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mPlayingQueue = QueueHelper.getRandomQueue(mMusicProvider);"
-        errorLine2="                                                           ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mPlayingQueue = QueueHelper.getRandomQueue(mMusicProvider);"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mSession.setQueue(mPlayingQueue);"
-        errorLine2="                                  ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSession` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mSession.setQueue(mPlayingQueue);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSession` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mSession.setQueueTitle(getString(R.string.random_queue_title));"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mCurrentIndexOnQueue = 0;"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; !mPlayingQueue.isEmpty()) {"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; !mPlayingQueue.isEmpty()) {"
-        errorLine2="                                          ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handlePlayRequest` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                handlePlayRequest();"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; !mPlayingQueue.isEmpty()) {"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; !mPlayingQueue.isEmpty()) {"
-        errorLine2="                                          ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mCurrentIndexOnQueue = QueueHelper.getMusicIndexOnQueue(mPlayingQueue, queueId);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mCurrentIndexOnQueue = QueueHelper.getMusicIndexOnQueue(mPlayingQueue, queueId);"
-        errorLine2="                                                                        ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handlePlayRequest` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                handlePlayRequest();"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayback` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            mPlayback.seekTo((int) position);"
-        errorLine2="            ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMusicProvider` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            mPlayingQueue = QueueHelper.getPlayingQueue(mediaId, mMusicProvider);"
-        errorLine2="                                                                 ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            mPlayingQueue = QueueHelper.getPlayingQueue(mediaId, mMusicProvider);"
-        errorLine2="            ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            mSession.setQueue(mPlayingQueue);"
-        errorLine2="                              ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSession` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            mSession.setQueue(mPlayingQueue);"
-        errorLine2="            ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSession` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            mSession.setQueueTitle(queueTitle);"
-        errorLine2="            ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; !mPlayingQueue.isEmpty()) {"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; !mPlayingQueue.isEmpty()) {"
-        errorLine2="                                          ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mCurrentIndexOnQueue = QueueHelper.getMusicIndexOnQueue(mPlayingQueue, mediaId);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mCurrentIndexOnQueue = QueueHelper.getMusicIndexOnQueue(mPlayingQueue, mediaId);"
-        errorLine2="                                                                        ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                if (mCurrentIndexOnQueue &lt; 0) {"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handlePlayRequest` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                    handlePlayRequest();"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayback` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            Log.d(TAG, &quot;pause. current state=&quot; + mPlayback.getState());"
-        errorLine2="                                                 ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handlePauseRequest` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            handlePauseRequest();"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayback` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            Log.d(TAG, &quot;stop. current state=&quot; + mPlayback.getState());"
-        errorLine2="                                                ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handleStopRequest` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            handleStopRequest(null);"
-        errorLine2="            ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            mCurrentIndexOnQueue++;"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; mCurrentIndexOnQueue >= mPlayingQueue.size()) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; mCurrentIndexOnQueue >= mPlayingQueue.size()) {"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; mCurrentIndexOnQueue >= mPlayingQueue.size()) {"
-        errorLine2="                                                                 ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mCurrentIndexOnQueue = 0;"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (QueueHelper.isIndexPlayable(mCurrentIndexOnQueue, mPlayingQueue)) {"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (QueueHelper.isIndexPlayable(mCurrentIndexOnQueue, mPlayingQueue)) {"
-        errorLine2="                                                                  ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handlePlayRequest` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                handlePlayRequest();"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                        mCurrentIndexOnQueue + &quot; queue length=&quot; +"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                        (mPlayingQueue == null ? &quot;null&quot; : mPlayingQueue.size()));"
-        errorLine2="                         ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                        (mPlayingQueue == null ? &quot;null&quot; : mPlayingQueue.size()));"
-        errorLine2="                                                          ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handleStopRequest` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                handleStopRequest(&quot;Cannot skip&quot;);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            mCurrentIndexOnQueue--;"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; mCurrentIndexOnQueue &lt; 0) {"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; mCurrentIndexOnQueue &lt; 0) {"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mCurrentIndexOnQueue = 0;"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (QueueHelper.isIndexPlayable(mCurrentIndexOnQueue, mPlayingQueue)) {"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (QueueHelper.isIndexPlayable(mCurrentIndexOnQueue, mPlayingQueue)) {"
-        errorLine2="                                                                  ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handlePlayRequest` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                handlePlayRequest();"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                        mCurrentIndexOnQueue + &quot; queue length=&quot; +"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                        (mPlayingQueue == null ? &quot;null&quot; : mPlayingQueue.size()));"
-        errorLine2="                         ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                        (mPlayingQueue == null ? &quot;null&quot; : mPlayingQueue.size()));"
-        errorLine2="                                                          ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handleStopRequest` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                handleStopRequest(&quot;Cannot skip&quot;);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `getCurrentPlayingMusic` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                MediaMetadataCompat track = getCurrentPlayingMusic();"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMusicProvider` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                    mMusicProvider.setFavorite(musicId, !mMusicProvider.isFavorite(musicId));"
-        errorLine2="                    ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMusicProvider` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                    mMusicProvider.setFavorite(musicId, !mMusicProvider.isFavorite(musicId));"
-        errorLine2="                                                         ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `updatePlaybackState` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                updatePlaybackState(null);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMusicProvider` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mPlayingQueue = QueueHelper.getRandomQueue(mMusicProvider);"
-        errorLine2="                                                           ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mPlayingQueue = QueueHelper.getRandomQueue(mMusicProvider);"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMusicProvider` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mPlayingQueue = QueueHelper.getPlayingQueueFromSearch(query, mMusicProvider);"
-        errorLine2="                                                                             ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mPlayingQueue = QueueHelper.getPlayingQueueFromSearch(query, mMusicProvider);"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            Log.d(TAG, &quot;playFromSearch  playqueue.length=&quot; + mPlayingQueue.size());"
-        errorLine2="                                                             ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            mSession.setQueue(mPlayingQueue);"
-        errorLine2="                              ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSession` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            mSession.setQueue(mPlayingQueue);"
-        errorLine2="            ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; !mPlayingQueue.isEmpty()) {"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (mPlayingQueue != null &amp;&amp; !mPlayingQueue.isEmpty()) {"
-        errorLine2="                                          ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                mCurrentIndexOnQueue = 0;"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handlePlayRequest` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                handlePlayRequest();"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handleStopRequest` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                handleStopRequest(getString(R.string.no_search_results));"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentIndexOnQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                    MediaSessionCompat.QueueItem queueItem = mPlayingQueue.get(mCurrentIndexOnQueue);"
-        errorLine2="                                                                               ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayingQueue` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                    MediaSessionCompat.QueueItem queueItem = mPlayingQueue.get(mCurrentIndexOnQueue);"
-        errorLine2="                                                             ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMusicProvider` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                    MediaMetadataCompat track = mMusicProvider.getMusic(trackId);"
-        errorLine2="                                                ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMusicProvider` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                    mMusicProvider.updateMusic(trackId, track);"
-        errorLine2="                    ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSession` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                        mSession.setMetadata(track);"
-        errorLine2="                        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayback` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="            if (service != null &amp;&amp; service.mPlayback != null) {"
-        errorLine2="                                           ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlayback` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                if (service.mPlayback.isPlaying()) {"
-        errorLine2="                            ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mServiceStarted` of class `MediaBrowserServiceSupport` requires synthetic accessor"
-        errorLine1="                service.mServiceStarted = false;"
-        errorLine2="                        ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaBrowserServiceSupport.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlaybackState` of class `MediaNotificationManager` requires synthetic accessor"
-        errorLine1="            mPlaybackState = state;"
-        errorLine2="            ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `createNotification` of class `MediaNotificationManager` requires synthetic accessor"
-        errorLine1="                Notification notification = createNotification();"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mNotificationManager` of class `MediaNotificationManager` requires synthetic accessor"
-        errorLine1="                    mNotificationManager.notify(NOTIFICATION_ID, notification);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMetadata` of class `MediaNotificationManager` requires synthetic accessor"
-        errorLine1="            mMetadata = metadata;"
-        errorLine2="            ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `createNotification` of class `MediaNotificationManager` requires synthetic accessor"
-        errorLine1="            Notification notification = createNotification();"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mNotificationManager` of class `MediaNotificationManager` requires synthetic accessor"
-        errorLine1="                mNotificationManager.notify(NOTIFICATION_ID, notification);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `updateSessionToken` of class `MediaNotificationManager` requires synthetic accessor"
-        errorLine1="            updateSessionToken();"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMetadata` of class `MediaNotificationManager` requires synthetic accessor"
-        errorLine1="                if (mMetadata != null &amp;&amp; mMetadata.getDescription() != null &amp;&amp;"
-        errorLine2="                    ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMetadata` of class `MediaNotificationManager` requires synthetic accessor"
-        errorLine1="                if (mMetadata != null &amp;&amp; mMetadata.getDescription() != null &amp;&amp;"
-        errorLine2="                                         ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMetadata` of class `MediaNotificationManager` requires synthetic accessor"
-        errorLine1="                    artUrl.equals(mMetadata.getDescription().getIconUri().toString())) {"
-        errorLine2="                                  ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mNotificationManager` of class `MediaNotificationManager` requires synthetic accessor"
-        errorLine1="                    mNotificationManager.notify(NOTIFICATION_ID, builder.build());"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/MediaNotificationManager.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `retrieveMedia` of class `MusicProvider` requires synthetic accessor"
-        errorLine1="                retrieveMedia();"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/model/MusicProvider.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentState` of class `MusicProvider` requires synthetic accessor"
-        errorLine1="                return mCurrentState;"
-        errorLine2="                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/model/MusicProvider.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mService` of class `Playback` requires synthetic accessor"
-        errorLine1="                    mService.startService(i);"
-        errorLine2="                    ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/Playback.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` member of class `ViewHolder` requires synthetic accessor"
-        errorLine1="            holder = new ViewHolder();"
-        errorLine2="                     ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueAdapter.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaBrowser` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            Log.d(TAG, &quot;onConnected: session token &quot; + mMediaBrowser.getSessionToken());"
-        errorLine2="                                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaBrowser` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            if (mMediaBrowser.getSessionToken() == null) {"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaController` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mMediaController = new MediaControllerCompat(getActivity(),"
-        errorLine2="            ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaBrowser` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                    mMediaBrowser.getSessionToken());"
-        errorLine2="                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaController` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mTransportControls = mMediaController.getTransportControls();"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransportControls` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mTransportControls = mMediaController.getTransportControls();"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaController` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mMediaController.registerCallback(mSessionCallback);"
-        errorLine2="            ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSessionCallback` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mMediaController.registerCallback(mSessionCallback);"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaController` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            ((MediaBrowserSupport) getActivity()).setMediaController(mMediaController);"
-        errorLine2="                                                                     ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaController` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mPlaybackState = mMediaController.getPlaybackState();"
-        errorLine2="                             ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlaybackState` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mPlaybackState = mMediaController.getPlaybackState();"
-        errorLine2="            ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaController` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            List&lt;MediaSessionCompat.QueueItem> queue = mMediaController.getQueue();"
-        errorLine2="                                                       ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mQueueAdapter` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                mQueueAdapter.clear();"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mQueueAdapter` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                mQueueAdapter.notifyDataSetInvalidated();"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mQueueAdapter` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                mQueueAdapter.addAll(queue);"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mQueueAdapter` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                mQueueAdapter.notifyDataSetChanged();"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlaybackState` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            onPlaybackStateChanged(mPlaybackState);"
-        errorLine2="                                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `onPlaybackStateChanged` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            onPlaybackStateChanged(mPlaybackState);"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaController` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mMediaController.unregisterCallback(mSessionCallback);"
-        errorLine2="            ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSessionCallback` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mMediaController.unregisterCallback(mSessionCallback);"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransportControls` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mTransportControls = null;"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaController` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mMediaController = null;"
-        errorLine2="            ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlaybackState` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            mPlaybackState = state;"
-        errorLine2="            ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `onPlaybackStateChanged` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            QueueFragment.this.onPlaybackStateChanged(state);"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mQueueAdapter` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                mQueueAdapter.clear();"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mQueueAdapter` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                mQueueAdapter.notifyDataSetInvalidated();"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mQueueAdapter` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                mQueueAdapter.addAll(queue);"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mQueueAdapter` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                mQueueAdapter.notifyDataSetChanged();"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mQueueAdapter` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                MediaSessionCompat.QueueItem item = mQueueAdapter.getItem(position);"
-        errorLine2="                                                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransportControls` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                mTransportControls.skipToQueueItem(item.getQueueId());"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlaybackState` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="            final int state = mPlaybackState == null ?"
-        errorLine2="                              ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPlaybackState` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                    PlaybackStateCompat.STATE_NONE : mPlaybackState.getState();"
-        errorLine2="                                                     ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `playMedia` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                        playMedia();"
-        errorLine2="                        ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `pauseMedia` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                        pauseMedia();"
-        errorLine2="                        ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `skipToPrevious` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                    skipToPrevious();"
-        errorLine2="                    ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `skipToNext` of class `QueueFragment` requires synthetic accessor"
-        errorLine1="                    skipToNext();"
-        errorLine2="                    ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/media/QueueFragment.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRoundedBitmapDrawable` of class `RoundedBitmapDrawableActivity` requires synthetic accessor"
-        errorLine1="                mRoundedBitmapDrawable.setCircular(isChecked);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/graphics/RoundedBitmapDrawableActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` member of class `ColorPagerAdapter` requires synthetic accessor"
-        errorLine1="        mAdapter = new ColorPagerAdapter();"
-        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/view/ViewPagerActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRootWindowInsetsEnabled` of class `WindowInsetsPlayground` requires synthetic accessor"
-        errorLine1="                    if (mRootWindowInsetsEnabled) {"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/view/WindowInsetsPlayground.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `updateTextForInsets` of class `WindowInsetsPlayground` requires synthetic accessor"
-        errorLine1="                        updateTextForInsets(ViewCompat.getRootWindowInsets(root));"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv4/view/WindowInsetsPlayground.java"/>
-    </issue>
-
-    <issue
         id="LambdaLast"
         message="Functional interface parameters (such as parameter 1, &quot;queue&quot;, in com.example.android.supportv4.media.utils.QueueHelper.getMusicIndexOnQueue) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions"
         errorLine1="             String mediaId) {"
diff --git a/samples/Support4Demos/src/main/AndroidManifest.xml b/samples/Support4Demos/src/main/AndroidManifest.xml
index ca8a773..a757919 100644
--- a/samples/Support4Demos/src/main/AndroidManifest.xml
+++ b/samples/Support4Demos/src/main/AndroidManifest.xml
@@ -21,6 +21,7 @@
      to come from a domain that you own or have control over. -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android">
 
+    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
     <application
         android:hardwareAccelerated="true"
         android:icon="@drawable/app_sample_code"
diff --git a/samples/Support7Demos/lint-baseline.xml b/samples/Support7Demos/lint-baseline.xml
index eb6a03c..10c23fb 100644
--- a/samples/Support7Demos/lint-baseline.xml
+++ b/samples/Support7Demos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="OnClick"
@@ -38,6 +38,15 @@
     </issue>
 
     <issue
+        id="MissingPermission"
+        message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`"
+        errorLine1="        notificationManager.notify(NOTIFICATION_ID, notification);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/supportv7/media/Player.java"/>
+    </issue>
+
+    <issue
         id="WebViewLayout"
         message="Placing a `&lt;WebView>` in a parent element that uses a `wrap_content layout_height` can lead to subtle bugs; use `match_parent` instead"
         errorLine1="        &lt;WebView"
@@ -46,6 +55,8 @@
             file="src/main/res/layout/appcompat_night_mode.xml"/>
         <location
             file="src/main/res/layout/appcompat_night_mode.xml"
+            line="23"
+            column="9"
             message="`wrap_content` here may not work well with WebView below"/>
     </issue>
 
@@ -365,6 +376,33 @@
     </issue>
 
     <issue
+        id="NullabilityAnnotationsDetector"
+        message="Use `@androidx.annotation.NonNull` instead of `@org.jetbrains.annotations.NotNull`"
+        errorLine1="        @NotNull"
+        errorLine2="        ~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/supportv7/widget/RemoveLargeItemsDemo.java"/>
+    </issue>
+
+    <issue
+        id="NullabilityAnnotationsDetector"
+        message="Use `@androidx.annotation.NonNull` instead of `@org.jetbrains.annotations.NotNull`"
+        errorLine1="        public MyViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) {"
+        errorLine2="                                               ~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/supportv7/widget/RemoveLargeItemsDemo.java"/>
+    </issue>
+
+    <issue
+        id="NullabilityAnnotationsDetector"
+        message="Use `@androidx.annotation.NonNull` instead of `@org.jetbrains.annotations.NotNull`"
+        errorLine1="        public void onBindViewHolder(@NotNull MyViewHolder myViewHolder, int position) {"
+        errorLine2="                                     ~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/supportv7/widget/RemoveLargeItemsDemo.java"/>
+    </issue>
+
+    <issue
         id="ObsoleteSdkInt"
         message="This folder configuration (`v11`) is unnecessary; `minSdkVersion` is 14. Merge all the resources in this folder into `layout`.">
         <location
@@ -372,1707 +410,6 @@
     </issue>
 
     <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `startActionMode` of class `ActionBarActionMode` requires synthetic accessor"
-        errorLine1="                startActionMode();"
-        errorLine2="                ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/app/ActionBarActionMode.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `sSettingsIntent` of class `SettingsActionProvider` requires synthetic accessor"
-        errorLine1="                    getContext().startActivity(sSettingsIntent);"
-        errorLine2="                                               ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/app/ActionBarSettingsActionProviderActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `showSelectedDialog` of class `AlertDialogUsage` requires synthetic accessor"
-        errorLine1="                showSelectedDialog();"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/app/AlertDialogUsage.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRecyclerView` of class `AnimatedRecyclerView` requires synthetic accessor"
-        errorLine1="                if (isChecked &amp;&amp; mRecyclerView.getItemAnimator() == null) {"
-        errorLine2="                                 ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/AnimatedRecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRecyclerView` of class `AnimatedRecyclerView` requires synthetic accessor"
-        errorLine1="                    mRecyclerView.setItemAnimator(mCachedAnimator);"
-        errorLine2="                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/AnimatedRecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRecyclerView` of class `AnimatedRecyclerView` requires synthetic accessor"
-        errorLine1="                } else if (!isChecked &amp;&amp; mRecyclerView.getItemAnimator() != null) {"
-        errorLine2="                                         ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/AnimatedRecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRecyclerView` of class `AnimatedRecyclerView` requires synthetic accessor"
-        errorLine1="                    mRecyclerView.setItemAnimator(null);"
-        errorLine2="                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/AnimatedRecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` member of class `MyItemInfo` requires synthetic accessor"
-        errorLine1="                return new MyItemInfo();"
-        errorLine2="                       ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/AnimatedRecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLinearLayoutManager` of class `AsyncListUtilActivity` requires synthetic accessor"
-        errorLine1="                            outRange[0] = mLinearLayoutManager.findFirstVisibleItemPosition();"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/AsyncListUtilActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLinearLayoutManager` of class `AsyncListUtilActivity` requires synthetic accessor"
-        errorLine1="                            outRange[1] = mLinearLayoutManager.findLastVisibleItemPosition();"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/AsyncListUtilActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRecyclerView` of class `AsyncListUtilActivity` requires synthetic accessor"
-        errorLine1="                            mRecyclerView.getAdapter().notifyDataSetChanged();"
-        errorLine2="                            ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/AsyncListUtilActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRecyclerView` of class `AsyncListUtilActivity` requires synthetic accessor"
-        errorLine1="                            mRecyclerView.getAdapter().notifyItemChanged(position);"
-        errorLine2="                            ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/AsyncListUtilActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRecyclerView` of class `AsyncListUtilActivity` requires synthetic accessor"
-        errorLine1="            mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {"
-        errorLine2="            ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/AsyncListUtilActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConfigToggles` of class `BaseLayoutManagerActivity` requires synthetic accessor"
-        errorLine1="            ConfigToggle toggle = mConfigToggles[position];"
-        errorLine2="                                  ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/BaseLayoutManagerActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConfigToggles` of class `BaseLayoutManagerActivity` requires synthetic accessor"
-        errorLine1="            return mConfigToggles.length;"
-        errorLine2="                   ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/BaseLayoutManagerActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `update` of class `CardViewActivity` requires synthetic accessor"
-        errorLine1="            update();"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/view/CardViewActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `update` of class `CardViewActivity` requires synthetic accessor"
-        errorLine1="                update();"
-        errorLine2="                ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/view/CardViewActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `update` of class `CardViewActivity` requires synthetic accessor"
-        errorLine1="                update();"
-        errorLine2="                ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/view/CardViewActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `getColorId` of class `CardViewActivity` requires synthetic accessor"
-        errorLine1="                                        getColorId(checkedId)));"
-        errorLine2="                                        ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/view/CardViewActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mKey` of class `DemoItemHolder` requires synthetic accessor"
-        errorLine1="                return DemoItemHolder.this.mKey;"
-        errorLine2="                                           ~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/DemoItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDetails` of class `DemoItemHolder` requires synthetic accessor"
-        errorLine1="                Log.d(TAG, &quot;Unexpected click received on item: &quot; + mDetails.getSelectionKey());"
-        errorLine2="                                                                   ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/DemoItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `showSelectedDialog` of class `DialogFragmentUsage` requires synthetic accessor"
-        errorLine1="                showSelectedDialog();"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/app/DialogFragmentUsage.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `createRandomCheeseList` of class `DiffUtilActivity` requires synthetic accessor"
-        errorLine1="                        List&lt;String> newList = createRandomCheeseList(oldList, 5);"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/util/DiffUtilActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` member of class `DrawerItemClickListener` requires synthetic accessor"
-        errorLine1="        mStartDrawer.setOnItemClickListener(new DrawerItemClickListener());"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDrawerLayout` of class `DrawerLayoutActivity` requires synthetic accessor"
-        errorLine1="                        final int drawerLayoutWidth = mDrawerLayout.getWidth();"
-        errorLine2="                                                      ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDrawerLayout` of class `DrawerLayoutActivity` requires synthetic accessor"
-        errorLine1="                        final Resources.Theme theme = mDrawerLayout.getContext().getTheme();"
-        errorLine2="                                                      ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mStartDrawer` of class `DrawerLayoutActivity` requires synthetic accessor"
-        errorLine1="                                (DrawerLayout.LayoutParams) mStartDrawer.getLayoutParams();"
-        errorLine2="                                                            ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mStartDrawer` of class `DrawerLayoutActivity` requires synthetic accessor"
-        errorLine1="                        mStartDrawer.setLayoutParams(startDrawerLp);"
-        errorLine2="                        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mEndDrawer` of class `DrawerLayoutActivity` requires synthetic accessor"
-        errorLine1="                                (DrawerLayout.LayoutParams) mEndDrawer.getLayoutParams();"
-        errorLine2="                                                            ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mEndDrawer` of class `DrawerLayoutActivity` requires synthetic accessor"
-        errorLine1="                        mEndDrawer.setLayoutParams(endDrawerLp);"
-        errorLine2="                        ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDrawerLayout` of class `DrawerLayoutActivity` requires synthetic accessor"
-        errorLine1="                        mDrawerLayout.getViewTreeObserver().removeOnPreDrawListener(this);"
-        errorLine2="                        ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mContent` of class `DrawerLayoutActivity` requires synthetic accessor"
-        errorLine1="            mContent.setText(LoremIpsum.DIALOGUE[position]);"
-        errorLine2="            ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mToolbar` of class `DrawerLayoutActivity` requires synthetic accessor"
-        errorLine1="            mToolbar.setTitle(LoremIpsum.TITLES[position]);"
-        errorLine2="            ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDrawerLayout` of class `DrawerLayoutActivity` requires synthetic accessor"
-        errorLine1="            mDrawerLayout.closeDrawer(mStartDrawer);"
-        errorLine2="            ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mStartDrawer` of class `DrawerLayoutActivity` requires synthetic accessor"
-        errorLine1="            mDrawerLayout.closeDrawer(mStartDrawer);"
-        errorLine2="                                      ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/DrawerLayoutActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAdapter` of class `FancySelectionDemoActivity` requires synthetic accessor"
-        errorLine1="                switch(mAdapter.getItemViewType(position)){"
-        errorLine2="                       ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLayout` of class `FancySelectionDemoActivity` requires synthetic accessor"
-        errorLine1="                        return mLayout.getSpanCount();"
-        errorLine2="                               ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` constructor of class `OnDragInitiatedListener` requires synthetic accessor"
-        errorLine1="                .withOnDragInitiatedListener(new OnDragInitiatedListener(this))"
-        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` member of class `OnContextClickListener` requires synthetic accessor"
-        errorLine1="                .withOnContextClickListener(new OnContextClickListener())"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` member of class `FocusDelegate` requires synthetic accessor"
-        errorLine1="                .withFocusDelegate(new FocusDelegate())"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSelectionTracker` of class `FancySelectionDemoActivity` requires synthetic accessor"
-        errorLine1="                        if (mSelectionTracker.hasSelection() &amp;&amp; !mSwipeDuringSelectionEnabled) {"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSwipeDuringSelectionEnabled` of class `FancySelectionDemoActivity` requires synthetic accessor"
-        errorLine1="                        if (mSelectionTracker.hasSelection() &amp;&amp; !mSwipeDuringSelectionEnabled) {"
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAdapter` of class `FancySelectionDemoActivity` requires synthetic accessor"
-        errorLine1="                            mAdapter.removeItem(details.getSelectionKey());"
-        errorLine2="                            ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `toast` of class `FancySelectionDemoActivity` requires synthetic accessor"
-        errorLine1="            toast(mContext, &quot;Activate item: &quot; + item);"
-        errorLine2="            ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRecView` of class `FancySelectionDemoActivity` requires synthetic accessor"
-        errorLine1="            View view = mRecView.findChildViewUnder(e.getX(), e.getY());"
-        errorLine2="                        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSwipeDuringSelectionEnabled` of class `FancySelectionDemoActivity` requires synthetic accessor"
-        errorLine1="            if (!mSwipeDuringSelectionEnabled) {"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `toast` of class `FancySelectionDemoActivity` requires synthetic accessor"
-        errorLine1="                toast(mContext, &quot;onDragInitiated received.&quot;);"
-        errorLine2="                ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/fancy/FancySelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `CACHE` of class `ImageLoader` requires synthetic accessor"
-        errorLine1="                    CACHE.put(id, bitmap);"
-        errorLine2="                    ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/graphics/ImageLoader.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConfigToggles` of class `ItemTouchHelperActivity` requires synthetic accessor"
-        errorLine1="                ConfigToggle toggle = mConfigToggles[position];"
-        errorLine2="                                      ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/touch/ItemTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConfigToggles` of class `ItemTouchHelperActivity` requires synthetic accessor"
-        errorLine1="                return mConfigToggles.length;"
-        errorLine2="                       ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/touch/ItemTouchHelperActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDividerItemDecoration` of class `LinearLayoutManagerActivity` requires synthetic accessor"
-        errorLine1="                        if (mDividerItemDecoration != null) {"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDividerItemDecoration` of class `LinearLayoutManagerActivity` requires synthetic accessor"
-        errorLine1="                            mDividerItemDecoration.setOrientation(mLayoutManager.getOrientation());"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSnapHelperAttached` of class `LinearLayoutManagerActivity` requires synthetic accessor"
-        errorLine1="                        return mSnapHelperAttached;"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLinearSnapHelper` of class `LinearLayoutManagerActivity` requires synthetic accessor"
-        errorLine1="                        mLinearSnapHelper.attachToRecyclerView(newValue ? mRecyclerView : null);"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSnapHelperAttached` of class `LinearLayoutManagerActivity` requires synthetic accessor"
-        errorLine1="                        mSnapHelperAttached = newValue;"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBindSlowdownEnabled` of class `LinearLayoutManagerJankActivity` requires synthetic accessor"
-        errorLine1="                if (mBindSlowdownEnabled) spinWaitMs(8);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `spinWaitMs` of class `LinearLayoutManagerJankActivity` requires synthetic accessor"
-        errorLine1="                if (mBindSlowdownEnabled) spinWaitMs(8);"
-        errorLine2="                                          ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mInflateSlowdownEnabled` of class `LinearLayoutManagerJankActivity` requires synthetic accessor"
-        errorLine1="                if (mInflateSlowdownEnabled) spinWaitMs(4);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `spinWaitMs` of class `LinearLayoutManagerJankActivity` requires synthetic accessor"
-        errorLine1="                if (mInflateSlowdownEnabled) spinWaitMs(4);"
-        errorLine2="                                             ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBindSlowdownEnabled` of class `LinearLayoutManagerJankActivity` requires synthetic accessor"
-        errorLine1="                    public boolean isChecked() { return mBindSlowdownEnabled; }"
-        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBindSlowdownEnabled` of class `LinearLayoutManagerJankActivity` requires synthetic accessor"
-        errorLine1="                    public void onChange(boolean newValue) { mBindSlowdownEnabled = newValue; }"
-        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mInflateSlowdownEnabled` of class `LinearLayoutManagerJankActivity` requires synthetic accessor"
-        errorLine1="                    public boolean isChecked() { return mInflateSlowdownEnabled; }"
-        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mInflateSlowdownEnabled` of class `LinearLayoutManagerJankActivity` requires synthetic accessor"
-        errorLine1="                    public void onChange(boolean newValue) { mInflateSlowdownEnabled = newValue; }"
-        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/LinearLayoutManagerJankActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mContainer` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow = new ListPopupWindow(mContainer.getContext());"
-        errorLine2="                                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mListPopupWindow` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow = new ListPopupWindow(mContainer.getContext());"
-        errorLine2="                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mListPopupAdapter` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupAdapter = new BaseAdapter() {"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `title` of class `ViewHolder` requires synthetic accessor"
-        errorLine1="                            viewHolder.title = (TextView) convertView.findViewById(R.id.title);"
-        errorLine2="                                       ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `shortcut` of class `ViewHolder` requires synthetic accessor"
-        errorLine1="                            viewHolder.shortcut = (TextView) convertView.findViewById("
-        errorLine2="                                       ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `title` of class `ViewHolder` requires synthetic accessor"
-        errorLine1="                        viewHolder.title.setText(POPUP_CONTENT[position]);"
-        errorLine2="                                   ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `shortcut` of class `ViewHolder` requires synthetic accessor"
-        errorLine1="                        viewHolder.shortcut.setVisibility(View.GONE);"
-        errorLine2="                                   ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mListPopupAdapter` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow.setAdapter(mListPopupAdapter);"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mListPopupWindow` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow.setAdapter(mListPopupAdapter);"
-        errorLine2="                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mButton` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow.setAnchorView(mButton);"
-        errorLine2="                                               ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mListPopupWindow` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow.setAnchorView(mButton);"
-        errorLine2="                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mUseEpicenter` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                final Rect epicenter = mUseEpicenter.isChecked()"
-        errorLine2="                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mListPopupWindow` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow.setEpicenterBounds(epicenter);"
-        errorLine2="                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mListPopupWindow` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {"
-        errorLine2="                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `addToLog` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                        addToLog(&quot;Item #&quot;+ position + &quot; clicked&quot;);"
-        errorLine2="                        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `addToLog` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                        addToLog(&quot;Dismissing popup window&quot;);"
-        errorLine2="                        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mListPopupWindow` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                        mListPopupWindow.dismiss();"
-        errorLine2="                        ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mListPopupWindow` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {"
-        errorLine2="                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `addToLog` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                        addToLog(&quot;Popup window dismissed&quot;);"
-        errorLine2="                        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mIsModal` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow.setModal(mIsModal.isChecked());"
-        errorLine2="                                          ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mListPopupWindow` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow.setModal(mIsModal.isChecked());"
-        errorLine2="                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mListPopupWindow` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                mListPopupWindow.show();"
-        errorLine2="                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `addToLog` of class `ListPopupWindowActivity` requires synthetic accessor"
-        errorLine1="                addToLog(&quot;Log view clicked&quot;);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/ListPopupWindowActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mState` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                if (mState == STATE_IDLE) {"
-        errorLine2="                    ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mState` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    mState = STATE_READY;"
-        errorLine2="                    ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `updateVideoRect` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    updateVideoRect();"
-        errorLine2="                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mState` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                } else if (mState == STATE_PREPARING_FOR_PLAY"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mState` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                        || mState == STATE_PREPARING_FOR_PAUSE) {"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mState` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    int prevState = mState;"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mState` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    mState = mState == STATE_PREPARING_FOR_PLAY ? STATE_PLAYING : STATE_PAUSED;"
-        errorLine2="                    ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mState` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    mState = mState == STATE_PREPARING_FOR_PLAY ? STATE_PLAYING : STATE_PAUSED;"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `updateVideoRect` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    updateVideoRect();"
-        errorLine2="                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSeekToPos` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    if (mSeekToPos > 0) {"
-        errorLine2="                        ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `DEBUG` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                        if (DEBUG) {"
-        errorLine2="                            ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSeekToPos` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                            Log.d(TAG, &quot;seek to initial pos: &quot; + mSeekToPos);"
-        errorLine2="                                                                 ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaPlayer` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                        mMediaPlayer.seekTo(mSeekToPos);"
-        errorLine2="                        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSeekToPos` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                        mMediaPlayer.seekTo(mSeekToPos);"
-        errorLine2="                                            ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaPlayer` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                        mMediaPlayer.start();"
-        errorLine2="                        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSeekToPos` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                mSeekToPos = 0;"
-        errorLine2="                ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaPlayer` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                if (mMediaPlayer == null) {"
-        errorLine2="                    ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSurface` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                if (mSurface != null) {"
-        errorLine2="                    ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaPlayer` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    ICSMediaPlayer.setSurface(mMediaPlayer, mSurface);"
-        errorLine2="                                              ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSurface` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    ICSMediaPlayer.setSurface(mMediaPlayer, mSurface);"
-        errorLine2="                                                            ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSurfaceHolder` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                } else if (mSurfaceHolder != null) {"
-        errorLine2="                           ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaPlayer` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    mMediaPlayer.setDisplay(mSurfaceHolder);"
-        errorLine2="                    ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSurfaceHolder` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    mMediaPlayer.setDisplay(mSurfaceHolder);"
-        errorLine2="                                            ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMediaPlayer` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="                    mMediaPlayer.setDisplay(null);"
-        errorLine2="                    ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `DEBUG` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="            if (DEBUG) {"
-        errorLine2="                ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `DEBUG` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="            if (DEBUG) {"
-        errorLine2="                ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `DEBUG` of class `LocalPlayer` requires synthetic accessor"
-        errorLine1="            if (DEBUG) {"
-        errorLine2="                ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPresentation` of class `SurfaceViewPlayer` requires synthetic accessor"
-        errorLine1="                if (dialog == mPresentation) {"
-        errorLine2="                              ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPresentation` of class `SurfaceViewPlayer` requires synthetic accessor"
-        errorLine1="                    mPresentation = null;"
-        errorLine2="                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `updateContents` of class `SurfaceViewPlayer` requires synthetic accessor"
-        errorLine1="                    updateContents();"
-        errorLine2="                    ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/LocalPlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRecyclerView` of class `ViewHolder` requires synthetic accessor"
-        errorLine1="            holder.mRecyclerView.swapAdapter(mAdapters.get(position), true);"
-        errorLine2="                   ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/NestedRecyclerViewActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRecyclerView` of class `ViewHolder` requires synthetic accessor"
-        errorLine1="                holder.mRecyclerView.getLayoutManager().onRestoreInstanceState(savedState);"
-        errorLine2="                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/NestedRecyclerViewActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRecyclerView` of class `ViewHolder` requires synthetic accessor"
-        errorLine1="                    holder.mRecyclerView.getLayoutManager().onSaveInstanceState());"
-        errorLine2="                           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/NestedRecyclerViewActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDefaultDisplay` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                if (displayId == mDefaultDisplay.getDisplayId()) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `updateDefaultDisplayInfo` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                    if (updateDefaultDisplayInfo()) {"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `relayout` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                        relayout();"
-        errorLine2="                        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDefaultDisplay` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                if (displayId == mDefaultDisplay.getDisplayId()) {"
-        errorLine2="                                 ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mGestureDetector` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                mGestureDetector.onTouchEvent(event);"
-        errorLine2="                ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleGestureDetector` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                mScaleGestureDetector.onTouchEvent(event);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `saveWindowParams` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                        saveWindowParams();"
-        errorLine2="                        ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLiveTranslationX` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                mLiveTranslationX -= distanceX;"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLiveTranslationY` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                mLiveTranslationY -= distanceY;"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `relayout` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                relayout();"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLiveScale` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                mLiveScale *= detector.getScaleFactor();"
-        errorLine2="                ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `relayout` of class `JellybeanMr1Impl` requires synthetic accessor"
-        errorLine1="                relayout();"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/OverlayDisplayWindow.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mNumColors` of class `PhotosCursorAdapter` requires synthetic accessor"
-        errorLine1="                        new Palette.Builder(bitmap).maximumColorCount(mNumColors).generate("
-        errorLine2="                                                                      ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/graphics/PaletteActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` member of class `SwatchesPalette` requires synthetic accessor"
-        errorLine1="        mSwatchesPalette = new SwatchesPalette();"
-        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/graphics/PaletteDetailActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentToast` of class `PaletteDetailActivity` requires synthetic accessor"
-        errorLine1="                if (mCurrentToast != null) {"
-        errorLine2="                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/graphics/PaletteDetailActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentToast` of class `PaletteDetailActivity` requires synthetic accessor"
-        errorLine1="                    mCurrentToast.cancel();"
-        errorLine2="                    ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/graphics/PaletteDetailActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentToast` of class `PaletteDetailActivity` requires synthetic accessor"
-        errorLine1="                mCurrentToast = Toast.makeText(PaletteDetailActivity.this,"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/graphics/PaletteDetailActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurrentToast` of class `PaletteDetailActivity` requires synthetic accessor"
-        errorLine1="                mCurrentToast.show();"
-        errorLine2="                ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/graphics/PaletteDetailActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `populatePalette` of class `PaletteDetailActivity` requires synthetic accessor"
-        errorLine1="                                populatePalette(palette);"
-        errorLine2="                                ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/graphics/PaletteDetailActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `setBackgroundColor` of class `PaletteDetailActivity` requires synthetic accessor"
-        errorLine1="            setBackgroundColor(view, getItem(position));"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/graphics/PaletteDetailActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `populateMenu` of class `PopupMenuActivity` requires synthetic accessor"
-        errorLine1="                populateMenu(menuInflater, popupMenu.getMenu());"
-        errorLine2="                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/PopupMenuActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `addToLog` of class `PopupMenuActivity` requires synthetic accessor"
-        errorLine1="                        addToLog(&quot;Item &apos;&quot;+ item.getTitle() + &quot;&apos; clicked&quot;);"
-        errorLine2="                        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/PopupMenuActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `addToLog` of class `PopupMenuActivity` requires synthetic accessor"
-        errorLine1="                        addToLog(&quot;Popup menu dismissed&quot;);"
-        errorLine2="                        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/PopupMenuActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="            logStatus(&quot;onItemStatusChanged&quot;, sessionId, sessionStatus, itemId, itemStatus);"
-        errorLine2="            ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="            logStatus(&quot;onSessionStatusChanged&quot;, sessionId, sessionStatus, null, null);"
-        errorLine2="            ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `DEBUG` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="            if (DEBUG) {"
-        errorLine2="                ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logStatus(&quot;play: succeeded&quot;, sessionId, sessionStatus, itemId, itemStatus);"
-        errorLine2="                ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logError` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logError(&quot;play: failed&quot;, error, code);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logStatus(&quot;getStatus: succeeded&quot;, sessionId, sessionStatus, itemId, itemStatus);"
-        errorLine2="                ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logError` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logError(&quot;getStatus: failed&quot;, error, code);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logStatus(&quot;pause: succeeded&quot;, sessionId, sessionStatus, null, null);"
-        errorLine2="                ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logError` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logError(&quot;pause: failed&quot;, error, code);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logStatus(&quot;resume: succeeded&quot;, sessionId, sessionStatus, null, null);"
-        errorLine2="                ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logError` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logError(&quot;resume: failed&quot;, error, code);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logStatus(&quot;stop: succeeded&quot;, sessionId, sessionStatus, null, null);"
-        errorLine2="                ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mClient` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                if (mClient.isSessionManagementSupported()) {"
-        errorLine2="                    ~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `endSession` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                    endSession();"
-        errorLine2="                    ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logError` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logError(&quot;stop: failed&quot;, error, code);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logStatus(&quot;remove: succeeded&quot;, sessionId, sessionStatus, itemId, itemStatus);"
-        errorLine2="                ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logError` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logError(&quot;remove: failed&quot;, error, code);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `DEBUG` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                    if (DEBUG) {"
-        errorLine2="                        ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSnapshot` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                        mSnapshot = data.getParcelable(SampleMediaRouteProvider.EXTRA_SNAPSHOT);"
-        errorLine2="                        ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logStatus(&quot;enqueue: succeeded&quot;, sessionId, sessionStatus, itemId, itemStatus);"
-        errorLine2="                ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `seekInternal` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                    seekInternal(item);"
-        errorLine2="                    ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mEnqueuePending` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                if (mEnqueuePending) {"
-        errorLine2="                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mEnqueuePending` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                    mEnqueuePending = false;"
-        errorLine2="                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTempQueue` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                    for (PlaylistItem item : mTempQueue) {"
-        errorLine2="                                             ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `enqueueInternal` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                        enqueueInternal(item);"
-        errorLine2="                        ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTempQueue` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                    mTempQueue.clear();"
-        errorLine2="                    ~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logError` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logError(&quot;enqueue: failed&quot;, error, code);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="               logStatus(&quot;seek: succeeded&quot;, sessionId, sessionStatus, itemId, itemStatus);"
-        errorLine2="               ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logError` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="               logError(&quot;seek: failed&quot;, error, code);"
-        errorLine2="               ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logStatus(&quot;startSession: succeeded&quot;, sessionId, sessionStatus, null, null);"
-        errorLine2="                ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `enqueueInternal` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                enqueueInternal(item);"
-        errorLine2="                ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logError` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logError(&quot;startSession: failed&quot;, error, code);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logStatus` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logStatus(&quot;endSession: succeeded&quot;, sessionId, sessionStatus, null, null);"
-        errorLine2="                ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `logError` of class `RemotePlayer` requires synthetic accessor"
-        errorLine1="                logError(&quot;endSession: failed&quot;, error, code);"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/RemotePlayer.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSessionManager` of class `RouteControlHelper` requires synthetic accessor"
-        errorLine1="            return mHelper.mSessionManager;"
-        errorLine2="                           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `handleStatusChange` of class `RouteControlHelper` requires synthetic accessor"
-        errorLine1="                    handleStatusChange(item);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSelectionTracker` of class `SimpleSelectionDemoActivity` requires synthetic accessor"
-        errorLine1="                        Log.i(TAG, &quot;Selection changed to: &quot; + mSelectionTracker.getSelection());"
-        errorLine2="                                                              ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/simple/SimpleSelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `toast` of class `SimpleSelectionDemoActivity` requires synthetic accessor"
-        errorLine1="            toast(mContext, &quot;Activate item: &quot; + item.getSelectionKey());"
-        errorLine2="            ~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/simple/SimpleSelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mSelectionTracker` of class `SingleStableIdSelectionDemoActivity` requires synthetic accessor"
-        errorLine1="                        Log.i(TAG, &quot;Selection changed to: &quot; + mSelectionTracker.getSelection());"
-        errorLine2="                                                              ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/selection/single/SingleStableIdSelectionDemoActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAdapter` of class `SortedListActivity` requires synthetic accessor"
-        errorLine1="                        mAdapter.addItem(new Item(text));"
-        errorLine2="                        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/util/SortedListActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDataView` of class `ViewHolder` requires synthetic accessor"
-        errorLine1="            holder.mDataView.setText(mData.get(position).second);"
-        errorLine2="                   ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/StableIdActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVertical` of class `StaggeredGridLayoutManagerActivity` requires synthetic accessor"
-        errorLine1="                        return mVertical;"
-        errorLine2="                               ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/StaggeredGridLayoutManagerActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVertical` of class `StaggeredGridLayoutManagerActivity` requires synthetic accessor"
-        errorLine1="                        if (mVertical == newValue) {"
-        errorLine2="                            ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/StaggeredGridLayoutManagerActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVertical` of class `StaggeredGridLayoutManagerActivity` requires synthetic accessor"
-        errorLine1="                        mVertical = newValue;"
-        errorLine2="                        ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/StaggeredGridLayoutManagerActivity.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mActionMode` of class `IV` requires synthetic accessor"
-        errorLine1="                mActionMode = null;"
-        errorLine2="                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/view/SystemUIModes.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `mActivity` of class `IV` requires synthetic accessor"
-        errorLine1="                mActivity.clearActionMode();"
-        errorLine2="                ~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/view/SystemUIModes.java"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `startActionMode` of class `ToolbarActionMode` requires synthetic accessor"
-        errorLine1="                startActionMode();"
-        errorLine2="                ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/app/ToolbarActionMode.java"/>
-    </issue>
-
-    <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
@@ -5024,31 +3361,4 @@
             file="src/main/java/com/example/android/supportv7/app/ToolbarUsage.java"/>
     </issue>
 
-    <issue
-        id="NullabilityAnnotationsDetector"
-        message="Use @androidx.annotation.NonNull instead of @org.jetbrains.annotations.NotNull"
-        errorLine1="        @NotNull"
-        errorLine2="        ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/RemoveLargeItemsDemo.java"/>
-    </issue>
-
-    <issue
-        id="NullabilityAnnotationsDetector"
-        message="Use @androidx.annotation.NonNull instead of @org.jetbrains.annotations.NotNull"
-        errorLine1="        public MyViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) {"
-        errorLine2="                                               ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/RemoveLargeItemsDemo.java"/>
-    </issue>
-
-    <issue
-        id="NullabilityAnnotationsDetector"
-        message="Use @androidx.annotation.NonNull instead of @org.jetbrains.annotations.NotNull"
-        errorLine1="        public void onBindViewHolder(@NotNull MyViewHolder myViewHolder, int position) {"
-        errorLine2="                                     ~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/supportv7/widget/RemoveLargeItemsDemo.java"/>
-    </issue>
-
 </issues>
diff --git a/samples/Support7Demos/src/main/AndroidManifest.xml b/samples/Support7Demos/src/main/AndroidManifest.xml
index d886e97..c01ea87 100644
--- a/samples/Support7Demos/src/main/AndroidManifest.xml
+++ b/samples/Support7Demos/src/main/AndroidManifest.xml
@@ -20,6 +20,7 @@
      own application, the package name must be changed from "com.example.*"
      to come from a domain that you own or have control over. -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android">
+    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
     <!-- Permission for INTERNET is required for streaming video content
          from the web, it's not required otherwise. -->
     <application
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaButtonReceiver.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaButtonReceiver.java
index 77e5126..3ad4b36 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaButtonReceiver.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaButtonReceiver.java
@@ -28,6 +28,7 @@
  * remote route volume in lock screen. It routes media key events back
  * to main app activity SampleMediaRouterActivity.
  */
+@SuppressWarnings("deprecation")
 public class SampleMediaButtonReceiver extends BroadcastReceiver {
     private static final String TAG = "SampleMediaButtonReceiver";
     private static SampleMediaRouterActivity mActivity;
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java
index e695d7d..afe07ed9 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java
@@ -51,6 +51,7 @@
  *
  * @see SampleMediaRouteProviderService
  */
+@SuppressWarnings("deprecation")
 class SampleMediaRouteProvider extends MediaRouteProvider {
     private static final String TAG = "SampleMrp";
 
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java
index 6f72b20..507d14e 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java
@@ -78,6 +78,7 @@
  * targets.
  * </p>
  */
+@SuppressWarnings("deprecation")
 public class SampleMediaRouterActivity extends AppCompatActivity {
     private static final String TAG = "SampleMediaRouter";
     private static final String DISCOVERY_FRAGMENT_TAG = "DiscoveryFragment";
diff --git a/samples/SupportLeanbackDemos/lint-baseline.xml b/samples/SupportLeanbackDemos/lint-baseline.xml
index 2cec5b7..2579349 100644
--- a/samples/SupportLeanbackDemos/lint-baseline.xml
+++ b/samples/SupportLeanbackDemos/lint-baseline.xml
@@ -241,7 +241,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="59"
+            column="15"/>
     </issue>
 
     <issue
@@ -250,7 +252,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="69"
+            column="15"/>
     </issue>
 
     <issue
@@ -259,7 +263,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemSelected: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="92"
+            column="23"/>
     </issue>
 
     <issue
@@ -268,7 +274,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="69"
+            column="15"/>
     </issue>
 
     <issue
@@ -277,7 +285,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemClicked: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="136"
+            column="23"/>
     </issue>
 
     <issue
@@ -286,7 +296,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemSelected: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="153"
+            column="23"/>
     </issue>
 
     <issue
@@ -295,7 +307,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="72"
+            column="15"/>
     </issue>
 
     <issue
@@ -304,7 +318,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemClicked: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="139"
+            column="23"/>
     </issue>
 
     <issue
@@ -313,7 +329,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemSelected: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="156"
+            column="23"/>
     </issue>
 
     <issue
@@ -322,7 +340,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"
+            line="32"
+            column="15"/>
     </issue>
 
     <issue
@@ -331,7 +351,9 @@
         errorLine1="                Log.i(TAG, &quot;button clicked&quot;);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"
+            line="46"
+            column="23"/>
     </issue>
 
     <issue
@@ -340,7 +362,9 @@
         errorLine1="        Log.v(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="43"
+            column="15"/>
     </issue>
 
     <issue
@@ -349,7 +373,9 @@
         errorLine1="        Log.v(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="46"
+            column="15"/>
     </issue>
 
     <issue
@@ -358,7 +384,9 @@
         errorLine1="                Log.v(TAG, &quot;onScrollStateChanged &quot;"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+            line="48"
+            column="23"/>
     </issue>
 
     <issue
@@ -367,7 +395,9 @@
         errorLine1="                        if (DEBUG) Log.d(TAG, &quot;onChildSelected position=&quot; + position);"
         errorLine2="                                         ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+            line="66"
+            column="42"/>
     </issue>
 
     <issue
@@ -376,7 +406,9 @@
         errorLine1="        if (DEBUG) Log.v(TAG, &quot;onCreate&quot;);"
         errorLine2="                         ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+            line="77"
+            column="26"/>
     </issue>
 
     <issue
@@ -385,7 +417,9 @@
         errorLine1="        if (DEBUG) Log.v(TAG, &quot;onNewIntent &quot; + intent);"
         errorLine2="                         ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+            line="89"
+            column="26"/>
     </issue>
 
     <issue
@@ -394,7 +428,9 @@
         errorLine1="            if (DEBUG) Log.v(TAG, &quot;createViewHolder &quot; + viewType);"
         errorLine2="                             ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+            line="131"
+            column="30"/>
     </issue>
 
     <issue
@@ -403,7 +439,9 @@
         errorLine1="            if (DEBUG) Log.v(TAG, &quot;bindViewHolder &quot; + position + &quot; &quot; + baseHolder);"
         errorLine2="                             ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+            line="143"
+            column="30"/>
     </issue>
 
     <issue
@@ -412,7 +450,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="116"
+            column="15"/>
     </issue>
 
     <issue
@@ -421,7 +461,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemClicked: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="217"
+            column="23"/>
     </issue>
 
     <issue
@@ -430,7 +472,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemSelected: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="234"
+            column="23"/>
     </issue>
 
     <issue
@@ -439,7 +483,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="119"
+            column="15"/>
     </issue>
 
     <issue
@@ -448,7 +494,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemClicked: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="220"
+            column="23"/>
     </issue>
 
     <issue
@@ -457,7 +505,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemSelected: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="237"
+            column="23"/>
     </issue>
 
     <issue
@@ -466,7 +516,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackFragment.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackFragment.java"
+            line="67"
+            column="15"/>
     </issue>
 
     <issue
@@ -475,7 +527,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"
+            line="70"
+            column="15"/>
     </issue>
 
     <issue
@@ -484,7 +538,9 @@
         errorLine1="            Log.e(TAG, &quot;disconnectToMediaSession: Media session disconnected&quot;);"
         errorLine2="                  ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"
+            line="156"
+            column="19"/>
     </issue>
 
     <issue
@@ -493,7 +549,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+            line="56"
+            column="15"/>
     </issue>
 
     <issue
@@ -502,7 +560,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemSelected: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+            line="64"
+            column="23"/>
     </issue>
 
     <issue
@@ -511,7 +571,9 @@
         errorLine1="        Log.i(TAG, String.format(&quot;Search Query Text Change %s&quot;, newQuery));"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+            line="111"
+            column="15"/>
     </issue>
 
     <issue
@@ -520,7 +582,9 @@
         errorLine1="        Log.i(TAG, String.format(&quot;Search Query Text Submit %s&quot;, query));"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+            line="119"
+            column="15"/>
     </issue>
 
     <issue
@@ -529,7 +593,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+            line="51"
+            column="15"/>
     </issue>
 
     <issue
@@ -538,7 +604,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemSelected: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+            line="94"
+            column="23"/>
     </issue>
 
     <issue
@@ -547,7 +615,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemClicked: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+            line="102"
+            column="23"/>
     </issue>
 
     <issue
@@ -556,7 +626,9 @@
         errorLine1="        Log.i(TAG, &quot;onCreate&quot;);"
         errorLine2="              ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+            line="54"
+            column="15"/>
     </issue>
 
     <issue
@@ -565,7 +637,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemSelected: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+            line="97"
+            column="23"/>
     </issue>
 
     <issue
@@ -574,7 +648,9 @@
         errorLine1="                Log.i(TAG, &quot;onItemClicked: &quot; + item + &quot; row &quot; + row);"
         errorLine2="                      ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+            line="105"
+            column="23"/>
     </issue>
 
     <issue
@@ -583,7 +659,9 @@
         errorLine1="        setOnItemViewClickedListener(new ItemViewClickedListener());"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="76"
+            column="38"/>
     </issue>
 
     <issue
@@ -592,7 +670,9 @@
         errorLine1="                                int count = sRand.nextInt(4) + 1;"
         errorLine2="                                            ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="181"
+            column="45"/>
     </issue>
 
     <issue
@@ -601,7 +681,9 @@
         errorLine1="                                int count = sRand.nextInt(4) + 1;"
         errorLine2="                                            ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="198"
+            column="45"/>
     </issue>
 
     <issue
@@ -610,7 +692,9 @@
         errorLine1="                    int index = mRowsAdapter.indexOf(row);"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="211"
+            column="33"/>
     </issue>
 
     <issue
@@ -619,7 +703,9 @@
         errorLine1="                        int headerId = sRand.nextInt();"
         errorLine2="                                       ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="213"
+            column="40"/>
     </issue>
 
     <issue
@@ -628,7 +714,9 @@
         errorLine1="                        mRowsAdapter.add(index, createRandomRow(new HeaderItem("
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="214"
+            column="25"/>
     </issue>
 
     <issue
@@ -637,7 +725,9 @@
         errorLine1="                    int index = mRowsAdapter.indexOf(row);"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="224"
+            column="33"/>
     </issue>
 
     <issue
@@ -646,7 +736,9 @@
         errorLine1="                        int headerId = sRand.nextInt();"
         errorLine2="                                       ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="226"
+            column="40"/>
     </issue>
 
     <issue
@@ -655,7 +747,9 @@
         errorLine1="                        mRowsAdapter.add("
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="227"
+            column="25"/>
     </issue>
 
     <issue
@@ -664,7 +758,9 @@
         errorLine1="                    mRowsAdapter.remove(row);"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="238"
+            column="21"/>
     </issue>
 
     <issue
@@ -673,7 +769,9 @@
         errorLine1="                    int index = mRowsAdapter.indexOf(row);"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="246"
+            column="33"/>
     </issue>
 
     <issue
@@ -682,7 +780,9 @@
         errorLine1="                        mRowsAdapter.removeItems(index - 1, 1);"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="248"
+            column="25"/>
     </issue>
 
     <issue
@@ -691,7 +791,9 @@
         errorLine1="                    int index = mRowsAdapter.indexOf(row);"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="257"
+            column="33"/>
     </issue>
 
     <issue
@@ -700,7 +802,9 @@
         errorLine1="                    if (index &lt; mRowsAdapter.size() - 1) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="258"
+            column="33"/>
     </issue>
 
     <issue
@@ -709,7 +813,9 @@
         errorLine1="                        mRowsAdapter.removeItems(index + 1, 1);"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="259"
+            column="25"/>
     </issue>
 
     <issue
@@ -718,7 +824,9 @@
         errorLine1="        setOnItemViewClickedListener(new ItemViewClickedListener());"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="84"
+            column="38"/>
     </issue>
 
     <issue
@@ -727,7 +835,9 @@
         errorLine1="                setupRows();"
         errorLine2="                ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="111"
+            column="17"/>
     </issue>
 
     <issue
@@ -736,7 +846,9 @@
         errorLine1="                loadData();"
         errorLine2="                ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="112"
+            column="17"/>
     </issue>
 
     <issue
@@ -745,7 +857,9 @@
         errorLine1="        setOnItemViewClickedListener(new ItemViewClickedListener());"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="87"
+            column="38"/>
     </issue>
 
     <issue
@@ -754,7 +868,9 @@
         errorLine1="                setupRows();"
         errorLine2="                ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="114"
+            column="17"/>
     </issue>
 
     <issue
@@ -763,7 +879,9 @@
         errorLine1="                loadData();"
         errorLine2="                ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="115"
+            column="17"/>
     </issue>
 
     <issue
@@ -772,7 +890,9 @@
         errorLine1="                DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(0);"
         errorLine2="                                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="101"
+            column="63"/>
     </issue>
 
     <issue
@@ -781,7 +901,9 @@
         errorLine1="                    actions.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="106"
+            column="46"/>
     </issue>
 
     <issue
@@ -790,7 +912,9 @@
         errorLine1="                    dor.setItem(mPhotoItem.getTitle() + &quot;(Owned)&quot;);"
         errorLine2="                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="109"
+            column="33"/>
     </issue>
 
     <issue
@@ -799,7 +923,9 @@
         errorLine1="                    actions.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="116"
+            column="46"/>
     </issue>
 
     <issue
@@ -808,7 +934,9 @@
         errorLine1="                    dor.setItem(mPhotoItem.getTitle() + &quot;(Rented)&quot;);"
         errorLine2="                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="118"
+            column="33"/>
     </issue>
 
     <issue
@@ -817,7 +945,9 @@
         errorLine1="                DetailsOverviewRow dor = new DetailsOverviewRow(mPhotoItem.getTitle());"
         errorLine2="                                                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="190"
+            column="65"/>
     </issue>
 
     <issue
@@ -826,7 +956,9 @@
         errorLine1="                        mPhotoItem.getImageResourceId(), context.getTheme()));"
         errorLine2="                        ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="192"
+            column="25"/>
     </issue>
 
     <issue
@@ -835,7 +967,9 @@
         errorLine1="                adapter.set(ACTION_RENT, mActionRent);"
         errorLine2="                                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="194"
+            column="42"/>
     </issue>
 
     <issue
@@ -844,7 +978,9 @@
         errorLine1="                adapter.set(ACTION_BUY, mActionBuy);"
         errorLine2="                                        ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="195"
+            column="41"/>
     </issue>
 
     <issue
@@ -853,7 +989,9 @@
         errorLine1="                mRowsAdapter.add(0, dor);"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="197"
+            column="17"/>
     </issue>
 
     <issue
@@ -862,7 +1000,9 @@
         errorLine1="                    mRowsAdapter.add(new ListRow(header, listRowAdapter));"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="212"
+            column="21"/>
     </issue>
 
     <issue
@@ -871,7 +1011,9 @@
         errorLine1="            for (int i = 0; i &lt; OPTION_NAMES.length; i++) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="90"
+            column="33"/>
     </issue>
 
     <issue
@@ -880,7 +1022,9 @@
         errorLine1="                if (OPTION_IDS[i] == ACTION_ID_SWITCH_LEGACY_ON) {"
         errorLine2="                    ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="92"
+            column="21"/>
     </issue>
 
     <issue
@@ -889,7 +1033,9 @@
         errorLine1="                } else if (OPTION_IDS[i] == ACTION_ID_SWITCH_LEGACY_OFF) {"
         errorLine2="                           ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="96"
+            column="28"/>
     </issue>
 
     <issue
@@ -898,7 +1044,9 @@
         errorLine1="                addCheckedAction(actions, OPTION_IDS[i], OPTION_NAMES[i],"
         errorLine2="                                          ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="101"
+            column="43"/>
     </issue>
 
     <issue
@@ -907,7 +1055,9 @@
         errorLine1="                addCheckedAction(actions, OPTION_IDS[i], OPTION_NAMES[i],"
         errorLine2="                                                         ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="101"
+            column="58"/>
     </issue>
 
     <issue
@@ -916,7 +1066,9 @@
         errorLine1="                addCheckedAction(actions, OPTION_IDS[i], OPTION_NAMES[i],"
         errorLine2="                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="101"
+            column="17"/>
     </issue>
 
     <issue
@@ -925,7 +1077,9 @@
         errorLine1="                        OPTION_DESCRIPTIONS[i], checked);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="102"
+            column="25"/>
     </issue>
 
     <issue
@@ -934,7 +1088,9 @@
         errorLine1="                DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(0);"
         errorLine2="                                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="104"
+            column="63"/>
     </issue>
 
     <issue
@@ -943,7 +1099,9 @@
         errorLine1="                    actions.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="109"
+            column="46"/>
     </issue>
 
     <issue
@@ -952,7 +1110,9 @@
         errorLine1="                    dor.setItem(mPhotoItem.getTitle() + &quot;(Owned)&quot;);"
         errorLine2="                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="112"
+            column="33"/>
     </issue>
 
     <issue
@@ -961,7 +1121,9 @@
         errorLine1="                    actions.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="119"
+            column="46"/>
     </issue>
 
     <issue
@@ -970,7 +1132,9 @@
         errorLine1="                    dor.setItem(mPhotoItem.getTitle() + &quot;(Rented)&quot;);"
         errorLine2="                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="121"
+            column="33"/>
     </issue>
 
     <issue
@@ -979,7 +1143,9 @@
         errorLine1="                DetailsOverviewRow dor = new DetailsOverviewRow(mPhotoItem.getTitle());"
         errorLine2="                                                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="193"
+            column="65"/>
     </issue>
 
     <issue
@@ -988,7 +1154,9 @@
         errorLine1="                        mPhotoItem.getImageResourceId(), context.getTheme()));"
         errorLine2="                        ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="195"
+            column="25"/>
     </issue>
 
     <issue
@@ -997,7 +1165,9 @@
         errorLine1="                adapter.set(ACTION_RENT, mActionRent);"
         errorLine2="                                         ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="197"
+            column="42"/>
     </issue>
 
     <issue
@@ -1006,7 +1176,9 @@
         errorLine1="                adapter.set(ACTION_BUY, mActionBuy);"
         errorLine2="                                        ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="198"
+            column="41"/>
     </issue>
 
     <issue
@@ -1015,7 +1187,9 @@
         errorLine1="                mRowsAdapter.add(0, dor);"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="200"
+            column="17"/>
     </issue>
 
     <issue
@@ -1024,7 +1198,9 @@
         errorLine1="                    mRowsAdapter.add(new ListRow(header, listRowAdapter));"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="215"
+            column="21"/>
     </issue>
 
     <issue
@@ -1033,7 +1209,9 @@
         errorLine1="            addEditableAction(actions, NEW_PAYMENT, &quot;Input credit card number&quot;, &quot;&quot;,"
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="292"
+            column="13"/>
     </issue>
 
     <issue
@@ -1042,7 +1220,9 @@
         errorLine1="            addDatePickerAction(actions, PAYMENT_EXPIRE, &quot;Exp:&quot;);"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="295"
+            column="13"/>
     </issue>
 
     <issue
@@ -1051,7 +1231,9 @@
         errorLine1="            addEditableAction(getActivity(), actions, FIRST_NAME, &quot;Pat&quot;, &quot;Your first name&quot;);"
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="420"
+            column="13"/>
     </issue>
 
     <issue
@@ -1060,7 +1242,9 @@
         errorLine1="            addEditableAction(getActivity(), actions, LAST_NAME, &quot;Smith&quot;, &quot;Your last name&quot;);"
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="421"
+            column="13"/>
     </issue>
 
     <issue
@@ -1069,7 +1253,9 @@
         errorLine1="            updatePaymentAction(addAction(actions, PAYMENT, &quot;Select Payment&quot;, &quot;&quot;, subActions));"
         errorLine2="                                ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="423"
+            column="33"/>
     </issue>
 
     <issue
@@ -1078,7 +1264,9 @@
         errorLine1="            addEditableDescriptionAction(actions, PASSWORD, &quot;Password&quot;, &quot;&quot;, &quot;&quot;,"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="424"
+            column="13"/>
     </issue>
 
     <issue
@@ -1087,7 +1275,9 @@
         errorLine1="                addCheckedAction(subActions, -1, sCards.get(i), &quot;&quot;,"
         errorLine2="                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="449"
+            column="17"/>
     </issue>
 
     <issue
@@ -1096,7 +1286,9 @@
         errorLine1="            addAction(subActions, NEW_PAYMENT, &quot;Add New Card&quot;, &quot;&quot;);"
         errorLine2="            ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="455"
+            column="13"/>
     </issue>
 
     <issue
@@ -1105,7 +1297,9 @@
         errorLine1="            for (int i = 0; i &lt; OPTION_NAMES.length; i++) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="570"
+            column="33"/>
     </issue>
 
     <issue
@@ -1114,7 +1308,9 @@
         errorLine1="                addCheckedAction(actions, RADIO_ID_BASE + i, OPTION_NAMES[i],"
         errorLine2="                                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="571"
+            column="62"/>
     </issue>
 
     <issue
@@ -1123,7 +1319,9 @@
         errorLine1="                addCheckedAction(actions, RADIO_ID_BASE + i, OPTION_NAMES[i],"
         errorLine2="                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="571"
+            column="17"/>
     </issue>
 
     <issue
@@ -1132,7 +1330,9 @@
         errorLine1="                        OPTION_DESCRIPTIONS[i], GuidedAction.DEFAULT_CHECK_SET_ID);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="572"
+            column="25"/>
     </issue>
 
     <issue
@@ -1141,7 +1341,9 @@
         errorLine1="            for (int i = 0; i &lt; OPTION_NAMES.length; i++) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="577"
+            column="33"/>
     </issue>
 
     <issue
@@ -1150,7 +1352,9 @@
         errorLine1="                addCheckedAction(actions, CHECKBOX_ID_BASE + i, OPTION_NAMES[i],"
         errorLine2="                                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="578"
+            column="65"/>
     </issue>
 
     <issue
@@ -1159,7 +1363,9 @@
         errorLine1="                addCheckedAction(actions, CHECKBOX_ID_BASE + i, OPTION_NAMES[i],"
         errorLine2="                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="578"
+            column="17"/>
     </issue>
 
     <issue
@@ -1168,7 +1374,9 @@
         errorLine1="                        OPTION_DESCRIPTIONS[i], GuidedAction.CHECKBOX_CHECK_SET_ID);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="579"
+            column="25"/>
     </issue>
 
     <issue
@@ -1177,7 +1385,9 @@
         errorLine1="            String description = &quot;You chose: &quot; + OPTION_NAMES[(int) getOption()];"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="622"
+            column="50"/>
     </issue>
 
     <issue
@@ -1186,7 +1396,9 @@
         errorLine1="            addAction(actions, BACK, &quot;Start Over&quot;, &quot;Let&apos;s try this again...&quot;);"
         errorLine2="            ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="635"
+            column="13"/>
     </issue>
 
     <issue
@@ -1195,7 +1407,9 @@
         errorLine1="            addEditableAction(actions, NEW_PAYMENT, &quot;Input credit card number&quot;, &quot;&quot;,"
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="294"
+            column="13"/>
     </issue>
 
     <issue
@@ -1204,7 +1418,9 @@
         errorLine1="            addDatePickerAction(actions, PAYMENT_EXPIRE, &quot;Exp:&quot;);"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="297"
+            column="13"/>
     </issue>
 
     <issue
@@ -1213,7 +1429,9 @@
         errorLine1="            addEditableAction(getActivity(), actions, FIRST_NAME, &quot;Pat&quot;, &quot;Your first name&quot;);"
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="422"
+            column="13"/>
     </issue>
 
     <issue
@@ -1222,7 +1440,9 @@
         errorLine1="            addEditableAction(getActivity(), actions, LAST_NAME, &quot;Smith&quot;, &quot;Your last name&quot;);"
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="423"
+            column="13"/>
     </issue>
 
     <issue
@@ -1231,7 +1451,9 @@
         errorLine1="            updatePaymentAction(addAction(actions, PAYMENT, &quot;Select Payment&quot;, &quot;&quot;, subActions));"
         errorLine2="                                ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="425"
+            column="33"/>
     </issue>
 
     <issue
@@ -1240,7 +1462,9 @@
         errorLine1="            addEditableDescriptionAction(actions, PASSWORD, &quot;Password&quot;, &quot;&quot;, &quot;&quot;,"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="426"
+            column="13"/>
     </issue>
 
     <issue
@@ -1249,7 +1473,9 @@
         errorLine1="                addCheckedAction(subActions, -1, sCards.get(i), &quot;&quot;,"
         errorLine2="                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="451"
+            column="17"/>
     </issue>
 
     <issue
@@ -1258,7 +1484,9 @@
         errorLine1="            addAction(subActions, NEW_PAYMENT, &quot;Add New Card&quot;, &quot;&quot;);"
         errorLine2="            ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="457"
+            column="13"/>
     </issue>
 
     <issue
@@ -1267,7 +1495,9 @@
         errorLine1="            for (int i = 0; i &lt; OPTION_NAMES.length; i++) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="572"
+            column="33"/>
     </issue>
 
     <issue
@@ -1276,7 +1506,9 @@
         errorLine1="                addCheckedAction(actions, RADIO_ID_BASE + i, OPTION_NAMES[i],"
         errorLine2="                                                             ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="573"
+            column="62"/>
     </issue>
 
     <issue
@@ -1285,7 +1517,9 @@
         errorLine1="                addCheckedAction(actions, RADIO_ID_BASE + i, OPTION_NAMES[i],"
         errorLine2="                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="573"
+            column="17"/>
     </issue>
 
     <issue
@@ -1294,7 +1528,9 @@
         errorLine1="                        OPTION_DESCRIPTIONS[i], GuidedAction.DEFAULT_CHECK_SET_ID);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="574"
+            column="25"/>
     </issue>
 
     <issue
@@ -1303,7 +1539,9 @@
         errorLine1="            for (int i = 0; i &lt; OPTION_NAMES.length; i++) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="579"
+            column="33"/>
     </issue>
 
     <issue
@@ -1312,7 +1550,9 @@
         errorLine1="                addCheckedAction(actions, CHECKBOX_ID_BASE + i, OPTION_NAMES[i],"
         errorLine2="                                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="580"
+            column="65"/>
     </issue>
 
     <issue
@@ -1321,7 +1561,9 @@
         errorLine1="                addCheckedAction(actions, CHECKBOX_ID_BASE + i, OPTION_NAMES[i],"
         errorLine2="                ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="580"
+            column="17"/>
     </issue>
 
     <issue
@@ -1330,7 +1572,9 @@
         errorLine1="                        OPTION_DESCRIPTIONS[i], GuidedAction.CHECKBOX_CHECK_SET_ID);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="581"
+            column="25"/>
     </issue>
 
     <issue
@@ -1339,7 +1583,9 @@
         errorLine1="            String description = &quot;You chose: &quot; + OPTION_NAMES[(int) getOption()];"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="624"
+            column="50"/>
     </issue>
 
     <issue
@@ -1348,7 +1594,9 @@
         errorLine1="            addAction(actions, BACK, &quot;Start Over&quot;, &quot;Let&apos;s try this again...&quot;);"
         errorLine2="            ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="637"
+            column="13"/>
     </issue>
 
     <issue
@@ -1357,7 +1605,9 @@
         errorLine1="            mHorizontalGridView.getAdapter().notifyDataSetChanged();"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+            line="114"
+            column="13"/>
     </issue>
 
     <issue
@@ -1366,7 +1616,9 @@
         errorLine1="            textView.setOnFocusChangeListener(mItemFocusChangeListener);"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+            line="136"
+            column="47"/>
     </issue>
 
     <issue
@@ -1375,7 +1627,9 @@
         errorLine1="            textView.setOnClickListener(mItemClickListener);"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+            line="137"
+            column="41"/>
     </issue>
 
     <issue
@@ -1384,7 +1638,9 @@
         errorLine1="                            if (isPlaying()) {"
         errorLine2="                                ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="95"
+            column="33"/>
     </issue>
 
     <issue
@@ -1393,7 +1649,9 @@
         errorLine1="                                audioFocusLossHandler();"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="96"
+            column="33"/>
     </issue>
 
     <issue
@@ -1402,7 +1660,9 @@
         errorLine1="                            if (isPlaying()) {"
         errorLine2="                                ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="100"
+            column="33"/>
     </issue>
 
     <issue
@@ -1411,7 +1671,9 @@
         errorLine1="                                audioLossFocusTransientHandler();"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="101"
+            column="33"/>
     </issue>
 
     <issue
@@ -1420,7 +1682,9 @@
         errorLine1="                            if (isPlaying()) {"
         errorLine2="                                ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="105"
+            column="33"/>
     </issue>
 
     <issue
@@ -1429,7 +1693,9 @@
         errorLine1="                                audioLossFocusTransientCanDuckHanlder();"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="106"
+            column="33"/>
     </issue>
 
     <issue
@@ -1438,7 +1704,9 @@
         errorLine1="                            if (!isPlaying()) {"
         errorLine2="                                 ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="110"
+            column="34"/>
     </issue>
 
     <issue
@@ -1447,7 +1715,9 @@
         errorLine1="                                audioFocusGainHandler();"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="111"
+            column="33"/>
     </issue>
 
     <issue
@@ -1456,7 +1726,9 @@
         errorLine1="    private Handler mMediaPlayerHandler = new MediaPlayerAudioHandler();"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="156"
+            column="43"/>
     </issue>
 
     <issue
@@ -1465,7 +1737,9 @@
         errorLine1="            mPlayer.stop();"
         errorLine2="            ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="177"
+            column="13"/>
     </issue>
 
     <issue
@@ -1474,7 +1748,9 @@
         errorLine1="            mMediaSession.setPlaybackState(createPlaybackStateBuilder("
         errorLine2="            ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="178"
+            column="13"/>
     </issue>
 
     <issue
@@ -1483,7 +1759,9 @@
         errorLine1="            mMediaSession.setPlaybackState(createPlaybackStateBuilder("
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="178"
+            column="44"/>
     </issue>
 
     <issue
@@ -1492,7 +1770,9 @@
         errorLine1="                    mMediaPlayerHandler.obtainMessage(FOCUS_CHANGE, focusChange, 0).sendToTarget();"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="191"
+            column="21"/>
     </issue>
 
     <issue
@@ -1501,7 +1781,9 @@
         errorLine1="            mMediaSession.setCallback(new MediaSessionCallback());"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="220"
+            column="39"/>
     </issue>
 
     <issue
@@ -1510,7 +1792,9 @@
         errorLine1="                mInitialized = true;"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="341"
+            column="17"/>
     </issue>
 
     <issue
@@ -1519,7 +1803,9 @@
         errorLine1="                notifyUiWhenPlayerIsPrepared();"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="344"
+            column="17"/>
     </issue>
 
     <issue
@@ -1528,7 +1814,9 @@
         errorLine1="                onMediaSessionMetaDataChanged();"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="348"
+            column="17"/>
     </issue>
 
     <issue
@@ -1537,7 +1825,9 @@
         errorLine1="                mMediaSession.setPlaybackState(createPlaybackStateBuilder("
         errorLine2="                ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="349"
+            column="17"/>
     </issue>
 
     <issue
@@ -1546,7 +1836,9 @@
         errorLine1="                mMediaSession.setPlaybackState(createPlaybackStateBuilder("
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="349"
+            column="48"/>
     </issue>
 
     <issue
@@ -1555,7 +1847,9 @@
         errorLine1="                    PlaybackStateCompat.Builder builder = createPlaybackStateBuilder("
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="359"
+            column="59"/>
     </issue>
 
     <issue
@@ -1564,7 +1858,9 @@
         errorLine1="                    mMediaSession.setPlaybackState(builder.build());"
         errorLine2="                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="363"
+            column="21"/>
     </issue>
 
     <issue
@@ -1573,7 +1869,9 @@
         errorLine1="                mFastForwardSpeedFactorIndex = 0;"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="416"
+            column="17"/>
     </issue>
 
     <issue
@@ -1582,7 +1880,9 @@
         errorLine1="                mRewindSpeedFactorIndex = 0;"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="417"
+            column="17"/>
     </issue>
 
     <issue
@@ -1591,7 +1891,9 @@
         errorLine1="                mPlayer.setPlaybackParams(mPlayer.getPlaybackParams().setSpeed("
         errorLine2="                ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="419"
+            column="17"/>
     </issue>
 
     <issue
@@ -1600,7 +1902,9 @@
         errorLine1="                mPlayer.setPlaybackParams(mPlayer.getPlaybackParams().setSpeed("
         errorLine2="                                          ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="419"
+            column="43"/>
     </issue>
 
     <issue
@@ -1609,7 +1913,9 @@
         errorLine1="                        mFastForwardSpeedFactors[mFastForwardSpeedFactorIndex]));"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="420"
+            column="50"/>
     </issue>
 
     <issue
@@ -1618,7 +1924,9 @@
         errorLine1="                        mFastForwardSpeedFactors[mFastForwardSpeedFactorIndex]));"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="420"
+            column="25"/>
     </issue>
 
     <issue
@@ -1627,7 +1935,9 @@
         errorLine1="                mPlayer.pause();"
         errorLine2="                ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="422"
+            column="17"/>
     </issue>
 
     <issue
@@ -1636,7 +1946,9 @@
         errorLine1="                mMediaSession.setPlaybackState(createPlaybackStateBuilder("
         errorLine2="                ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="423"
+            column="17"/>
     </issue>
 
     <issue
@@ -1645,7 +1957,9 @@
         errorLine1="                mMediaSession.setPlaybackState(createPlaybackStateBuilder("
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="423"
+            column="48"/>
     </issue>
 
     <issue
@@ -1654,7 +1968,9 @@
         errorLine1="                if (mRepeatState == MEDIA_ACTION_REPEAT_ALL"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="426"
+            column="21"/>
     </issue>
 
     <issue
@@ -1663,7 +1979,9 @@
         errorLine1="                        &amp;&amp; mCurrentIndex == mMediaItemList.size() - 1) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="427"
+            column="28"/>
     </issue>
 
     <issue
@@ -1672,7 +1990,9 @@
         errorLine1="                    if (mShuffleMode == PlaybackStateCompat.SHUFFLE_MODE_NONE) {"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="430"
+            column="25"/>
     </issue>
 
     <issue
@@ -1681,7 +2001,9 @@
         errorLine1="                        mCurrentIndex = 0;"
         errorLine2="                        ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="431"
+            column="25"/>
     </issue>
 
     <issue
@@ -1690,7 +2012,9 @@
         errorLine1="                        mCurrentIndex = generateMediaItemIndex();"
         errorLine2="                        ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="434"
+            column="25"/>
     </issue>
 
     <issue
@@ -1699,7 +2023,9 @@
         errorLine1="                        mCurrentIndex = generateMediaItemIndex();"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="434"
+            column="41"/>
     </issue>
 
     <issue
@@ -1708,7 +2034,9 @@
         errorLine1="                    mCurrentMediaItem = mMediaItemList.get(mCurrentIndex);"
         errorLine2="                                                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="436"
+            column="60"/>
     </issue>
 
     <issue
@@ -1717,7 +2045,9 @@
         errorLine1="                    mCurrentMediaItem = mMediaItemList.get(mCurrentIndex);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="436"
+            column="21"/>
     </issue>
 
     <issue
@@ -1726,7 +2056,9 @@
         errorLine1="                    setDataSource();"
         errorLine2="                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="439"
+            column="21"/>
     </issue>
 
     <issue
@@ -1735,7 +2067,9 @@
         errorLine1="                } else if (mRepeatState == MEDIA_ACTION_REPEAT_ONE) {"
         errorLine2="                           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="440"
+            column="28"/>
     </issue>
 
     <issue
@@ -1744,7 +2078,9 @@
         errorLine1="                    mPlayer.start();"
         errorLine2="                    ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="444"
+            column="21"/>
     </issue>
 
     <issue
@@ -1753,7 +2089,9 @@
         errorLine1="                    mMediaSession.setPlaybackState(createPlaybackStateBuilder("
         errorLine2="                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="445"
+            column="21"/>
     </issue>
 
     <issue
@@ -1762,7 +2100,9 @@
         errorLine1="                    mMediaSession.setPlaybackState(createPlaybackStateBuilder("
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="445"
+            column="52"/>
     </issue>
 
     <issue
@@ -1771,7 +2111,9 @@
         errorLine1="                } else if (mCurrentIndex &lt; mMediaItemList.size() - 1) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="447"
+            column="28"/>
     </issue>
 
     <issue
@@ -1780,7 +2122,9 @@
         errorLine1="                    if (mShuffleMode == PlaybackStateCompat.SHUFFLE_MODE_NONE) {"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="448"
+            column="25"/>
     </issue>
 
     <issue
@@ -1789,7 +2133,9 @@
         errorLine1="                        mCurrentIndex++;"
         errorLine2="                        ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="449"
+            column="25"/>
     </issue>
 
     <issue
@@ -1798,7 +2144,9 @@
         errorLine1="                        mCurrentIndex = generateMediaItemIndex();"
         errorLine2="                        ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="451"
+            column="25"/>
     </issue>
 
     <issue
@@ -1807,7 +2155,9 @@
         errorLine1="                        mCurrentIndex = generateMediaItemIndex();"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="451"
+            column="41"/>
     </issue>
 
     <issue
@@ -1816,7 +2166,9 @@
         errorLine1="                    mCurrentMediaItem = mMediaItemList.get(mCurrentIndex);"
         errorLine2="                                                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="453"
+            column="60"/>
     </issue>
 
     <issue
@@ -1825,7 +2177,9 @@
         errorLine1="                    mCurrentMediaItem = mMediaItemList.get(mCurrentIndex);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="453"
+            column="21"/>
     </issue>
 
     <issue
@@ -1834,7 +2188,9 @@
         errorLine1="                    setDataSource();"
         errorLine2="                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="456"
+            column="21"/>
     </issue>
 
     <issue
@@ -1843,7 +2199,9 @@
         errorLine1="                    mMediaSession.setPlaybackState(createPlaybackStateBuilder("
         errorLine2="                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="461"
+            column="21"/>
     </issue>
 
     <issue
@@ -1852,7 +2210,9 @@
         errorLine1="                    mMediaSession.setPlaybackState(createPlaybackStateBuilder("
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="461"
+            column="52"/>
     </issue>
 
     <issue
@@ -1861,7 +2221,9 @@
         errorLine1="                        mBufferedProgress = (long) getDuration() * percent / 100;"
         errorLine2="                        ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="472"
+            column="25"/>
     </issue>
 
     <issue
@@ -1870,7 +2232,9 @@
         errorLine1="                        mBufferedProgress = (long) getDuration() * percent / 100;"
         errorLine2="                                                   ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="472"
+            column="52"/>
     </issue>
 
     <issue
@@ -1879,7 +2243,9 @@
         errorLine1="                        PlaybackStateCompat.Builder builder = createPlaybackStateBuilder("
         errorLine2="                                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="473"
+            column="63"/>
     </issue>
 
     <issue
@@ -1888,7 +2254,9 @@
         errorLine1="                        builder.setBufferedPosition(mBufferedProgress);"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="475"
+            column="53"/>
     </issue>
 
     <issue
@@ -1897,7 +2265,9 @@
         errorLine1="                        mMediaSession.setPlaybackState(builder.build());"
         errorLine2="                        ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="476"
+            column="25"/>
     </issue>
 
     <issue
@@ -1906,7 +2276,9 @@
         errorLine1="            play();"
         errorLine2="            ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="518"
+            column="13"/>
     </issue>
 
     <issue
@@ -1915,7 +2287,9 @@
         errorLine1="            pause();"
         errorLine2="            ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="523"
+            column="13"/>
     </issue>
 
     <issue
@@ -1924,7 +2298,9 @@
         errorLine1="            next();"
         errorLine2="            ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="528"
+            column="13"/>
     </issue>
 
     <issue
@@ -1933,7 +2309,9 @@
         errorLine1="            previous();"
         errorLine2="            ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="533"
+            column="13"/>
     </issue>
 
     <issue
@@ -1942,7 +2320,9 @@
         errorLine1="            stop();"
         errorLine2="            ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="538"
+            column="13"/>
     </issue>
 
     <issue
@@ -1951,7 +2331,9 @@
         errorLine1="            seekTo((int) pos);"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="545"
+            column="13"/>
     </issue>
 
     <issue
@@ -1960,7 +2342,9 @@
         errorLine1="            fastForward();"
         errorLine2="            ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="550"
+            column="13"/>
     </issue>
 
     <issue
@@ -1969,7 +2353,9 @@
         errorLine1="            rewind();"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="555"
+            column="13"/>
     </issue>
 
     <issue
@@ -1978,7 +2364,9 @@
         errorLine1="            setShuffleMode(shuffleMode);"
         errorLine2="            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="565"
+            column="13"/>
     </issue>
 
     <issue
@@ -1987,7 +2375,9 @@
         errorLine1="            mPlaybackService = binder.getService();"
         errorLine2="            ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="188"
+            column="13"/>
     </issue>
 
     <issue
@@ -1996,7 +2386,9 @@
         errorLine1="            mPlaybackService.registerCallback(MusicPlayerFragment.this);"
         errorLine2="            ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="191"
+            column="13"/>
     </issue>
 
     <issue
@@ -2005,7 +2397,9 @@
         errorLine1="            mPlaybackService.setMediaList(mSongMetaDataList, false);"
         errorLine2="            ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="197"
+            column="13"/>
     </issue>
 
     <issue
@@ -2014,7 +2408,9 @@
         errorLine1="            mPlaybackService.setMediaList(mSongMetaDataList, false);"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="197"
+            column="43"/>
     </issue>
 
     <issue
@@ -2023,7 +2419,9 @@
         errorLine1="            mPlaybackService.setFastForwardSpeedFactors(fastForwardSpeed);"
         errorLine2="            ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="200"
+            column="13"/>
     </issue>
 
     <issue
@@ -2032,7 +2430,9 @@
         errorLine1="            mPlaybackService.setRewindSpeedFactors(rewindSpeed);"
         errorLine2="            ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="201"
+            column="13"/>
     </issue>
 
     <issue
@@ -2041,7 +2441,9 @@
         errorLine1="            mMediaSession = mPlaybackService.getMediaSession();"
         errorLine2="            ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="204"
+            column="13"/>
     </issue>
 
     <issue
@@ -2050,7 +2452,9 @@
         errorLine1="            mMediaSession = mPlaybackService.getMediaSession();"
         errorLine2="                            ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="204"
+            column="29"/>
     </issue>
 
     <issue
@@ -2059,7 +2463,9 @@
         errorLine1="            mController = new MediaControllerCompat(MusicPlayerFragment.this.getActivity(),"
         errorLine2="            ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="206"
+            column="13"/>
     </issue>
 
     <issue
@@ -2068,7 +2474,9 @@
         errorLine1="                    mMediaSession);"
         errorLine2="                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="207"
+            column="21"/>
     </issue>
 
     <issue
@@ -2077,7 +2485,9 @@
         errorLine1="            mAdapter = new MediaControllerAdapter(mController);"
         errorLine2="            ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="208"
+            column="13"/>
     </issue>
 
     <issue
@@ -2086,7 +2496,9 @@
         errorLine1="            mAdapter = new MediaControllerAdapter(mController);"
         errorLine2="                                                  ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="208"
+            column="51"/>
     </issue>
 
     <issue
@@ -2095,7 +2507,9 @@
         errorLine1="            mGlue = new PlaybackBannerMusicPlayerControlGlue&lt;>(getActivity(), fastForwardSpeed,"
         errorLine2="                    ^">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="209"
+            column="21"/>
     </issue>
 
     <issue
@@ -2104,7 +2518,9 @@
         errorLine1="            mGlue = new PlaybackBannerMusicPlayerControlGlue&lt;>(getActivity(), fastForwardSpeed,"
         errorLine2="            ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="209"
+            column="13"/>
     </issue>
 
     <issue
@@ -2113,7 +2529,9 @@
         errorLine1="                    mAdapter);"
         errorLine2="                    ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="211"
+            column="21"/>
     </issue>
 
     <issue
@@ -2122,7 +2540,9 @@
         errorLine1="            mGlue.setHost(new PlaybackFragmentGlueHost(MusicPlayerFragment.this));"
         errorLine2="            ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="215"
+            column="13"/>
     </issue>
 
     <issue
@@ -2131,7 +2551,9 @@
         errorLine1="            mPlaybackService = null;"
         errorLine2="            ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="220"
+            column="13"/>
     </issue>
 
     <issue
@@ -2140,7 +2562,9 @@
         errorLine1="                DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(0);"
         errorLine2="                                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="159"
+            column="63"/>
     </issue>
 
     <issue
@@ -2149,7 +2573,9 @@
         errorLine1="                    actions.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="164"
+            column="46"/>
     </issue>
 
     <issue
@@ -2158,7 +2584,9 @@
         errorLine1="                    dor.setItem(getDisplayTitle(mPhotoItem.getTitle()));"
         errorLine2="                                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="169"
+            column="49"/>
     </issue>
 
     <issue
@@ -2167,7 +2595,9 @@
         errorLine1="                    if (TEST_BACKGROUND_PLAYER) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="172"
+            column="25"/>
     </issue>
 
     <issue
@@ -2176,7 +2606,9 @@
         errorLine1="                            mDetailsBackground.switchToVideo();"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="175"
+            column="29"/>
     </issue>
 
     <issue
@@ -2185,7 +2617,9 @@
         errorLine1="                    actions.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="185"
+            column="46"/>
     </issue>
 
     <issue
@@ -2194,7 +2628,9 @@
         errorLine1="                    dor.setItem(getDisplayTitle(mPhotoItem.getTitle()));"
         errorLine2="                                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="188"
+            column="49"/>
     </issue>
 
     <issue
@@ -2203,7 +2639,9 @@
         errorLine1="                    if (TEST_BACKGROUND_PLAYER) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="189"
+            column="25"/>
     </issue>
 
     <issue
@@ -2212,7 +2650,9 @@
         errorLine1="                        mDetailsBackground.switchToVideo();"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="191"
+            column="25"/>
     </issue>
 
     <issue
@@ -2221,7 +2661,9 @@
         errorLine1="                    if (TEST_BACKGROUND_PLAYER) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="197"
+            column="25"/>
     </issue>
 
     <issue
@@ -2230,7 +2672,9 @@
         errorLine1="                        mDetailsBackground.switchToVideo();"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="198"
+            column="25"/>
     </issue>
 
     <issue
@@ -2239,7 +2683,9 @@
         errorLine1="                        getDisplayTitle(mPhotoItem.getTitle()));"
         errorLine2="                                        ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="293"
+            column="41"/>
     </issue>
 
     <issue
@@ -2248,7 +2694,9 @@
         errorLine1="                        mPhotoItem.getImageResourceId(), context.getTheme()));"
         errorLine2="                        ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="295"
+            column="25"/>
     </issue>
 
     <issue
@@ -2257,7 +2705,9 @@
         errorLine1="                        adapter.set(ACTION_RENT, mActionRent);"
         errorLine2="                                                 ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="299"
+            column="50"/>
     </issue>
 
     <issue
@@ -2266,7 +2716,9 @@
         errorLine1="                        adapter.set(ACTION_BUY, mActionBuy);"
         errorLine2="                                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="300"
+            column="49"/>
     </issue>
 
     <issue
@@ -2275,7 +2727,9 @@
         errorLine1="                        adapter.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                                 ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="303"
+            column="50"/>
     </issue>
 
     <issue
@@ -2284,7 +2738,9 @@
         errorLine1="                        adapter.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                                 ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="306"
+            column="50"/>
     </issue>
 
     <issue
@@ -2293,7 +2749,9 @@
         errorLine1="                        adapter.set(ACTION_BUY, mActionBuy);"
         errorLine2="                                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="307"
+            column="49"/>
     </issue>
 
     <issue
@@ -2302,7 +2760,9 @@
         errorLine1="                mRowsAdapter.add(0, dor);"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="315"
+            column="17"/>
     </issue>
 
     <issue
@@ -2311,7 +2771,9 @@
         errorLine1="                if (TEST_SHARED_ELEMENT_TRANSITION) {"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="317"
+            column="21"/>
     </issue>
 
     <issue
@@ -2320,7 +2782,9 @@
         errorLine1="                    if (mHelper != null &amp;&amp; !mHelper.getAutoStartSharedElementTransition()) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="318"
+            column="25"/>
     </issue>
 
     <issue
@@ -2329,7 +2793,9 @@
         errorLine1="                    if (mHelper != null &amp;&amp; !mHelper.getAutoStartSharedElementTransition()) {"
         errorLine2="                                            ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="318"
+            column="45"/>
     </issue>
 
     <issue
@@ -2338,7 +2804,9 @@
         errorLine1="                        mHelper.startPostponedEnterTransition();"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="319"
+            column="25"/>
     </issue>
 
     <issue
@@ -2347,7 +2815,9 @@
         errorLine1="                    mRowsAdapter.add(new ListRow(header, listRowAdapter));"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="338"
+            column="21"/>
     </issue>
 
     <issue
@@ -2356,7 +2826,9 @@
         errorLine1="                        mDetailsBackground.setCoverBitmap(bitmap);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="354"
+            column="25"/>
     </issue>
 
     <issue
@@ -2365,7 +2837,9 @@
         errorLine1="                DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(0);"
         errorLine2="                                                              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="162"
+            column="63"/>
     </issue>
 
     <issue
@@ -2374,7 +2848,9 @@
         errorLine1="                    actions.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="167"
+            column="46"/>
     </issue>
 
     <issue
@@ -2383,7 +2859,9 @@
         errorLine1="                    dor.setItem(getDisplayTitle(mPhotoItem.getTitle()));"
         errorLine2="                                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="172"
+            column="49"/>
     </issue>
 
     <issue
@@ -2392,7 +2870,9 @@
         errorLine1="                    if (TEST_BACKGROUND_PLAYER) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="175"
+            column="25"/>
     </issue>
 
     <issue
@@ -2401,7 +2881,9 @@
         errorLine1="                            mDetailsBackground.switchToVideo();"
         errorLine2="                            ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="178"
+            column="29"/>
     </issue>
 
     <issue
@@ -2410,7 +2892,9 @@
         errorLine1="                    actions.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                             ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="188"
+            column="46"/>
     </issue>
 
     <issue
@@ -2419,7 +2903,9 @@
         errorLine1="                    dor.setItem(getDisplayTitle(mPhotoItem.getTitle()));"
         errorLine2="                                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="191"
+            column="49"/>
     </issue>
 
     <issue
@@ -2428,7 +2914,9 @@
         errorLine1="                    if (TEST_BACKGROUND_PLAYER) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="192"
+            column="25"/>
     </issue>
 
     <issue
@@ -2437,7 +2925,9 @@
         errorLine1="                        mDetailsBackground.switchToVideo();"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="194"
+            column="25"/>
     </issue>
 
     <issue
@@ -2446,7 +2936,9 @@
         errorLine1="                    if (TEST_BACKGROUND_PLAYER) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="200"
+            column="25"/>
     </issue>
 
     <issue
@@ -2455,7 +2947,9 @@
         errorLine1="                        mDetailsBackground.switchToVideo();"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="201"
+            column="25"/>
     </issue>
 
     <issue
@@ -2464,7 +2958,9 @@
         errorLine1="                        getDisplayTitle(mPhotoItem.getTitle()));"
         errorLine2="                                        ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="296"
+            column="41"/>
     </issue>
 
     <issue
@@ -2473,7 +2969,9 @@
         errorLine1="                        mPhotoItem.getImageResourceId(), context.getTheme()));"
         errorLine2="                        ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="298"
+            column="25"/>
     </issue>
 
     <issue
@@ -2482,7 +2980,9 @@
         errorLine1="                        adapter.set(ACTION_RENT, mActionRent);"
         errorLine2="                                                 ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="302"
+            column="50"/>
     </issue>
 
     <issue
@@ -2491,7 +2991,9 @@
         errorLine1="                        adapter.set(ACTION_BUY, mActionBuy);"
         errorLine2="                                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="303"
+            column="49"/>
     </issue>
 
     <issue
@@ -2500,7 +3002,9 @@
         errorLine1="                        adapter.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                                 ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="306"
+            column="50"/>
     </issue>
 
     <issue
@@ -2509,7 +3013,9 @@
         errorLine1="                        adapter.set(ACTION_PLAY, mActionPlay);"
         errorLine2="                                                 ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="309"
+            column="50"/>
     </issue>
 
     <issue
@@ -2518,7 +3024,9 @@
         errorLine1="                        adapter.set(ACTION_BUY, mActionBuy);"
         errorLine2="                                                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="310"
+            column="49"/>
     </issue>
 
     <issue
@@ -2527,7 +3035,9 @@
         errorLine1="                mRowsAdapter.add(0, dor);"
         errorLine2="                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="318"
+            column="17"/>
     </issue>
 
     <issue
@@ -2536,7 +3046,9 @@
         errorLine1="                if (TEST_SHARED_ELEMENT_TRANSITION) {"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="320"
+            column="21"/>
     </issue>
 
     <issue
@@ -2545,7 +3057,9 @@
         errorLine1="                    if (mHelper != null &amp;&amp; !mHelper.getAutoStartSharedElementTransition()) {"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="321"
+            column="25"/>
     </issue>
 
     <issue
@@ -2554,7 +3068,9 @@
         errorLine1="                    if (mHelper != null &amp;&amp; !mHelper.getAutoStartSharedElementTransition()) {"
         errorLine2="                                            ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="321"
+            column="45"/>
     </issue>
 
     <issue
@@ -2563,7 +3079,9 @@
         errorLine1="                        mHelper.startPostponedEnterTransition();"
         errorLine2="                        ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="322"
+            column="25"/>
     </issue>
 
     <issue
@@ -2572,7 +3090,9 @@
         errorLine1="                    mRowsAdapter.add(new ListRow(header, listRowAdapter));"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="341"
+            column="21"/>
     </issue>
 
     <issue
@@ -2581,7 +3101,9 @@
         errorLine1="                        mDetailsBackground.setCoverBitmap(bitmap);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="357"
+            column="25"/>
     </issue>
 
     <issue
@@ -2590,7 +3112,9 @@
         errorLine1="                ((AnimationDrawable) mContentAnimationView.getDrawable()).start();"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="111"
+            column="38"/>
     </issue>
 
     <issue
@@ -2599,7 +3123,9 @@
         errorLine1="                mContentBackgroundView.setImageResource(CONTENT_BACKGROUNDS[newPage]);"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="127"
+            column="57"/>
     </issue>
 
     <issue
@@ -2608,7 +3134,9 @@
         errorLine1="                mContentBackgroundView.setImageResource(CONTENT_BACKGROUNDS[newPage]);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="127"
+            column="17"/>
     </issue>
 
     <issue
@@ -2617,7 +3145,9 @@
         errorLine1="                mContentAnimationView.setImageResource(CONTENT_ANIMATIONS[newPage]);"
         errorLine2="                                                       ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="128"
+            column="56"/>
     </issue>
 
     <issue
@@ -2626,7 +3156,9 @@
         errorLine1="                mContentAnimationView.setImageResource(CONTENT_ANIMATIONS[newPage]);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="128"
+            column="17"/>
     </issue>
 
     <issue
@@ -2635,7 +3167,9 @@
         errorLine1="                ((AnimationDrawable) mContentAnimationView.getDrawable()).start();"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="135"
+            column="38"/>
     </issue>
 
     <issue
@@ -2644,7 +3178,9 @@
         errorLine1="                ((AnimationDrawable) mContentAnimationView.getDrawable()).start();"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="114"
+            column="38"/>
     </issue>
 
     <issue
@@ -2653,7 +3189,9 @@
         errorLine1="                mContentBackgroundView.setImageResource(CONTENT_BACKGROUNDS[newPage]);"
         errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="130"
+            column="57"/>
     </issue>
 
     <issue
@@ -2662,7 +3200,9 @@
         errorLine1="                mContentBackgroundView.setImageResource(CONTENT_BACKGROUNDS[newPage]);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="130"
+            column="17"/>
     </issue>
 
     <issue
@@ -2671,7 +3211,9 @@
         errorLine1="                mContentAnimationView.setImageResource(CONTENT_ANIMATIONS[newPage]);"
         errorLine2="                                                       ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="131"
+            column="56"/>
     </issue>
 
     <issue
@@ -2680,7 +3222,9 @@
         errorLine1="                mContentAnimationView.setImageResource(CONTENT_ANIMATIONS[newPage]);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="131"
+            column="17"/>
     </issue>
 
     <issue
@@ -2689,7 +3233,9 @@
         errorLine1="                ((AnimationDrawable) mContentAnimationView.getDrawable()).start();"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="138"
+            column="38"/>
     </issue>
 
     <issue
@@ -2698,7 +3244,9 @@
         errorLine1="                            for (int i = 0; i &lt; sData.length; ++i) {"
         errorLine2="                                                ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"/>
+            file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"
+            line="48"
+            column="49"/>
     </issue>
 
     <issue
@@ -2707,7 +3255,9 @@
         errorLine1="                                PhotoItem dataItem = sData[i];"
         errorLine2="                                                     ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"/>
+            file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"
+            line="49"
+            column="54"/>
     </issue>
 
     <issue
@@ -2716,7 +3266,9 @@
         errorLine1="            return new PhotoItem(in);"
         errorLine2="                   ~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoItem.java"
+            line="84"
+            column="20"/>
     </issue>
 
     <issue
@@ -2725,7 +3277,9 @@
         errorLine1="            mHandler.postDelayed(this, getUpdatePeriod());"
         errorLine2="            ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"
+            line="59"
+            column="13"/>
     </issue>
 
     <issue
@@ -2734,7 +3288,9 @@
         errorLine1="                if (mRepeatAction.getIndex() == PlaybackControlsRow.RepeatAction.INDEX_NONE) {"
         errorLine2="                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"
+            line="221"
+            column="21"/>
     </issue>
 
     <issue
@@ -2743,7 +3299,9 @@
         errorLine1="                mStartPosition = 0;"
         errorLine2="                ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"
+            line="226"
+            column="17"/>
     </issue>
 
     <issue
@@ -2752,7 +3310,9 @@
         errorLine1="        mMediaSessionCompat.setCallback(new MediaSessionCallback());"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"
+            line="147"
+            column="41"/>
     </issue>
 
     <issue
@@ -2761,7 +3321,9 @@
         errorLine1="                if (mRepeatAction.getIndex() != PlaybackControlsRow.RepeatAction.INDEX_NONE) {"
         errorLine2="                    ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"
+            line="212"
+            column="21"/>
     </issue>
 
     <issue
@@ -2770,7 +3332,9 @@
         errorLine1="            mHandler.postDelayed(this, 16);"
         errorLine2="            ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlayerAdapter.java"/>
+            file="src/main/java/com/example/android/leanback/PlayerAdapter.java"
+            line="34"
+            column="13"/>
     </issue>
 
     <issue
@@ -2779,7 +3343,9 @@
         errorLine1="                mStartPosition = 0;"
         errorLine2="                ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlayerAdapter.java"/>
+            file="src/main/java/com/example/android/leanback/PlayerAdapter.java"
+            line="78"
+            column="17"/>
     </issue>
 
     <issue
@@ -2788,7 +3354,9 @@
         errorLine1="                mIsPlaying = false;"
         errorLine2="                ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlayerAdapter.java"/>
+            file="src/main/java/com/example/android/leanback/PlayerAdapter.java"
+            line="79"
+            column="17"/>
     </issue>
 
     <issue
@@ -2797,7 +3365,9 @@
         errorLine1="        setOnItemViewClickedListener(new ItemViewClickedListener());"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsFragment.java"
+            line="53"
+            column="38"/>
     </issue>
 
     <issue
@@ -2806,7 +3376,9 @@
         errorLine1="                if (mTitleHelper != null) {"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsFragment.java"
+            line="59"
+            column="21"/>
     </issue>
 
     <issue
@@ -2815,7 +3387,9 @@
         errorLine1="                    mTitleHelper.showTitle(getAdapter() == null || getAdapter().size() == 0 ||"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsFragment.java"
+            line="60"
+            column="21"/>
     </issue>
 
     <issue
@@ -2824,7 +3398,9 @@
         errorLine1="        setOnItemViewClickedListener(new ItemViewClickedListener());"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+            line="59"
+            column="38"/>
     </issue>
 
     <issue
@@ -2833,7 +3409,9 @@
         errorLine1="                if (mTitleHelper != null) {"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+            line="65"
+            column="21"/>
     </issue>
 
     <issue
@@ -2842,7 +3420,9 @@
         errorLine1="                    mTitleHelper.showTitle(getAdapter() == null || getAdapter().size() == 0 ||"
         errorLine2="                    ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+            line="66"
+            column="21"/>
     </issue>
 
     <issue
@@ -2851,7 +3431,9 @@
         errorLine1="                    mMediaPlayerGlue.setSubtitle(&quot;Leanback artist Changed!&quot;);"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+            line="119"
+            column="21"/>
     </issue>
 
     <issue
@@ -2860,7 +3442,9 @@
         errorLine1="                    mMediaPlayerGlue.setTitle(&quot;Leanback team at work&quot;);"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+            line="120"
+            column="21"/>
     </issue>
 
     <issue
@@ -2869,7 +3453,9 @@
         errorLine1="                    mMediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse(uriPath));"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+            line="123"
+            column="21"/>
     </issue>
 
     <issue
@@ -2878,7 +3464,9 @@
         errorLine1="                    loadSeekData(mMediaPlayerGlue);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+            line="124"
+            column="34"/>
     </issue>
 
     <issue
@@ -2887,7 +3475,9 @@
         errorLine1="                    playWhenReady(mMediaPlayerGlue);"
         errorLine2="                                  ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+            line="125"
+            column="35"/>
     </issue>
 
     <issue
@@ -2896,7 +3486,9 @@
         errorLine1="                    mMediaPlayerGlue.removePlayerCallback(this);"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+            line="127"
+            column="21"/>
     </issue>
 
     <issue
@@ -2905,7 +3497,9 @@
         errorLine1="                    mMediaPlayerGlue.setSubtitle(&quot;Leanback artist Changed!&quot;);"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+            line="122"
+            column="21"/>
     </issue>
 
     <issue
@@ -2914,7 +3508,9 @@
         errorLine1="                    mMediaPlayerGlue.setTitle(&quot;Leanback team at work&quot;);"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+            line="123"
+            column="21"/>
     </issue>
 
     <issue
@@ -2923,7 +3519,9 @@
         errorLine1="                    mMediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse(uriPath));"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+            line="126"
+            column="21"/>
     </issue>
 
     <issue
@@ -2932,7 +3530,9 @@
         errorLine1="                    loadSeekData(mMediaPlayerGlue);"
         errorLine2="                                 ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+            line="127"
+            column="34"/>
     </issue>
 
     <issue
@@ -2941,7 +3541,9 @@
         errorLine1="                    playWhenReady(mMediaPlayerGlue);"
         errorLine2="                                  ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+            line="128"
+            column="35"/>
     </issue>
 
     <issue
@@ -2950,7 +3552,9 @@
         errorLine1="                    mMediaPlayerGlue.removePlayerCallback(this);"
         errorLine2="                    ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+            line="130"
+            column="21"/>
     </issue>
 
     <issue
@@ -2959,7 +3563,9 @@
         errorLine1="                    if (DEBUG) Log.v(TAG, &quot;recognizeSpeech&quot;);"
         errorLine2="                        ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchActivity.java"/>
+            file="src/main/java/com/example/android/leanback/SearchActivity.java"
+            line="49"
+            column="25"/>
     </issue>
 
     <issue
@@ -2968,7 +3574,9 @@
         errorLine1="                    startActivityForResult(mFragment.getRecognizerIntent(), REQUEST_SPEECH);"
         errorLine2="                                           ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchActivity.java"/>
+            file="src/main/java/com/example/android/leanback/SearchActivity.java"
+            line="50"
+            column="44"/>
     </issue>
 
     <issue
@@ -2977,7 +3585,9 @@
         errorLine1="        setOnItemViewClickedListener(new ItemViewClickedListener());"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchFragment.java"
+            line="98"
+            column="38"/>
     </issue>
 
     <issue
@@ -2986,7 +3596,9 @@
         errorLine1="            loadRows();"
         errorLine2="            ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchFragment.java"
+            line="161"
+            column="13"/>
     </issue>
 
     <issue
@@ -2995,7 +3607,9 @@
         errorLine1="                    if (DEBUG) Log.v(TAG, &quot;recognizeSpeech&quot;);"
         errorLine2="                        ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"
+            line="52"
+            column="25"/>
     </issue>
 
     <issue
@@ -3004,7 +3618,9 @@
         errorLine1="                    startActivityForResult(mFragment.getRecognizerIntent(), REQUEST_SPEECH);"
         errorLine2="                                           ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"
+            line="53"
+            column="44"/>
     </issue>
 
     <issue
@@ -3013,7 +3629,9 @@
         errorLine1="        setOnItemViewClickedListener(new ItemViewClickedListener());"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+            line="101"
+            column="38"/>
     </issue>
 
     <issue
@@ -3022,7 +3640,9 @@
         errorLine1="            loadRows();"
         errorLine2="            ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+            line="164"
+            column="13"/>
     </issue>
 
     <issue
@@ -3031,7 +3651,9 @@
         errorLine1="                loadData();"
         errorLine2="                ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+            line="70"
+            column="17"/>
     </issue>
 
     <issue
@@ -3040,7 +3662,9 @@
         errorLine1="                mAdapter.callNotifyChanged();"
         errorLine2="                ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+            line="103"
+            column="17"/>
     </issue>
 
     <issue
@@ -3049,7 +3673,9 @@
         errorLine1="                loadData();"
         errorLine2="                ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+            line="73"
+            column="17"/>
     </issue>
 
     <issue
@@ -3058,7 +3684,9 @@
         errorLine1="                mAdapter.callNotifyChanged();"
         errorLine2="                ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+            line="106"
+            column="17"/>
     </issue>
 
     <issue
@@ -3067,7 +3695,9 @@
         errorLine1="        public Bitmap getCache(Object token) {"
         errorLine2="               ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="62"
+            column="16"/>
     </issue>
 
     <issue
@@ -3076,7 +3706,9 @@
         errorLine1="        public Bitmap getCache(Object token) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="62"
+            column="32"/>
     </issue>
 
     <issue
@@ -3085,7 +3717,9 @@
         errorLine1="        public void putCache(Object token, Bitmap bitmap) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="74"
+            column="30"/>
     </issue>
 
     <issue
@@ -3094,7 +3728,9 @@
         errorLine1="        public void putCache(Object token, Bitmap bitmap) {"
         errorLine2="                                           ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="74"
+            column="44"/>
     </issue>
 
     <issue
@@ -3103,7 +3739,9 @@
         errorLine1="        public static BitmapCache getInstance() {"
         errorLine2="                      ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="83"
+            column="23"/>
     </issue>
 
     <issue
@@ -3112,7 +3750,9 @@
         errorLine1="        public abstract void onBitmapLoaded(Bitmap bitmap);"
         errorLine2="                                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="95"
+            column="45"/>
     </issue>
 
     <issue
@@ -3121,7 +3761,9 @@
         errorLine1="    public BackgroundHelper(Activity activity) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="107"
+            column="29"/>
     </issue>
 
     <issue
@@ -3130,7 +3772,9 @@
         errorLine1="    public void attachToView(View backgroundView) {"
         errorLine2="                             ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="217"
+            column="30"/>
     </issue>
 
     <issue
@@ -3139,7 +3783,9 @@
         errorLine1="    public void setBackground(Object imageToken) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="230"
+            column="31"/>
     </issue>
 
     <issue
@@ -3148,7 +3794,9 @@
         errorLine1="    public void setDrawable(Drawable drawable) {"
         errorLine2="                            ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="267"
+            column="29"/>
     </issue>
 
     <issue
@@ -3157,7 +3805,9 @@
         errorLine1="    public void loadBitmap(Object imageToken, BitmapLoadCallback callback) {"
         errorLine2="                           ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="279"
+            column="28"/>
     </issue>
 
     <issue
@@ -3166,7 +3816,9 @@
         errorLine1="    public void loadBitmap(Object imageToken, BitmapLoadCallback callback) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+            file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+            line="279"
+            column="47"/>
     </issue>
 
     <issue
@@ -3175,7 +3827,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseActivity.java"
+            line="22"
+            column="26"/>
     </issue>
 
     <issue
@@ -3184,7 +3838,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState)"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationActivity.java"
+            line="23"
+            column="26"/>
     </issue>
 
     <issue
@@ -3193,7 +3849,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+            line="58"
+            column="26"/>
     </issue>
 
     <issue
@@ -3202,7 +3860,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState)"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"
+            line="31"
+            column="26"/>
     </issue>
 
     <issue
@@ -3211,7 +3871,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"
+            line="55"
+            column="16"/>
     </issue>
 
     <issue
@@ -3220,7 +3882,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"
+            line="55"
+            column="34"/>
     </issue>
 
     <issue
@@ -3229,7 +3893,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"
+            line="55"
+            column="59"/>
     </issue>
 
     <issue
@@ -3238,7 +3904,9 @@
         errorLine1="                    Bundle savedInstanceState) {"
         errorLine2="                    ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"
+            line="56"
+            column="21"/>
     </issue>
 
     <issue
@@ -3247,7 +3915,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState)"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"
+            line="35"
+            column="26"/>
     </issue>
 
     <issue
@@ -3256,7 +3926,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"
+            line="59"
+            column="16"/>
     </issue>
 
     <issue
@@ -3265,7 +3937,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"
+            line="59"
+            column="34"/>
     </issue>
 
     <issue
@@ -3274,7 +3948,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"
+            line="59"
+            column="59"/>
     </issue>
 
     <issue
@@ -3283,7 +3959,9 @@
         errorLine1="                    Bundle savedInstanceState) {"
         errorLine2="                    ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"
+            line="60"
+            column="21"/>
     </issue>
 
     <issue
@@ -3292,7 +3970,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="65"
+            column="26"/>
     </issue>
 
     <issue
@@ -3301,7 +3981,9 @@
         errorLine1="    public View onCreateView("
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="139"
+            column="12"/>
     </issue>
 
     <issue
@@ -3310,7 +3992,9 @@
         errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="140"
+            column="13"/>
     </issue>
 
     <issue
@@ -3319,7 +4003,9 @@
         errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                                     ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="140"
+            column="38"/>
     </issue>
 
     <issue
@@ -3328,7 +4014,9 @@
         errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="140"
+            column="59"/>
     </issue>
 
     <issue
@@ -3337,7 +4025,9 @@
         errorLine1="        public Fragment createFragment(Object rowObj) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="258"
+            column="16"/>
     </issue>
 
     <issue
@@ -3346,7 +4036,9 @@
         errorLine1="        public Fragment createFragment(Object rowObj) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="258"
+            column="40"/>
     </issue>
 
     <issue
@@ -3355,7 +4047,9 @@
         errorLine1="        public PageFragmentAdapterImpl(SampleFragment fragment) {"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="375"
+            column="40"/>
     </issue>
 
     <issue
@@ -3364,7 +4058,9 @@
         errorLine1="        public View onCreateView("
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="399"
+            column="16"/>
     </issue>
 
     <issue
@@ -3373,7 +4069,9 @@
         errorLine1="                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                      ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="400"
+            column="23"/>
     </issue>
 
     <issue
@@ -3382,7 +4080,9 @@
         errorLine1="                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                                               ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="400"
+            column="48"/>
     </issue>
 
     <issue
@@ -3391,7 +4091,9 @@
         errorLine1="                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                                                                    ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="400"
+            column="69"/>
     </issue>
 
     <issue
@@ -3400,7 +4102,9 @@
         errorLine1="        public void onViewCreated(View view, Bundle savedInstanceState) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="414"
+            column="35"/>
     </issue>
 
     <issue
@@ -3409,7 +4113,9 @@
         errorLine1="        public void onViewCreated(View view, Bundle savedInstanceState) {"
         errorLine2="                                             ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="414"
+            column="46"/>
     </issue>
 
     <issue
@@ -3418,7 +4124,9 @@
         errorLine1="        public MainFragmentAdapter getMainFragmentAdapter() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+            line="421"
+            column="16"/>
     </issue>
 
     <issue
@@ -3427,7 +4135,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportActivity.java"
+            line="26"
+            column="26"/>
     </issue>
 
     <issue
@@ -3436,7 +4146,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportAppCompatActivity.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportAppCompatActivity.java"
+            line="29"
+            column="26"/>
     </issue>
 
     <issue
@@ -3445,7 +4157,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="68"
+            column="26"/>
     </issue>
 
     <issue
@@ -3454,7 +4168,9 @@
         errorLine1="    public View onCreateView("
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="142"
+            column="12"/>
     </issue>
 
     <issue
@@ -3463,7 +4179,9 @@
         errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="143"
+            column="13"/>
     </issue>
 
     <issue
@@ -3472,7 +4190,9 @@
         errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                                     ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="143"
+            column="38"/>
     </issue>
 
     <issue
@@ -3481,7 +4201,9 @@
         errorLine1="            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                                                          ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="143"
+            column="59"/>
     </issue>
 
     <issue
@@ -3490,7 +4212,9 @@
         errorLine1="        public Fragment createFragment(Object rowObj) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="261"
+            column="16"/>
     </issue>
 
     <issue
@@ -3499,7 +4223,9 @@
         errorLine1="        public Fragment createFragment(Object rowObj) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="261"
+            column="40"/>
     </issue>
 
     <issue
@@ -3508,7 +4234,9 @@
         errorLine1="        public PageFragmentAdapterImpl(SampleFragment fragment) {"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="378"
+            column="40"/>
     </issue>
 
     <issue
@@ -3517,7 +4245,9 @@
         errorLine1="        public View onCreateView("
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="402"
+            column="16"/>
     </issue>
 
     <issue
@@ -3526,7 +4256,9 @@
         errorLine1="                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                      ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="403"
+            column="23"/>
     </issue>
 
     <issue
@@ -3535,7 +4267,9 @@
         errorLine1="                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                                               ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="403"
+            column="48"/>
     </issue>
 
     <issue
@@ -3544,7 +4278,9 @@
         errorLine1="                final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
         errorLine2="                                                                    ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="403"
+            column="69"/>
     </issue>
 
     <issue
@@ -3553,7 +4289,9 @@
         errorLine1="        public void onViewCreated(View view, Bundle savedInstanceState) {"
         errorLine2="                                  ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="417"
+            column="35"/>
     </issue>
 
     <issue
@@ -3562,7 +4300,9 @@
         errorLine1="        public void onViewCreated(View view, Bundle savedInstanceState) {"
         errorLine2="                                             ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="417"
+            column="46"/>
     </issue>
 
     <issue
@@ -3571,7 +4311,9 @@
         errorLine1="        public MainFragmentAdapter getMainFragmentAdapter() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+            line="424"
+            column="16"/>
     </issue>
 
     <issue
@@ -3580,7 +4322,9 @@
         errorLine1="    public int getRowHeight(Context context) {"
         errorLine2="                            ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/CardPresenter.java"
+            line="73"
+            column="29"/>
     </issue>
 
     <issue
@@ -3589,7 +4333,9 @@
         errorLine1="    public int getExpandedRowHeight(Context context) {"
         errorLine2="                                    ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/CardPresenter.java"
+            line="78"
+            column="37"/>
     </issue>
 
     <issue
@@ -3598,7 +4344,9 @@
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/CardPresenter.java"
+            line="84"
+            column="12"/>
     </issue>
 
     <issue
@@ -3607,7 +4355,9 @@
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/CardPresenter.java"
+            line="84"
+            column="42"/>
     </issue>
 
     <issue
@@ -3616,7 +4366,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item) {"
         errorLine2="                                 ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/CardPresenter.java"
+            line="111"
+            column="34"/>
     </issue>
 
     <issue
@@ -3625,7 +4377,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item) {"
         errorLine2="                                                        ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/CardPresenter.java"
+            line="111"
+            column="57"/>
     </issue>
 
     <issue
@@ -3634,7 +4388,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item, List&lt;Object> payloads) {"
         errorLine2="                                 ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/CardPresenter.java"
+            line="125"
+            column="34"/>
     </issue>
 
     <issue
@@ -3643,7 +4399,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item, List&lt;Object> payloads) {"
         errorLine2="                                                        ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/CardPresenter.java"
+            line="125"
+            column="57"/>
     </issue>
 
     <issue
@@ -3652,7 +4410,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item, List&lt;Object> payloads) {"
         errorLine2="                                                                     ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/CardPresenter.java"
+            line="125"
+            column="70"/>
     </issue>
 
     <issue
@@ -3661,7 +4421,9 @@
         errorLine1="    public void onUnbindViewHolder(ViewHolder viewHolder) {"
         errorLine2="                                   ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/CardPresenter.java"
+            line="149"
+            column="36"/>
     </issue>
 
     <issue
@@ -3670,7 +4432,9 @@
         errorLine1="    public CustomTitleView(Context context) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+            file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+            line="73"
+            column="28"/>
     </issue>
 
     <issue
@@ -3679,7 +4443,9 @@
         errorLine1="    public CustomTitleView(Context context, AttributeSet attrs) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+            file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+            line="77"
+            column="28"/>
     </issue>
 
     <issue
@@ -3688,7 +4454,9 @@
         errorLine1="    public CustomTitleView(Context context, AttributeSet attrs) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+            file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+            line="77"
+            column="45"/>
     </issue>
 
     <issue
@@ -3697,7 +4465,9 @@
         errorLine1="    public CustomTitleView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                           ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+            file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+            line="81"
+            column="28"/>
     </issue>
 
     <issue
@@ -3706,7 +4476,9 @@
         errorLine1="    public CustomTitleView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                            ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+            file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+            line="81"
+            column="45"/>
     </issue>
 
     <issue
@@ -3715,7 +4487,9 @@
         errorLine1="    public TitleViewAdapter getTitleViewAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+            file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+            line="86"
+            column="12"/>
     </issue>
 
     <issue
@@ -3724,7 +4498,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DatePickerActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DatePickerActivity.java"
+            line="33"
+            column="29"/>
     </issue>
 
     <issue
@@ -3733,7 +4509,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DatePickerAppCompatActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DatePickerAppCompatActivity.java"
+            line="33"
+            column="29"/>
     </issue>
 
     <issue
@@ -3742,7 +4520,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState)"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsActivity.java"
+            line="35"
+            column="26"/>
     </issue>
 
     <issue
@@ -3751,7 +4531,9 @@
         errorLine1="    protected void onBindDescription(ViewHolder vh, Object item) {"
         errorLine2="                                     ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsDescriptionPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsDescriptionPresenter.java"
+            line="21"
+            column="38"/>
     </issue>
 
     <issue
@@ -3760,7 +4542,9 @@
         errorLine1="    protected void onBindDescription(ViewHolder vh, Object item) {"
         errorLine2="                                                    ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsDescriptionPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsDescriptionPresenter.java"
+            line="21"
+            column="53"/>
     </issue>
 
     <issue
@@ -3769,7 +4553,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="68"
+            column="26"/>
     </issue>
 
     <issue
@@ -3778,7 +4564,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="171"
+            column="37"/>
     </issue>
 
     <issue
@@ -3787,7 +4575,9 @@
         errorLine1="    public void setItem(PhotoItem photoItem) {"
         errorLine2="                        ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+            line="176"
+            column="25"/>
     </issue>
 
     <issue
@@ -3796,7 +4586,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="48"
+            column="29"/>
     </issue>
 
     <issue
@@ -3805,7 +4597,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="70"
+            column="16"/>
     </issue>
 
     <issue
@@ -3814,7 +4608,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="70"
+            column="42"/>
     </issue>
 
     <issue
@@ -3823,7 +4619,9 @@
         errorLine1="        public GuidanceStylist onCreateGuidanceStylist() {"
         errorLine2="               ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="79"
+            column="16"/>
     </issue>
 
     <issue
@@ -3832,7 +4630,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="89"
+            column="37"/>
     </issue>
 
     <issue
@@ -3841,7 +4641,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="89"
+            column="65"/>
     </issue>
 
     <issue
@@ -3850,7 +4652,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+            line="107"
+            column="43"/>
     </issue>
 
     <issue
@@ -3859,7 +4663,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState)"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportActivity.java"
+            line="39"
+            column="26"/>
     </issue>
 
     <issue
@@ -3868,7 +4674,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="71"
+            column="26"/>
     </issue>
 
     <issue
@@ -3877,7 +4685,9 @@
         errorLine1="    public void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="174"
+            column="37"/>
     </issue>
 
     <issue
@@ -3886,7 +4696,9 @@
         errorLine1="    public void setItem(PhotoItem photoItem) {"
         errorLine2="                        ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+            line="179"
+            column="25"/>
     </issue>
 
     <issue
@@ -3895,7 +4707,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/ErrorFragment.java"/>
+            file="src/main/java/com/example/android/leanback/ErrorFragment.java"
+            line="28"
+            column="26"/>
     </issue>
 
     <issue
@@ -3904,7 +4718,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"
+            line="31"
+            column="26"/>
     </issue>
 
     <issue
@@ -3913,7 +4729,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="73"
+            column="29"/>
     </issue>
 
     <issue
@@ -3922,7 +4740,9 @@
         errorLine1="    public void onConfigurationChanged(Configuration newConfig) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="84"
+            column="40"/>
     </issue>
 
     <issue
@@ -3931,7 +4751,9 @@
         errorLine1="    protected void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="90"
+            column="40"/>
     </issue>
 
     <issue
@@ -3940,7 +4762,9 @@
         errorLine1="    protected void onRestoreInstanceState(Bundle savedInstanceState) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="96"
+            column="43"/>
     </issue>
 
     <issue
@@ -3949,7 +4773,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="197"
+            column="16"/>
     </issue>
 
     <issue
@@ -3958,7 +4784,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="197"
+            column="42"/>
     </issue>
 
     <issue
@@ -3967,7 +4795,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="208"
+            column="37"/>
     </issue>
 
     <issue
@@ -3976,7 +4806,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="208"
+            column="65"/>
     </issue>
 
     <issue
@@ -3985,7 +4817,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="225"
+            column="43"/>
     </issue>
 
     <issue
@@ -3994,7 +4828,9 @@
         errorLine1="        public void onCreate(Bundle savedInstance) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="270"
+            column="30"/>
     </issue>
 
     <issue
@@ -4003,7 +4839,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="280"
+            column="16"/>
     </issue>
 
     <issue
@@ -4012,7 +4850,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="280"
+            column="42"/>
     </issue>
 
     <issue
@@ -4021,7 +4861,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="291"
+            column="37"/>
     </issue>
 
     <issue
@@ -4030,7 +4872,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="291"
+            column="65"/>
     </issue>
 
     <issue
@@ -4039,7 +4883,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="299"
+            column="43"/>
     </issue>
 
     <issue
@@ -4048,7 +4894,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                      ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="299"
+            column="71"/>
     </issue>
 
     <issue
@@ -4057,7 +4905,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="307"
+            column="43"/>
     </issue>
 
     <issue
@@ -4066,7 +4916,9 @@
         errorLine1="        public long onGuidedActionEditedAndProceed(GuidedAction action) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="328"
+            column="52"/>
     </issue>
 
     <issue
@@ -4075,7 +4927,9 @@
         errorLine1="        public GuidedActionsStylist onCreateActionsStylist() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="392"
+            column="16"/>
     </issue>
 
     <issue
@@ -4084,7 +4938,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="408"
+            column="16"/>
     </issue>
 
     <issue
@@ -4093,7 +4949,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="408"
+            column="42"/>
     </issue>
 
     <issue
@@ -4102,7 +4960,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="419"
+            column="37"/>
     </issue>
 
     <issue
@@ -4111,7 +4971,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="419"
+            column="65"/>
     </issue>
 
     <issue
@@ -4120,7 +4982,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="429"
+            column="43"/>
     </issue>
 
     <issue
@@ -4129,7 +4993,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                      ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="429"
+            column="71"/>
     </issue>
 
     <issue
@@ -4138,7 +5004,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="438"
+            column="43"/>
     </issue>
 
     <issue
@@ -4147,7 +5015,9 @@
         errorLine1="        public long onGuidedActionEditedAndProceed(GuidedAction action) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="460"
+            column="52"/>
     </issue>
 
     <issue
@@ -4156,7 +5026,9 @@
         errorLine1="        public boolean onSubGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="480"
+            column="49"/>
     </issue>
 
     <issue
@@ -4165,7 +5037,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="503"
+            column="16"/>
     </issue>
 
     <issue
@@ -4174,7 +5048,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="503"
+            column="34"/>
     </issue>
 
     <issue
@@ -4183,7 +5059,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="503"
+            column="59"/>
     </issue>
 
     <issue
@@ -4192,7 +5070,9 @@
         errorLine1="                Bundle savedInstanceState) {"
         errorLine2="                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="504"
+            column="17"/>
     </issue>
 
     <issue
@@ -4201,7 +5081,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="536"
+            column="16"/>
     </issue>
 
     <issue
@@ -4210,7 +5092,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="536"
+            column="42"/>
     </issue>
 
     <issue
@@ -4219,7 +5103,9 @@
         errorLine1="        public GuidanceStylist onCreateGuidanceStylist() {"
         errorLine2="               ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="547"
+            column="16"/>
     </issue>
 
     <issue
@@ -4228,7 +5114,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="557"
+            column="37"/>
     </issue>
 
     <issue
@@ -4237,7 +5125,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="557"
+            column="65"/>
     </issue>
 
     <issue
@@ -4246,7 +5136,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="584"
+            column="43"/>
     </issue>
 
     <issue
@@ -4255,7 +5147,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                      ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="584"
+            column="71"/>
     </issue>
 
     <issue
@@ -4264,7 +5158,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="591"
+            column="43"/>
     </issue>
 
     <issue
@@ -4273,7 +5169,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="619"
+            column="16"/>
     </issue>
 
     <issue
@@ -4282,7 +5180,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="619"
+            column="42"/>
     </issue>
 
     <issue
@@ -4291,7 +5191,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="630"
+            column="37"/>
     </issue>
 
     <issue
@@ -4300,7 +5202,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="630"
+            column="65"/>
     </issue>
 
     <issue
@@ -4309,7 +5213,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+            line="639"
+            column="43"/>
     </issue>
 
     <issue
@@ -4318,7 +5224,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="42"
+            column="29"/>
     </issue>
 
     <issue
@@ -4327,7 +5235,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="52"
+            column="16"/>
     </issue>
 
     <issue
@@ -4336,7 +5246,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="52"
+            column="42"/>
     </issue>
 
     <issue
@@ -4345,7 +5257,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="63"
+            column="37"/>
     </issue>
 
     <issue
@@ -4354,7 +5268,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="63"
+            column="65"/>
     </issue>
 
     <issue
@@ -4363,7 +5279,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="91"
+            column="43"/>
     </issue>
 
     <issue
@@ -4372,7 +5290,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="109"
+            column="16"/>
     </issue>
 
     <issue
@@ -4381,7 +5301,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="109"
+            column="42"/>
     </issue>
 
     <issue
@@ -4390,7 +5312,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="120"
+            column="37"/>
     </issue>
 
     <issue
@@ -4399,7 +5323,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="120"
+            column="65"/>
     </issue>
 
     <issue
@@ -4408,7 +5334,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="133"
+            column="43"/>
     </issue>
 
     <issue
@@ -4417,7 +5345,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                      ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="133"
+            column="71"/>
     </issue>
 
     <issue
@@ -4426,7 +5356,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+            line="141"
+            column="43"/>
     </issue>
 
     <issue
@@ -4435,7 +5367,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="76"
+            column="29"/>
     </issue>
 
     <issue
@@ -4444,7 +5378,9 @@
         errorLine1="    public void onConfigurationChanged(Configuration newConfig) {"
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="86"
+            column="40"/>
     </issue>
 
     <issue
@@ -4453,7 +5389,9 @@
         errorLine1="    protected void onSaveInstanceState(Bundle outState) {"
         errorLine2="                                       ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="92"
+            column="40"/>
     </issue>
 
     <issue
@@ -4462,7 +5400,9 @@
         errorLine1="    protected void onRestoreInstanceState(Bundle savedInstanceState) {"
         errorLine2="                                          ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="98"
+            column="43"/>
     </issue>
 
     <issue
@@ -4471,7 +5411,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="199"
+            column="16"/>
     </issue>
 
     <issue
@@ -4480,7 +5422,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="199"
+            column="42"/>
     </issue>
 
     <issue
@@ -4489,7 +5433,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="210"
+            column="37"/>
     </issue>
 
     <issue
@@ -4498,7 +5444,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="210"
+            column="65"/>
     </issue>
 
     <issue
@@ -4507,7 +5455,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="227"
+            column="43"/>
     </issue>
 
     <issue
@@ -4516,7 +5466,9 @@
         errorLine1="        public void onCreate(Bundle savedInstance) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="272"
+            column="30"/>
     </issue>
 
     <issue
@@ -4525,7 +5477,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="282"
+            column="16"/>
     </issue>
 
     <issue
@@ -4534,7 +5488,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="282"
+            column="42"/>
     </issue>
 
     <issue
@@ -4543,7 +5499,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="293"
+            column="37"/>
     </issue>
 
     <issue
@@ -4552,7 +5510,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="293"
+            column="65"/>
     </issue>
 
     <issue
@@ -4561,7 +5521,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="301"
+            column="43"/>
     </issue>
 
     <issue
@@ -4570,7 +5532,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                      ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="301"
+            column="71"/>
     </issue>
 
     <issue
@@ -4579,7 +5543,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="309"
+            column="43"/>
     </issue>
 
     <issue
@@ -4588,7 +5554,9 @@
         errorLine1="        public long onGuidedActionEditedAndProceed(GuidedAction action) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="330"
+            column="52"/>
     </issue>
 
     <issue
@@ -4597,7 +5565,9 @@
         errorLine1="        public GuidedActionsStylist onCreateActionsStylist() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="394"
+            column="16"/>
     </issue>
 
     <issue
@@ -4606,7 +5576,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="410"
+            column="16"/>
     </issue>
 
     <issue
@@ -4615,7 +5587,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="410"
+            column="42"/>
     </issue>
 
     <issue
@@ -4624,7 +5598,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="421"
+            column="37"/>
     </issue>
 
     <issue
@@ -4633,7 +5609,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="421"
+            column="65"/>
     </issue>
 
     <issue
@@ -4642,7 +5620,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="431"
+            column="43"/>
     </issue>
 
     <issue
@@ -4651,7 +5631,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                      ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="431"
+            column="71"/>
     </issue>
 
     <issue
@@ -4660,7 +5642,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="440"
+            column="43"/>
     </issue>
 
     <issue
@@ -4669,7 +5653,9 @@
         errorLine1="        public long onGuidedActionEditedAndProceed(GuidedAction action) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="462"
+            column="52"/>
     </issue>
 
     <issue
@@ -4678,7 +5664,9 @@
         errorLine1="        public boolean onSubGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="482"
+            column="49"/>
     </issue>
 
     <issue
@@ -4687,7 +5675,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="               ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="505"
+            column="16"/>
     </issue>
 
     <issue
@@ -4696,7 +5686,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="505"
+            column="34"/>
     </issue>
 
     <issue
@@ -4705,7 +5697,9 @@
         errorLine1="        public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                          ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="505"
+            column="59"/>
     </issue>
 
     <issue
@@ -4714,7 +5708,9 @@
         errorLine1="                Bundle savedInstanceState) {"
         errorLine2="                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="506"
+            column="17"/>
     </issue>
 
     <issue
@@ -4723,7 +5719,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="538"
+            column="16"/>
     </issue>
 
     <issue
@@ -4732,7 +5730,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="538"
+            column="42"/>
     </issue>
 
     <issue
@@ -4741,7 +5741,9 @@
         errorLine1="        public GuidanceStylist onCreateGuidanceStylist() {"
         errorLine2="               ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="549"
+            column="16"/>
     </issue>
 
     <issue
@@ -4750,7 +5752,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="559"
+            column="37"/>
     </issue>
 
     <issue
@@ -4759,7 +5763,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="559"
+            column="65"/>
     </issue>
 
     <issue
@@ -4768,7 +5774,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="586"
+            column="43"/>
     </issue>
 
     <issue
@@ -4777,7 +5785,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                      ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="586"
+            column="71"/>
     </issue>
 
     <issue
@@ -4786,7 +5796,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="593"
+            column="43"/>
     </issue>
 
     <issue
@@ -4795,7 +5807,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="621"
+            column="16"/>
     </issue>
 
     <issue
@@ -4804,7 +5818,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="621"
+            column="42"/>
     </issue>
 
     <issue
@@ -4813,7 +5829,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="632"
+            column="37"/>
     </issue>
 
     <issue
@@ -4822,7 +5840,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="632"
+            column="65"/>
     </issue>
 
     <issue
@@ -4831,7 +5851,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+            line="641"
+            column="43"/>
     </issue>
 
     <issue
@@ -4840,7 +5862,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="45"
+            column="29"/>
     </issue>
 
     <issue
@@ -4849,7 +5873,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="55"
+            column="16"/>
     </issue>
 
     <issue
@@ -4858,7 +5884,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="55"
+            column="42"/>
     </issue>
 
     <issue
@@ -4867,7 +5895,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="66"
+            column="37"/>
     </issue>
 
     <issue
@@ -4876,7 +5906,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="66"
+            column="65"/>
     </issue>
 
     <issue
@@ -4885,7 +5917,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="94"
+            column="43"/>
     </issue>
 
     <issue
@@ -4894,7 +5928,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="112"
+            column="16"/>
     </issue>
 
     <issue
@@ -4903,7 +5939,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="112"
+            column="42"/>
     </issue>
 
     <issue
@@ -4912,7 +5950,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="123"
+            column="37"/>
     </issue>
 
     <issue
@@ -4921,7 +5961,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="123"
+            column="65"/>
     </issue>
 
     <issue
@@ -4930,7 +5972,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="136"
+            column="43"/>
     </issue>
 
     <issue
@@ -4939,7 +5983,9 @@
         errorLine1="        public void onCreateButtonActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                      ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="136"
+            column="71"/>
     </issue>
 
     <issue
@@ -4948,7 +5994,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+            line="144"
+            column="43"/>
     </issue>
 
     <issue
@@ -4957,7 +6005,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+            line="74"
+            column="29"/>
     </issue>
 
     <issue
@@ -4966,7 +6016,9 @@
         errorLine1="    protected void onNewIntent(Intent intent) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+            file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+            line="88"
+            column="32"/>
     </issue>
 
     <issue
@@ -4975,7 +6027,9 @@
         errorLine1="    public LiveDataListRow(HeaderItem header,"
         errorLine2="                           ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/LiveDataListRow.java"/>
+            file="src/main/java/com/example/android/leanback/LiveDataListRow.java"
+            line="24"
+            column="28"/>
     </issue>
 
     <issue
@@ -4984,7 +6038,9 @@
         errorLine1="            ObjectAdapter adapter) {"
         errorLine2="            ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/LiveDataListRow.java"/>
+            file="src/main/java/com/example/android/leanback/LiveDataListRow.java"
+            line="25"
+            column="13"/>
     </issue>
 
     <issue
@@ -4993,7 +6049,9 @@
         errorLine1="    public LiveDataListRow(long id, HeaderItem header, ObjectAdapter adapter) {"
         errorLine2="                                    ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/LiveDataListRow.java"/>
+            file="src/main/java/com/example/android/leanback/LiveDataListRow.java"
+            line="28"
+            column="37"/>
     </issue>
 
     <issue
@@ -5002,7 +6060,9 @@
         errorLine1="    public LiveDataListRow(long id, HeaderItem header, ObjectAdapter adapter) {"
         errorLine2="                                                       ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/LiveDataListRow.java"/>
+            file="src/main/java/com/example/android/leanback/LiveDataListRow.java"
+            line="28"
+            column="56"/>
     </issue>
 
     <issue
@@ -5011,7 +6071,9 @@
         errorLine1="    public LiveDataListRow(ObjectAdapter adapter) {"
         errorLine2="                           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/LiveDataListRow.java"/>
+            file="src/main/java/com/example/android/leanback/LiveDataListRow.java"
+            line="31"
+            column="28"/>
     </issue>
 
     <issue
@@ -5020,7 +6082,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+            file="src/main/java/com/example/android/leanback/MainActivity.java"
+            line="39"
+            column="29"/>
     </issue>
 
     <issue
@@ -5029,7 +6093,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="               ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+            file="src/main/java/com/example/android/leanback/MainActivity.java"
+            line="48"
+            column="16"/>
     </issue>
 
     <issue
@@ -5038,7 +6104,9 @@
         errorLine1="        public Guidance onCreateGuidance(Bundle savedInstanceState) {"
         errorLine2="                                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+            file="src/main/java/com/example/android/leanback/MainActivity.java"
+            line="48"
+            column="42"/>
     </issue>
 
     <issue
@@ -5047,7 +6115,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+            file="src/main/java/com/example/android/leanback/MainActivity.java"
+            line="59"
+            column="37"/>
     </issue>
 
     <issue
@@ -5056,7 +6126,9 @@
         errorLine1="        public void onCreateActions(List&lt;GuidedAction> actions, Bundle savedInstanceState) {"
         errorLine2="                                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+            file="src/main/java/com/example/android/leanback/MainActivity.java"
+            line="59"
+            column="65"/>
     </issue>
 
     <issue
@@ -5065,7 +6137,9 @@
         errorLine1="        public void onGuidedActionClicked(GuidedAction action) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+            file="src/main/java/com/example/android/leanback/MainActivity.java"
+            line="190"
+            column="43"/>
     </issue>
 
     <issue
@@ -5074,7 +6148,9 @@
         errorLine1="    public MediaSessionCompat getMediaSession() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="202"
+            column="12"/>
     </issue>
 
     <issue
@@ -5083,7 +6159,9 @@
         errorLine1="    public IBinder onBind(Intent intent) {"
         errorLine2="                          ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="208"
+            column="27"/>
     </issue>
 
     <issue
@@ -5092,7 +6170,9 @@
         errorLine1="    public void setMediaList(List&lt;MusicItem> mediaItemList, boolean isQueue) {"
         errorLine2="                             ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="261"
+            column="30"/>
     </issue>
 
     <issue
@@ -5101,7 +6181,9 @@
         errorLine1="    public void setFastForwardSpeedFactors(int[] fastForwardSpeeds) {"
         errorLine2="                                           ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="291"
+            column="44"/>
     </issue>
 
     <issue
@@ -5110,7 +6192,9 @@
         errorLine1="    public void setRewindSpeedFactors(int[] rewindSpeeds) {"
         errorLine2="                                      ~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="307"
+            column="39"/>
     </issue>
 
     <issue
@@ -5119,7 +6203,9 @@
         errorLine1="    public void registerCallback(MediaPlayerListener listener) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+            file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+            line="488"
+            column="34"/>
     </issue>
 
     <issue
@@ -5128,7 +6214,9 @@
         errorLine1="    @Override public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicExampleActivity.java"/>
+            file="src/main/java/com/example/android/leanback/MusicExampleActivity.java"
+            line="26"
+            column="36"/>
     </issue>
 
     <issue
@@ -5137,7 +6225,9 @@
         errorLine1="    public Uri getMediaSourceUri(Context context) {"
         errorLine2="           ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+            file="src/main/java/com/example/android/leanback/MusicItem.java"
+            line="56"
+            column="12"/>
     </issue>
 
     <issue
@@ -5146,7 +6236,9 @@
         errorLine1="    public Uri getMediaSourceUri(Context context) {"
         errorLine2="                                 ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+            file="src/main/java/com/example/android/leanback/MusicItem.java"
+            line="56"
+            column="34"/>
     </issue>
 
     <issue
@@ -5155,7 +6247,9 @@
         errorLine1="    public String getMediaTitle() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+            file="src/main/java/com/example/android/leanback/MusicItem.java"
+            line="66"
+            column="12"/>
     </issue>
 
     <issue
@@ -5164,7 +6258,9 @@
         errorLine1="    public String getMediaDescription() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+            file="src/main/java/com/example/android/leanback/MusicItem.java"
+            line="75"
+            column="12"/>
     </issue>
 
     <issue
@@ -5173,7 +6269,9 @@
         errorLine1="    public int getMediaAlbumArtResId(Context context) {"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+            file="src/main/java/com/example/android/leanback/MusicItem.java"
+            line="85"
+            column="38"/>
     </issue>
 
     <issue
@@ -5182,7 +6280,9 @@
         errorLine1="    public static Uri getResourceUri(Context context, int resID) {"
         errorLine2="                  ~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+            file="src/main/java/com/example/android/leanback/MusicItem.java"
+            line="97"
+            column="19"/>
     </issue>
 
     <issue
@@ -5191,7 +6291,9 @@
         errorLine1="    public static Uri getResourceUri(Context context, int resID) {"
         errorLine2="                                     ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+            file="src/main/java/com/example/android/leanback/MusicItem.java"
+            line="97"
+            column="38"/>
     </issue>
 
     <issue
@@ -5200,7 +6302,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+            file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+            line="225"
+            column="26"/>
     </issue>
 
     <issue
@@ -5209,7 +6313,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="115"
+            column="26"/>
     </issue>
 
     <issue
@@ -5218,7 +6324,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="250"
+            column="12"/>
     </issue>
 
     <issue
@@ -5227,7 +6335,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="250"
+            column="30"/>
     </issue>
 
     <issue
@@ -5236,7 +6346,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="250"
+            column="55"/>
     </issue>
 
     <issue
@@ -5245,7 +6357,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="251"
+            column="13"/>
     </issue>
 
     <issue
@@ -5254,7 +6368,9 @@
         errorLine1="    public void setItem(PhotoItem photoItem) {"
         errorLine2="                        ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+            line="260"
+            column="25"/>
     </issue>
 
     <issue
@@ -5263,7 +6379,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="118"
+            column="26"/>
     </issue>
 
     <issue
@@ -5272,7 +6390,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="253"
+            column="12"/>
     </issue>
 
     <issue
@@ -5281,7 +6401,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="253"
+            column="30"/>
     </issue>
 
     <issue
@@ -5290,7 +6412,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="253"
+            column="55"/>
     </issue>
 
     <issue
@@ -5299,7 +6423,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="254"
+            column="13"/>
     </issue>
 
     <issue
@@ -5308,7 +6434,9 @@
         errorLine1="    public void setItem(PhotoItem photoItem) {"
         errorLine2="                        ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+            line="263"
+            column="25"/>
     </issue>
 
     <issue
@@ -5317,7 +6445,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingActivity.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingActivity.java"
+            line="21"
+            column="26"/>
     </issue>
 
     <issue
@@ -5326,7 +6456,9 @@
         errorLine1="    public void onAttach(android.app.Activity activity) {"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="57"
+            column="26"/>
     </issue>
 
     <issue
@@ -5335,7 +6467,9 @@
         errorLine1="    protected CharSequence getPageTitle(int i) {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="70"
+            column="15"/>
     </issue>
 
     <issue
@@ -5344,7 +6478,9 @@
         errorLine1="    protected CharSequence getPageDescription(int i) {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="75"
+            column="15"/>
     </issue>
 
     <issue
@@ -5353,7 +6489,9 @@
         errorLine1="    protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="              ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="80"
+            column="15"/>
     </issue>
 
     <issue
@@ -5362,7 +6500,9 @@
         errorLine1="    protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="80"
+            column="43"/>
     </issue>
 
     <issue
@@ -5371,7 +6511,9 @@
         errorLine1="    protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                                                         ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="80"
+            column="74"/>
     </issue>
 
     <issue
@@ -5380,7 +6522,9 @@
         errorLine1="    protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="              ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="86"
+            column="15"/>
     </issue>
 
     <issue
@@ -5389,7 +6533,9 @@
         errorLine1="    protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="86"
+            column="40"/>
     </issue>
 
     <issue
@@ -5398,7 +6544,9 @@
         errorLine1="    protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="86"
+            column="71"/>
     </issue>
 
     <issue
@@ -5407,7 +6555,9 @@
         errorLine1="    protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="              ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="94"
+            column="15"/>
     </issue>
 
     <issue
@@ -5416,7 +6566,9 @@
         errorLine1="    protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="94"
+            column="43"/>
     </issue>
 
     <issue
@@ -5425,7 +6577,9 @@
         errorLine1="    protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                                                         ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="94"
+            column="74"/>
     </issue>
 
     <issue
@@ -5434,7 +6588,9 @@
         errorLine1="    protected Animator onCreateEnterAnimation() {"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+            line="99"
+            column="15"/>
     </issue>
 
     <issue
@@ -5443,7 +6599,9 @@
         errorLine1="    public void onAttach(android.app.Activity activity) {"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="60"
+            column="26"/>
     </issue>
 
     <issue
@@ -5452,7 +6610,9 @@
         errorLine1="    protected CharSequence getPageTitle(int i) {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="73"
+            column="15"/>
     </issue>
 
     <issue
@@ -5461,7 +6621,9 @@
         errorLine1="    protected CharSequence getPageDescription(int i) {"
         errorLine2="              ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="78"
+            column="15"/>
     </issue>
 
     <issue
@@ -5470,7 +6632,9 @@
         errorLine1="    protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="              ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="83"
+            column="15"/>
     </issue>
 
     <issue
@@ -5479,7 +6643,9 @@
         errorLine1="    protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="83"
+            column="43"/>
     </issue>
 
     <issue
@@ -5488,7 +6654,9 @@
         errorLine1="    protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                                                         ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="83"
+            column="74"/>
     </issue>
 
     <issue
@@ -5497,7 +6665,9 @@
         errorLine1="    protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="              ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="89"
+            column="15"/>
     </issue>
 
     <issue
@@ -5506,7 +6676,9 @@
         errorLine1="    protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                       ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="89"
+            column="40"/>
     </issue>
 
     <issue
@@ -5515,7 +6687,9 @@
         errorLine1="    protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="89"
+            column="71"/>
     </issue>
 
     <issue
@@ -5524,7 +6698,9 @@
         errorLine1="    protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="              ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="97"
+            column="15"/>
     </issue>
 
     <issue
@@ -5533,7 +6709,9 @@
         errorLine1="    protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                          ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="97"
+            column="43"/>
     </issue>
 
     <issue
@@ -5542,7 +6720,9 @@
         errorLine1="    protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
         errorLine2="                                                                         ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="97"
+            column="74"/>
     </issue>
 
     <issue
@@ -5551,7 +6731,9 @@
         errorLine1="    protected Animator onCreateEnterAnimation() {"
         errorLine2="              ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+            line="102"
+            column="15"/>
     </issue>
 
     <issue
@@ -5560,7 +6742,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingSupportActivity.java"
+            line="25"
+            column="26"/>
     </issue>
 
     <issue
@@ -5569,7 +6753,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/OnboardingSupportAppCompatActivity.java"/>
+            file="src/main/java/com/example/android/leanback/OnboardingSupportAppCompatActivity.java"
+            line="28"
+            column="26"/>
     </issue>
 
     <issue
@@ -5578,7 +6764,9 @@
         errorLine1="    protected LiveDataRowPresenterViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"
+            line="39"
+            column="15"/>
     </issue>
 
     <issue
@@ -5587,7 +6775,9 @@
         errorLine1="    protected LiveDataRowPresenterViewHolder createRowViewHolder(ViewGroup parent) {"
         errorLine2="                                                                 ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"
+            line="39"
+            column="66"/>
     </issue>
 
     <issue
@@ -5596,7 +6786,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"
+            line="48"
+            column="40"/>
     </issue>
 
     <issue
@@ -5605,7 +6797,9 @@
         errorLine1="    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
         errorLine2="                                                                       ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"
+            line="48"
+            column="72"/>
     </issue>
 
     <issue
@@ -5614,7 +6808,9 @@
         errorLine1="    public PagerAdapter(FragmentManager fm, int numOfTabs) {"
         errorLine2="                        ~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PagerAdapter.java"/>
+            file="src/main/java/com/example/android/leanback/PagerAdapter.java"
+            line="30"
+            column="25"/>
     </issue>
 
     <issue
@@ -5623,7 +6819,9 @@
         errorLine1="    public CharSequence getPageTitle(int position) {"
         errorLine2="           ~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PagerAdapter.java"/>
+            file="src/main/java/com/example/android/leanback/PagerAdapter.java"
+            line="47"
+            column="12"/>
     </issue>
 
     <issue
@@ -5632,7 +6830,9 @@
         errorLine1="    public String getTitle() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/room/Photo.java"/>
+            file="src/main/java/com/example/android/leanback/room/Photo.java"
+            line="42"
+            column="12"/>
     </issue>
 
     <issue
@@ -5641,7 +6841,9 @@
         errorLine1="    PagingSource&lt;Integer, Photo> fetchPhotos();"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/room/PhotoDao.java"/>
+            file="src/main/java/com/example/android/leanback/room/PhotoDao.java"
+            line="32"
+            column="5"/>
     </issue>
 
     <issue
@@ -5650,7 +6852,9 @@
         errorLine1="    public static synchronized PhotoDatabase getInstance("
         errorLine2="                               ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"/>
+            file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"
+            line="40"
+            column="32"/>
     </issue>
 
     <issue
@@ -5659,7 +6863,9 @@
         errorLine1="            Context context) {"
         errorLine2="            ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"/>
+            file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"
+            line="41"
+            column="13"/>
     </issue>
 
     <issue
@@ -5668,7 +6874,9 @@
         errorLine1="    public abstract PhotoDao photoDao();"
         errorLine2="                    ~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"/>
+            file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"
+            line="85"
+            column="21"/>
     </issue>
 
     <issue
@@ -5677,7 +6885,9 @@
         errorLine1="    public PhotoItem(String title, int imageResourceId) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoItem.java"
+            line="30"
+            column="22"/>
     </issue>
 
     <issue
@@ -5686,7 +6896,9 @@
         errorLine1="    public PhotoItem(String title, int imageResourceId, int id) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoItem.java"
+            line="34"
+            column="22"/>
     </issue>
 
     <issue
@@ -5695,7 +6907,9 @@
         errorLine1="    public PhotoItem(String title, String content, int imageResourceId) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoItem.java"
+            line="39"
+            column="22"/>
     </issue>
 
     <issue
@@ -5704,7 +6918,9 @@
         errorLine1="    public PhotoItem(String title, String content, int imageResourceId) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoItem.java"
+            line="39"
+            column="36"/>
     </issue>
 
     <issue
@@ -5713,7 +6929,9 @@
         errorLine1="    public PhotoItem(String title, String content, int imageResourceId, int id) {"
         errorLine2="                     ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoItem.java"
+            line="47"
+            column="22"/>
     </issue>
 
     <issue
@@ -5722,7 +6940,9 @@
         errorLine1="    public PhotoItem(String title, String content, int imageResourceId, int id) {"
         errorLine2="                                   ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoItem.java"
+            line="47"
+            column="36"/>
     </issue>
 
     <issue
@@ -5731,7 +6951,9 @@
         errorLine1="    public String getTitle() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoItem.java"
+            line="56"
+            column="12"/>
     </issue>
 
     <issue
@@ -5740,7 +6962,9 @@
         errorLine1="    public String getContent() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoItem.java"
+            line="60"
+            column="12"/>
     </issue>
 
     <issue
@@ -5749,7 +6973,9 @@
         errorLine1="    public void writeToParcel(Parcel dest, int flags) {"
         errorLine2="                              ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoItem.java"
+            line="75"
+            column="31"/>
     </issue>
 
     <issue
@@ -5758,7 +6984,9 @@
         errorLine1="    public PhotoViewModel(Application application) {"
         errorLine2="                          ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoViewModel.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoViewModel.java"
+            line="44"
+            column="27"/>
     </issue>
 
     <issue
@@ -5767,7 +6995,9 @@
         errorLine1="    public LiveData&lt;PagingData&lt;PhotoItem>> getPagingDataLiveData() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PhotoViewModel.java"/>
+            file="src/main/java/com/example/android/leanback/PhotoViewModel.java"
+            line="64"
+            column="12"/>
     </issue>
 
     <issue
@@ -5776,7 +7006,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PinPickerActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PinPickerActivity.java"
+            line="30"
+            column="29"/>
     </issue>
 
     <issue
@@ -5785,7 +7017,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackActivity.java"
+            line="33"
+            column="26"/>
     </issue>
 
     <issue
@@ -5794,7 +7028,9 @@
         errorLine1="    public void registerPictureInPictureListener(PictureInPictureListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackActivity.java"
+            line="48"
+            column="50"/>
     </issue>
 
     <issue
@@ -5803,7 +7039,9 @@
         errorLine1="    public void unregisterPictureInPictureListener(PictureInPictureListener listener) {"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackActivity.java"
+            line="55"
+            column="52"/>
     </issue>
 
     <issue
@@ -5812,7 +7050,9 @@
         errorLine1="    public SparseArrayObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackFragment.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackFragment.java"
+            line="61"
+            column="12"/>
     </issue>
 
     <issue
@@ -5821,7 +7061,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackFragment.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackFragment.java"
+            line="66"
+            column="26"/>
     </issue>
 
     <issue
@@ -5830,7 +7072,9 @@
         errorLine1="    protected boolean isCancelled(Object task) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+            line="48"
+            column="35"/>
     </issue>
 
     <issue
@@ -5839,7 +7083,9 @@
         errorLine1="    protected abstract Bitmap doInBackground(Object task, int index, long position);"
         errorLine2="                       ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+            line="52"
+            column="24"/>
     </issue>
 
     <issue
@@ -5848,7 +7094,9 @@
         errorLine1="    protected abstract Bitmap doInBackground(Object task, int index, long position);"
         errorLine2="                                             ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+            line="52"
+            column="46"/>
     </issue>
 
     <issue
@@ -5857,7 +7105,9 @@
         errorLine1="    public void setSeekPositions(long[] positions) {"
         errorLine2="                                 ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+            line="93"
+            column="34"/>
     </issue>
 
     <issue
@@ -5866,7 +7116,9 @@
         errorLine1="    public long[] getSeekPositions() {"
         errorLine2="           ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+            line="98"
+            column="12"/>
     </issue>
 
     <issue
@@ -5875,7 +7127,9 @@
         errorLine1="    public void getThumbnail(int index, ResultCallback callback) {"
         errorLine2="                                        ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+            line="104"
+            column="41"/>
     </issue>
 
     <issue
@@ -5884,7 +7138,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"
+            line="37"
+            column="26"/>
     </issue>
 
     <issue
@@ -5893,7 +7149,9 @@
         errorLine1="    public void registerPictureInPictureListener(PictureInPictureListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"
+            line="52"
+            column="50"/>
     </issue>
 
     <issue
@@ -5902,7 +7160,9 @@
         errorLine1="    public void unregisterPictureInPictureListener(PictureInPictureListener listener) {"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"
+            line="59"
+            column="52"/>
     </issue>
 
     <issue
@@ -5911,7 +7171,9 @@
         errorLine1="    public SparseArrayObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"
+            line="64"
+            column="12"/>
     </issue>
 
     <issue
@@ -5920,7 +7182,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"
+            line="69"
+            column="26"/>
     </issue>
 
     <issue
@@ -5929,7 +7193,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"
+            line="33"
+            column="26"/>
     </issue>
 
     <issue
@@ -5938,7 +7204,9 @@
         errorLine1="    public void registerPictureInPictureListener(PictureInPictureListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"
+            line="48"
+            column="50"/>
     </issue>
 
     <issue
@@ -5947,7 +7215,9 @@
         errorLine1="    public void unregisterPictureInPictureListener(PictureInPictureListener listener) {"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"
+            line="55"
+            column="52"/>
     </issue>
 
     <issue
@@ -5956,7 +7226,9 @@
         errorLine1="    public SparseArrayObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlFragment.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlFragment.java"
+            line="56"
+            column="12"/>
     </issue>
 
     <issue
@@ -5965,7 +7237,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlFragment.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlFragment.java"
+            line="61"
+            column="26"/>
     </issue>
 
     <issue
@@ -5974,7 +7248,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"
+            line="37"
+            column="26"/>
     </issue>
 
     <issue
@@ -5983,7 +7259,9 @@
         errorLine1="    public void registerPictureInPictureListener(PictureInPictureListener listener) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"
+            line="52"
+            column="50"/>
     </issue>
 
     <issue
@@ -5992,7 +7270,9 @@
         errorLine1="    public void unregisterPictureInPictureListener(PictureInPictureListener listener) {"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"
+            line="59"
+            column="52"/>
     </issue>
 
     <issue
@@ -6001,7 +7281,9 @@
         errorLine1="    public SparseArrayObjectAdapter getAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportFragment.java"
+            line="59"
+            column="12"/>
     </issue>
 
     <issue
@@ -6010,7 +7292,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportFragment.java"
+            line="64"
+            column="26"/>
     </issue>
 
     <issue
@@ -6019,7 +7303,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsActivity.java"/>
+            file="src/main/java/com/example/android/leanback/RowsActivity.java"
+            line="31"
+            column="26"/>
     </issue>
 
     <issue
@@ -6028,7 +7314,9 @@
         errorLine1="    public void setTitleHelper(TitleHelper titleHelper) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsFragment.java"
+            line="43"
+            column="32"/>
     </issue>
 
     <issue
@@ -6037,7 +7325,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsFragment.java"
+            line="48"
+            column="26"/>
     </issue>
 
     <issue
@@ -6046,7 +7336,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/RowsSupportActivity.java"
+            line="34"
+            column="26"/>
     </issue>
 
     <issue
@@ -6055,7 +7347,9 @@
         errorLine1="    public void setTitleHelper(TitleHelper titleHelper) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+            line="50"
+            column="32"/>
     </issue>
 
     <issue
@@ -6064,7 +7358,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+            line="55"
+            column="26"/>
     </issue>
 
     <issue
@@ -6073,7 +7369,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+            line="100"
+            column="26"/>
     </issue>
 
     <issue
@@ -6082,7 +7380,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+            line="103"
+            column="26"/>
     </issue>
 
     <issue
@@ -6091,7 +7391,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState)"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchActivity.java"/>
+            file="src/main/java/com/example/android/leanback/SearchActivity.java"
+            line="38"
+            column="26"/>
     </issue>
 
     <issue
@@ -6100,7 +7402,9 @@
         errorLine1="    protected void onActivityResult(int requestCode, int resultCode, Intent data) {"
         errorLine2="                                                                     ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchActivity.java"/>
+            file="src/main/java/com/example/android/leanback/SearchActivity.java"
+            line="58"
+            column="70"/>
     </issue>
 
     <issue
@@ -6109,7 +7413,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchFragment.java"
+            line="88"
+            column="26"/>
     </issue>
 
     <issue
@@ -6118,7 +7424,9 @@
         errorLine1="    public ObjectAdapter getResultsAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchFragment.java"
+            line="102"
+            column="12"/>
     </issue>
 
     <issue
@@ -6127,7 +7435,9 @@
         errorLine1="    public boolean onQueryTextChange(String newQuery) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchFragment.java"
+            line="107"
+            column="38"/>
     </issue>
 
     <issue
@@ -6136,7 +7446,9 @@
         errorLine1="    public boolean onQueryTextSubmit(String query) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchFragment.java"
+            line="115"
+            column="38"/>
     </issue>
 
     <issue
@@ -6145,7 +7457,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState)"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"
+            line="41"
+            column="26"/>
     </issue>
 
     <issue
@@ -6154,7 +7468,9 @@
         errorLine1="    protected void onActivityResult(int requestCode, int resultCode, Intent data) {"
         errorLine2="                                                                     ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"
+            line="61"
+            column="70"/>
     </issue>
 
     <issue
@@ -6163,7 +7479,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+            line="91"
+            column="26"/>
     </issue>
 
     <issue
@@ -6172,7 +7490,9 @@
         errorLine1="    public ObjectAdapter getResultsAdapter() {"
         errorLine2="           ~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+            line="105"
+            column="12"/>
     </issue>
 
     <issue
@@ -6181,7 +7501,9 @@
         errorLine1="    public boolean onQueryTextChange(String newQuery) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+            line="110"
+            column="38"/>
     </issue>
 
     <issue
@@ -6190,7 +7512,9 @@
         errorLine1="    public boolean onQueryTextSubmit(String query) {"
         errorLine2="                                     ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+            line="118"
+            column="38"/>
     </issue>
 
     <issue
@@ -6199,7 +7523,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SettingsActivity.java"/>
+            file="src/main/java/com/example/android/leanback/SettingsActivity.java"
+            line="27"
+            column="26"/>
     </issue>
 
     <issue
@@ -6208,7 +7534,9 @@
         errorLine1="    public boolean onPreferenceStartFragment(PreferenceFragmentCompat preferenceFragment,"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+            line="44"
+            column="46"/>
     </issue>
 
     <issue
@@ -6217,7 +7545,9 @@
         errorLine1="                                             Preference preference) {"
         errorLine2="                                             ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+            line="45"
+            column="46"/>
     </issue>
 
     <issue
@@ -6226,7 +7556,9 @@
         errorLine1="    public boolean onPreferenceStartScreen(PreferenceFragmentCompat preferenceFragment,"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+            line="50"
+            column="44"/>
     </issue>
 
     <issue
@@ -6235,7 +7567,9 @@
         errorLine1="                                           PreferenceScreen preferenceScreen) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+            line="51"
+            column="44"/>
     </issue>
 
     <issue
@@ -6244,7 +7578,9 @@
         errorLine1="        public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                             ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+            line="70"
+            column="30"/>
     </issue>
 
     <issue
@@ -6253,7 +7589,9 @@
         errorLine1="        public void onCreatePreferences(Bundle bundle, String rootKey) {"
         errorLine2="                                        ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+            line="75"
+            column="41"/>
     </issue>
 
     <issue
@@ -6262,7 +7600,9 @@
         errorLine1="        public void onCreatePreferences(Bundle bundle, String rootKey) {"
         errorLine2="                                                       ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+            line="75"
+            column="56"/>
     </issue>
 
     <issue
@@ -6271,7 +7611,9 @@
         errorLine1="        public boolean onPreferenceTreeClick(Preference preference) {"
         errorLine2="                                             ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+            file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+            line="80"
+            column="46"/>
     </issue>
 
     <issue
@@ -6280,7 +7622,9 @@
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="           ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/StringPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/StringPresenter.java"
+            line="28"
+            column="12"/>
     </issue>
 
     <issue
@@ -6289,7 +7633,9 @@
         errorLine1="    public ViewHolder onCreateViewHolder(ViewGroup parent) {"
         errorLine2="                                         ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/StringPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/StringPresenter.java"
+            line="28"
+            column="42"/>
     </issue>
 
     <issue
@@ -6298,7 +7644,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item) {"
         errorLine2="                                 ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/StringPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/StringPresenter.java"
+            line="40"
+            column="34"/>
     </issue>
 
     <issue
@@ -6307,7 +7655,9 @@
         errorLine1="    public void onBindViewHolder(ViewHolder viewHolder, Object item) {"
         errorLine2="                                                        ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/StringPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/StringPresenter.java"
+            line="40"
+            column="57"/>
     </issue>
 
     <issue
@@ -6316,7 +7666,9 @@
         errorLine1="    public void onUnbindViewHolder(ViewHolder viewHolder) {"
         errorLine2="                                   ~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/StringPresenter.java"/>
+            file="src/main/java/com/example/android/leanback/StringPresenter.java"
+            line="46"
+            column="36"/>
     </issue>
 
     <issue
@@ -6325,7 +7677,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="           ~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/TabFragment.java"/>
+            file="src/main/java/com/example/android/leanback/TabFragment.java"
+            line="37"
+            column="12"/>
     </issue>
 
     <issue
@@ -6334,7 +7688,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                             ~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/TabFragment.java"/>
+            file="src/main/java/com/example/android/leanback/TabFragment.java"
+            line="37"
+            column="30"/>
     </issue>
 
     <issue
@@ -6343,7 +7699,9 @@
         errorLine1="    public View onCreateView(LayoutInflater inflater, ViewGroup container,"
         errorLine2="                                                      ~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/TabFragment.java"/>
+            file="src/main/java/com/example/android/leanback/TabFragment.java"
+            line="37"
+            column="55"/>
     </issue>
 
     <issue
@@ -6352,7 +7710,9 @@
         errorLine1="            Bundle savedInstanceState) {"
         errorLine2="            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/TabFragment.java"/>
+            file="src/main/java/com/example/android/leanback/TabFragment.java"
+            line="38"
+            column="13"/>
     </issue>
 
     <issue
@@ -6361,7 +7721,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/TabLayoutActivity.java"/>
+            file="src/main/java/com/example/android/leanback/TabLayoutActivity.java"
+            line="32"
+            column="29"/>
     </issue>
 
     <issue
@@ -6370,7 +7732,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/TimePickerActivity.java"/>
+            file="src/main/java/com/example/android/leanback/TimePickerActivity.java"
+            line="34"
+            column="29"/>
     </issue>
 
     <issue
@@ -6379,7 +7743,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState)"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridActivity.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridActivity.java"
+            line="23"
+            column="26"/>
     </issue>
 
     <issue
@@ -6388,7 +7754,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+            line="50"
+            column="26"/>
     </issue>
 
     <issue
@@ -6397,7 +7765,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState)"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridSupportActivity.java"
+            line="27"
+            column="26"/>
     </issue>
 
     <issue
@@ -6406,7 +7776,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridSupportAppCompatActivity.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridSupportAppCompatActivity.java"
+            line="29"
+            column="26"/>
     </issue>
 
     <issue
@@ -6415,7 +7787,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+            line="53"
+            column="26"/>
     </issue>
 
     <issue
@@ -6424,7 +7798,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VideoActivity.java"/>
+            file="src/main/java/com/example/android/leanback/VideoActivity.java"
+            line="25"
+            column="29"/>
     </issue>
 
     <issue
@@ -6433,7 +7809,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"/>
+            file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"
+            line="37"
+            column="26"/>
     </issue>
 
     <issue
@@ -6442,7 +7820,9 @@
         errorLine1="    protected void onNewIntent(Intent intent) {"
         errorLine2="                               ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"/>
+            file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"
+            line="50"
+            column="32"/>
     </issue>
 
     <issue
@@ -6451,7 +7831,9 @@
         errorLine1="    public static boolean supportsPictureInPicture(Context context) {"
         errorLine2="                                                   ~~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"/>
+            file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"
+            line="65"
+            column="52"/>
     </issue>
 
     <issue
@@ -6460,7 +7842,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VideoConsumptionWithDetailCardFragment.java"/>
+            file="src/main/java/com/example/android/leanback/VideoConsumptionWithDetailCardFragment.java"
+            line="66"
+            column="26"/>
     </issue>
 
     <issue
@@ -6469,7 +7853,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VideoSupportActivity.java"/>
+            file="src/main/java/com/example/android/leanback/VideoSupportActivity.java"
+            line="29"
+            column="29"/>
     </issue>
 
     <issue
@@ -6478,7 +7864,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/leanback/VideoSupportAppCompatActivity.java"/>
+            file="src/main/java/com/example/android/leanback/VideoSupportAppCompatActivity.java"
+            line="29"
+            column="29"/>
     </issue>
 
 </issues>
diff --git a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsActivity.java
index 6e2cbb4d..3f218ab 100644
--- a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsActivity.java
+++ b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsActivity.java
@@ -16,6 +16,7 @@
 import android.app.Activity;
 import android.os.Bundle;
 
+@SuppressWarnings("deprecation")
 public class DetailsActivity extends Activity
 {
     public static final String EXTRA_ITEM = "item";
diff --git a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportActivity.java
index f1a5ceb..8930028 100644
--- a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportActivity.java
+++ b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportActivity.java
@@ -20,6 +20,7 @@
 
 import androidx.fragment.app.FragmentActivity;
 
+@SuppressWarnings("deprecation")
 public class DetailsSupportActivity extends FragmentActivity
 {
     public static final String EXTRA_ITEM = "item";
diff --git a/savedstate/savedstate-ktx/api/1.2.0-beta01.txt b/savedstate/savedstate-ktx/api/1.2.0-beta01.txt
index b01f511..13e3138 100644
--- a/savedstate/savedstate-ktx/api/1.2.0-beta01.txt
+++ b/savedstate/savedstate-ktx/api/1.2.0-beta01.txt
@@ -2,7 +2,7 @@
 package androidx.savedstate {
 
   public final class ViewKt {
-    method @Deprecated public static androidx.savedstate.SavedStateRegistryOwner! findViewTreeSavedStateRegistryOwner(android.view.View);
+    method public static androidx.savedstate.SavedStateRegistryOwner? findViewTreeSavedStateRegistryOwner(android.view.View);
   }
 
 }
diff --git a/savedstate/savedstate-ktx/api/public_plus_experimental_1.2.0-beta01.txt b/savedstate/savedstate-ktx/api/public_plus_experimental_1.2.0-beta01.txt
index b01f511..13e3138 100644
--- a/savedstate/savedstate-ktx/api/public_plus_experimental_1.2.0-beta01.txt
+++ b/savedstate/savedstate-ktx/api/public_plus_experimental_1.2.0-beta01.txt
@@ -2,7 +2,7 @@
 package androidx.savedstate {
 
   public final class ViewKt {
-    method @Deprecated public static androidx.savedstate.SavedStateRegistryOwner! findViewTreeSavedStateRegistryOwner(android.view.View);
+    method public static androidx.savedstate.SavedStateRegistryOwner? findViewTreeSavedStateRegistryOwner(android.view.View);
   }
 
 }
diff --git a/savedstate/savedstate-ktx/api/restricted_1.2.0-beta01.txt b/savedstate/savedstate-ktx/api/restricted_1.2.0-beta01.txt
index b01f511..13e3138 100644
--- a/savedstate/savedstate-ktx/api/restricted_1.2.0-beta01.txt
+++ b/savedstate/savedstate-ktx/api/restricted_1.2.0-beta01.txt
@@ -2,7 +2,7 @@
 package androidx.savedstate {
 
   public final class ViewKt {
-    method @Deprecated public static androidx.savedstate.SavedStateRegistryOwner! findViewTreeSavedStateRegistryOwner(android.view.View);
+    method public static androidx.savedstate.SavedStateRegistryOwner? findViewTreeSavedStateRegistryOwner(android.view.View);
   }
 
 }
diff --git a/savedstate/savedstate/api/1.2.0-beta01.txt b/savedstate/savedstate/api/1.2.0-beta01.txt
index 6fe1a0d..45d2b1f9 100644
--- a/savedstate/savedstate/api/1.2.0-beta01.txt
+++ b/savedstate/savedstate/api/1.2.0-beta01.txt
@@ -2,8 +2,8 @@
 package androidx.savedstate {
 
   public final class SavedStateRegistry {
-    method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String key);
-    method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String key);
+    method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String);
+    method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String);
     method @MainThread public boolean isRestored();
     method @MainThread public void registerSavedStateProvider(String key, androidx.savedstate.SavedStateRegistry.SavedStateProvider provider);
     method @MainThread public void runOnNextRecreation(Class<? extends androidx.savedstate.SavedStateRegistry.AutoRecreated> clazz);
@@ -12,10 +12,10 @@
   }
 
   public static interface SavedStateRegistry.AutoRecreated {
-    method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner owner);
+    method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner);
   }
 
-  public static fun interface SavedStateRegistry.SavedStateProvider {
+  public static interface SavedStateRegistry.SavedStateProvider {
     method public android.os.Bundle saveState();
   }
 
@@ -35,12 +35,11 @@
 
   public interface SavedStateRegistryOwner extends androidx.lifecycle.LifecycleOwner {
     method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
-    property public abstract androidx.savedstate.SavedStateRegistry savedStateRegistry;
   }
 
   public final class ViewTreeSavedStateRegistryOwner {
     method public static androidx.savedstate.SavedStateRegistryOwner? get(android.view.View);
-    method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner? owner);
+    method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner?);
   }
 
 }
diff --git a/savedstate/savedstate/api/public_plus_experimental_1.2.0-beta01.txt b/savedstate/savedstate/api/public_plus_experimental_1.2.0-beta01.txt
index 6fe1a0d..45d2b1f9 100644
--- a/savedstate/savedstate/api/public_plus_experimental_1.2.0-beta01.txt
+++ b/savedstate/savedstate/api/public_plus_experimental_1.2.0-beta01.txt
@@ -2,8 +2,8 @@
 package androidx.savedstate {
 
   public final class SavedStateRegistry {
-    method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String key);
-    method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String key);
+    method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String);
+    method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String);
     method @MainThread public boolean isRestored();
     method @MainThread public void registerSavedStateProvider(String key, androidx.savedstate.SavedStateRegistry.SavedStateProvider provider);
     method @MainThread public void runOnNextRecreation(Class<? extends androidx.savedstate.SavedStateRegistry.AutoRecreated> clazz);
@@ -12,10 +12,10 @@
   }
 
   public static interface SavedStateRegistry.AutoRecreated {
-    method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner owner);
+    method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner);
   }
 
-  public static fun interface SavedStateRegistry.SavedStateProvider {
+  public static interface SavedStateRegistry.SavedStateProvider {
     method public android.os.Bundle saveState();
   }
 
@@ -35,12 +35,11 @@
 
   public interface SavedStateRegistryOwner extends androidx.lifecycle.LifecycleOwner {
     method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
-    property public abstract androidx.savedstate.SavedStateRegistry savedStateRegistry;
   }
 
   public final class ViewTreeSavedStateRegistryOwner {
     method public static androidx.savedstate.SavedStateRegistryOwner? get(android.view.View);
-    method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner? owner);
+    method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner?);
   }
 
 }
diff --git a/savedstate/savedstate/api/restricted_1.2.0-beta01.txt b/savedstate/savedstate/api/restricted_1.2.0-beta01.txt
index 6fe1a0d..45d2b1f9 100644
--- a/savedstate/savedstate/api/restricted_1.2.0-beta01.txt
+++ b/savedstate/savedstate/api/restricted_1.2.0-beta01.txt
@@ -2,8 +2,8 @@
 package androidx.savedstate {
 
   public final class SavedStateRegistry {
-    method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String key);
-    method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String key);
+    method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String);
+    method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String);
     method @MainThread public boolean isRestored();
     method @MainThread public void registerSavedStateProvider(String key, androidx.savedstate.SavedStateRegistry.SavedStateProvider provider);
     method @MainThread public void runOnNextRecreation(Class<? extends androidx.savedstate.SavedStateRegistry.AutoRecreated> clazz);
@@ -12,10 +12,10 @@
   }
 
   public static interface SavedStateRegistry.AutoRecreated {
-    method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner owner);
+    method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner);
   }
 
-  public static fun interface SavedStateRegistry.SavedStateProvider {
+  public static interface SavedStateRegistry.SavedStateProvider {
     method public android.os.Bundle saveState();
   }
 
@@ -35,12 +35,11 @@
 
   public interface SavedStateRegistryOwner extends androidx.lifecycle.LifecycleOwner {
     method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
-    property public abstract androidx.savedstate.SavedStateRegistry savedStateRegistry;
   }
 
   public final class ViewTreeSavedStateRegistryOwner {
     method public static androidx.savedstate.SavedStateRegistryOwner? get(android.view.View);
-    method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner? owner);
+    method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner?);
   }
 
 }
diff --git a/security/security-crypto/lint-baseline.xml b/security/security-crypto/lint-baseline.xml
index 7d4fade..b611da6 100644
--- a/security/security-crypto/lint-baseline.xml
+++ b/security/security-crypto/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/security/security-identity-credential/lint-baseline.xml b/security/security-identity-credential/lint-baseline.xml
index 1fc8cd4..b2cb849 100644
--- a/security/security-identity-credential/lint-baseline.xml
+++ b/security/security-identity-credential/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="WrongConstant"
diff --git a/settings.gradle b/settings.gradle
index 374bd27..212e59b 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -92,6 +92,7 @@
         value("androidx.projects", getRequestedProjectSubsetName() ?: "Unset")
         value("androidx.useMaxDepVersions", providers.gradleProperty("androidx.useMaxDepVersions").isPresent().toString())
 
+        // Publish scan for androidx-main
         publishAlways()
         publishIfAuthenticated()
     }
@@ -649,6 +650,7 @@
 includeProject(":glance:glance-appwidget:integration-tests:demos", [BuildType.GLANCE])
 includeProject(":glance:glance-appwidget:integration-tests:template-demos", [BuildType.GLANCE])
 includeProject(":glance:glance-appwidget:glance-layout-generator", [BuildType.GLANCE])
+includeProject(":glance:glance-preview", [BuildType.GLANCE])
 includeProject(":glance:glance-wear-tiles:integration-tests:demos", [BuildType.GLANCE])
 includeProject(":glance:glance-wear-tiles:integration-tests:template-demos", [BuildType.GLANCE])
 includeProject(":glance:glance-wear-tiles", [BuildType.GLANCE])
@@ -658,6 +660,7 @@
 includeProject(":health:health-connect-client-samples", "health/health-connect-client/samples", [BuildType.MAIN])
 includeProject(":health:health-services-client", [BuildType.MAIN])
 includeProject(":heifwriter:heifwriter", [BuildType.MAIN])
+includeProject(":graphics:graphics-core", [BuildType.MAIN])
 includeProject(":hilt:hilt-common", [BuildType.MAIN])
 includeProject(":hilt:hilt-compiler", [BuildType.MAIN])
 includeProject(":hilt:hilt-navigation", [BuildType.MAIN, BuildType.COMPOSE])
@@ -912,7 +915,7 @@
 includeProject(":window:extensions:extensions", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
 includeProject(":window:integration-tests:configuration-change-tests", [BuildType.MAIN])
 includeProject(":window:sidecar:sidecar", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:window-java", [BuildType.MAIN, BuildType.CAMERA])
+includeProject(":window:window-java", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
 includeProject(":window:window-rxjava2", [BuildType.MAIN])
 includeProject(":window:window-rxjava3", [BuildType.MAIN])
 includeProject(":window:window-samples", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
diff --git a/sharetarget/integration-tests/testapp/lint-baseline.xml b/sharetarget/integration-tests/testapp/lint-baseline.xml
index f77cc90..1e71b3e 100644
--- a/sharetarget/integration-tests/testapp/lint-baseline.xml
+++ b/sharetarget/integration-tests/testapp/lint-baseline.xml
@@ -16,7 +16,9 @@
         errorLine1="                    removeAllDirectShareTargets();"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/sharetarget/testapp/MainActivity.java"/>
+            file="src/main/java/androidx/sharetarget/testapp/MainActivity.java"
+            line="61"
+            column="21"/>
     </issue>
 
     <issue
@@ -25,7 +27,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/sharetarget/testapp/MainActivity.java"/>
+            file="src/main/java/androidx/sharetarget/testapp/MainActivity.java"
+            line="45"
+            column="29"/>
     </issue>
 
     <issue
@@ -34,7 +38,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/sharetarget/testapp/OtherTextConsumerActivity.java"/>
+            file="src/main/java/androidx/sharetarget/testapp/OtherTextConsumerActivity.java"
+            line="30"
+            column="29"/>
     </issue>
 
     <issue
@@ -43,7 +49,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/androidx/sharetarget/testapp/TextConsumerActivity.java"/>
+            file="src/main/java/androidx/sharetarget/testapp/TextConsumerActivity.java"
+            line="30"
+            column="29"/>
     </issue>
 
 </issues>
diff --git a/sharetarget/sharetarget/lint-baseline.xml b/sharetarget/sharetarget/lint-baseline.xml
index fa922df..7e05b5c 100644
--- a/sharetarget/sharetarget/lint-baseline.xml
+++ b/sharetarget/sharetarget/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
diff --git a/slice/slice-builders/lint-baseline.xml b/slice/slice-builders/lint-baseline.xml
index 251ab76..c8166a0 100644
--- a/slice/slice-builders/lint-baseline.xml
+++ b/slice/slice-builders/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="WrongConstant"
diff --git a/slice/slice-core/lint-baseline.xml b/slice/slice-core/lint-baseline.xml
index 3d75719..90d930b 100644
--- a/slice/slice-core/lint-baseline.xml
+++ b/slice/slice-core/lint-baseline.xml
@@ -1,194 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.3.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.0-alpha07)" variant="all" version="7.3.0-alpha07">
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 24 (current min is 19): `android.content.pm.PackageManager#getPackageUid`"
-        errorLine1="        mTestUid = mContext.getPackageManager().getPackageUid(mTestPkg, 0);"
-        errorLine2="                                                ~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/slice/SlicePermissionTest.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST, but could be Slice.HINT_SUMMARY, SliceHints.HINT_ACTIVITY, SliceHints.HINT_CACHED, SliceHints.HINT_END_OF_SECTION, SliceHints.HINT_SELECTION_OPTION, SliceHints.HINT_RAW, SliceHints.HINT_OVERLAY, SliceHints.HINT_SHOW_LABEL"
-        errorLine1="        builder.addHints(slice.getHints());"
-        errorLine2="                         ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
-        errorLine1="                    builder.addSubSlice(unwrap(item.getSlice()), item.getSubType());"
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST, but could be Slice.HINT_SUMMARY, SliceHints.HINT_ACTIVITY, SliceHints.HINT_CACHED, SliceHints.HINT_END_OF_SECTION, SliceHints.HINT_SELECTION_OPTION, SliceHints.HINT_RAW, SliceHints.HINT_OVERLAY, SliceHints.HINT_SHOW_LABEL"
-        errorLine1="                    builder.addIcon(item.getIcon().toIcon(), item.getSubType(), item.getHints());"
-        errorLine2="                                                                                ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
-        errorLine1="                    builder.addIcon(item.getIcon().toIcon(), item.getSubType(), item.getHints());"
-        errorLine2="                                                             ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
-        errorLine1="                    builder.addRemoteInput(item.getRemoteInput(), item.getSubType(),"
-        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST, but could be Slice.HINT_SUMMARY, SliceHints.HINT_ACTIVITY, SliceHints.HINT_CACHED, SliceHints.HINT_END_OF_SECTION, SliceHints.HINT_SELECTION_OPTION, SliceHints.HINT_RAW, SliceHints.HINT_OVERLAY, SliceHints.HINT_SHOW_LABEL"
-        errorLine1="                            item.getHints());"
-        errorLine2="                            ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
-        errorLine1="                    builder.addAction(item.getAction(), unwrap(item.getSlice()), item.getSubType());"
-        errorLine2="                                                                                 ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST, but could be Slice.HINT_SUMMARY, SliceHints.HINT_ACTIVITY, SliceHints.HINT_CACHED, SliceHints.HINT_END_OF_SECTION, SliceHints.HINT_SELECTION_OPTION, SliceHints.HINT_RAW, SliceHints.HINT_OVERLAY, SliceHints.HINT_SHOW_LABEL"
-        errorLine1="                    builder.addText(item.getText(), item.getSubType(), item.getHints());"
-        errorLine2="                                                                       ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
-        errorLine1="                    builder.addText(item.getText(), item.getSubType(), item.getHints());"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST, but could be Slice.HINT_SUMMARY, SliceHints.HINT_ACTIVITY, SliceHints.HINT_CACHED, SliceHints.HINT_END_OF_SECTION, SliceHints.HINT_SELECTION_OPTION, SliceHints.HINT_RAW, SliceHints.HINT_OVERLAY, SliceHints.HINT_SHOW_LABEL"
-        errorLine1="                    builder.addInt(item.getInt(), item.getSubType(), item.getHints());"
-        errorLine2="                                                                     ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
-        errorLine1="                    builder.addInt(item.getInt(), item.getSubType(), item.getHints());"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST, but could be Slice.HINT_SUMMARY, SliceHints.HINT_ACTIVITY, SliceHints.HINT_CACHED, SliceHints.HINT_END_OF_SECTION, SliceHints.HINT_SELECTION_OPTION, SliceHints.HINT_RAW, SliceHints.HINT_OVERLAY, SliceHints.HINT_SHOW_LABEL"
-        errorLine1="                    builder.addLong(item.getLong(), item.getSubType(), item.getHints());"
-        errorLine2="                                                                       ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
-        errorLine1="                    builder.addLong(item.getLong(), item.getSubType(), item.getHints());"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST, but could be Slice.HINT_SUMMARY, SliceHints.HINT_ACTIVITY, SliceHints.HINT_CACHED, SliceHints.HINT_END_OF_SECTION, SliceHints.HINT_SELECTION_OPTION, SliceHints.HINT_RAW, SliceHints.HINT_OVERLAY, SliceHints.HINT_SHOW_LABEL"
-        errorLine1="                    builder.addBundle((Bundle) item.mObj, item.getSubType(), item.getHints());"
-        errorLine2="                                                                             ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
-        errorLine1="                    builder.addBundle((Bundle) item.mObj, item.getSubType(), item.getHints());"
-        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="WrongConstant"
-        message="Must be one of: PermissionChecker.PERMISSION_GRANTED, PermissionChecker.PERMISSION_DENIED, PermissionChecker.PERMISSION_DENIED_APP_OP, but could be PackageManager.PERMISSION_GRANTED, PackageManager.PERMISSION_DENIED"
-        errorLine1="        return mManager.checkSlicePermission(uri, pid, uid);"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceManagerWrapper.java"/>
-    </issue>
-
-    <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="    private synchronized void persist(PermissionState state) {"
-        errorLine2="    ^">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="    /**"
-        errorLine2="    ^">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="    /**"
-        errorLine2="    ^">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="    /**"
-        errorLine2="    ^">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanUncheckedReflection"
@@ -200,1320 +11,6 @@
     </issue>
 
     <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.slice.Slice is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="        return SliceConvert.wrap(context.getSystemService(SliceManager.class)"
-        errorLine2="                                         ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 28; however, the containing class androidx.slice.Slice is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                .bindSlice(uri, unwrap(supportedSpecs)), context);"
-        errorLine2="                 ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 24; however, the containing class androidx.slice.compat.SliceProviderCompat.ProviderHolder is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                mProvider.close();"
-        errorLine2="                          ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/SliceProviderCompat.java"/>
-    </issue>
-
-    <issue
-        id="LambdaLast"
-        message="Functional interface parameters (such as parameter 1, &quot;action&quot;, in androidx.slice.Slice.Builder.addAction) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions"
-        errorLine1="                @NonNull Slice s, @Nullable String subType) {"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="LambdaLast"
-        message="Functional interface parameters (such as parameter 1, &quot;action&quot;, in androidx.slice.SliceItem.SliceItem) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions"
-        errorLine1="            @Slice.SliceHint String[] hints) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CompatPermissionManager(Context context, String prefsName, int myUid,"
-        errorLine2="                                   ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CompatPermissionManager(Context context, String prefsName, int myUid,"
-        errorLine2="                                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            String[] autoGrantPermissions) {"
-        errorLine2="            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public int checkSlicePermission(Uri uri, int pid, int uid) {"
-        errorLine2="                                    ~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void grantSlicePermission(Uri uri, String toPkg) {"
-        errorLine2="                                     ~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void grantSlicePermission(Uri uri, String toPkg) {"
-        errorLine2="                                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void revokeSlicePermission(Uri uri, String toPkg) {"
-        errorLine2="                                      ~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void revokeSlicePermission(Uri uri, String toPkg) {"
-        errorLine2="                                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public String getKey() {"
-        errorLine2="               ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Set&lt;String> toPersistable() {"
-        errorLine2="               ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public boolean hasAccess(List&lt;String> path) {"
-        errorLine2="                                 ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CompatPinnedList(Context context, String prefsName) {"
-        errorLine2="                            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CompatPinnedList(Context context, String prefsName) {"
-        errorLine2="                                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;Uri> getPinnedSlices() {"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public synchronized ArraySet&lt;SliceSpec> getSpecs(Uri uri) {"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public synchronized ArraySet&lt;SliceSpec> getSpecs(Uri uri) {"
-        errorLine2="                                                     ~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public synchronized boolean addPin(Uri uri, String pkg, Set&lt;SliceSpec> specs) {"
-        errorLine2="                                       ~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public synchronized boolean addPin(Uri uri, String pkg, Set&lt;SliceSpec> specs) {"
-        errorLine2="                                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public synchronized boolean addPin(Uri uri, String pkg, Set&lt;SliceSpec> specs) {"
-        errorLine2="                                                            ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public synchronized boolean removePin(Uri uri, String pkg) {"
-        errorLine2="                                          ~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public synchronized boolean removePin(Uri uri, String pkg) {"
-        errorLine2="                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Slice(Bundle in) {"
-        errorLine2="                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Bundle toBundle() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Uri getUri() {"
-        errorLine2="           ~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public List&lt;SliceItem> getItems() {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem[] getItemArray() {"
-        errorLine2="           ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public @SliceHint List&lt;String> getHints() {"
-        errorLine2="                      ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public @SliceHint String[] getHintArray() {"
-        errorLine2="                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public boolean hasHint(@SliceHint String hint) {"
-        errorLine2="                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setSpec(SliceSpec spec) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder setSpec(SliceSpec spec) {"
-        errorLine2="                               ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addHints(@SliceHint String... hints) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addHints(@SliceHint String... hints) {"
-        errorLine2="                                           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addHints(@SliceHint List&lt;String> hints) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addHints(@SliceHint List&lt;String> hints) {"
-        errorLine2="                                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addSubSlice(@NonNull Slice slice) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addSubSlice(@NonNull Slice slice, String subType) {"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addSubSlice(@NonNull Slice slice, String subType) {"
-        errorLine2="                                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice.Builder addAction(@NonNull PendingIntent action,"
-        errorLine2="               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice.Builder addAction(@NonNull SliceItem.ActionHandler action,"
-        errorLine2="               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addText(CharSequence text, @Nullable String subType,"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addText(CharSequence text, @Nullable String subType,"
-        errorLine2="                               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="                @SliceHint String... hints) {"
-        errorLine2="                           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addText(CharSequence text, @Nullable String subType,"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addText(CharSequence text, @Nullable String subType,"
-        errorLine2="                               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="                @SliceHint List&lt;String> hints) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addIcon(IconCompat icon, @Nullable String subType,"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addIcon(IconCompat icon, @Nullable String subType,"
-        errorLine2="                               ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="                @SliceHint String... hints) {"
-        errorLine2="                           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addIcon(IconCompat icon, @Nullable String subType,"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addIcon(IconCompat icon, @Nullable String subType,"
-        errorLine2="                               ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="                @SliceHint List&lt;String> hints) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
-        errorLine2="               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
-        errorLine2="                                            ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="                @SliceHint List&lt;String> hints) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
-        errorLine2="               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
-        errorLine2="                                            ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="                @SliceHint String... hints) {"
-        errorLine2="                           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addInt(int value, @Nullable String subType,"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="                @SliceHint String... hints) {"
-        errorLine2="                           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Builder addInt(int value, @Nullable String subType,"
-        errorLine2="               ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="                @SliceHint List&lt;String> hints) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice.Builder addLong(long time, @Nullable String subType,"
-        errorLine2="               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="                @SliceHint String... hints) {"
-        errorLine2="                           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice.Builder addLong(long time, @Nullable String subType,"
-        errorLine2="               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="                @SliceHint List&lt;String> hints) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice.Builder addTimestamp(long time, @Nullable String subType,"
-        errorLine2="               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="                @SliceHint List&lt;String> hints) {"
-        errorLine2="                           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice.Builder addItem(SliceItem item) {"
-        errorLine2="               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice.Builder addItem(SliceItem item) {"
-        errorLine2="                                     ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public Slice build() {"
-        errorLine2="               ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String toString(String indent) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String toString(String indent) {"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static void appendHints(StringBuilder sb, String[] hints) {"
-        errorLine2="                                   ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static void appendHints(StringBuilder sb, String[] hints) {"
-        errorLine2="                                                     ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static Slice bindSlice(Context context, @NonNull Uri uri,"
-        errorLine2="                                  ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Set&lt;SliceSpec> supportedSpecs) {"
-        errorLine2="            ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/Slice.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    SliceAction setChecked(boolean isChecked);"
-        errorLine2="    ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    SliceAction setPriority(@IntRange(from = 0) int priority);"
-        errorLine2="    ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceAction.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceActionImpl(SliceItem slice) {"
-        errorLine2="                           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceActionImpl setChecked(boolean isChecked) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceActionImpl setPriority(@IntRange(from = 0) int priority) {"
-        errorLine2="           ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem getActionItem() {"
-        errorLine2="           ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static android.app.slice.Slice unwrap(androidx.slice.Slice slice) {"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static android.app.slice.Slice unwrap(androidx.slice.Slice slice) {"
-        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static androidx.slice.Slice wrap(android.app.slice.Slice slice, Context context) {"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static androidx.slice.Slice wrap(android.app.slice.Slice slice, Context context) {"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static androidx.slice.Slice wrap(android.app.slice.Slice slice, Context context) {"
-        errorLine2="                                                                           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static Set&lt;androidx.slice.SliceSpec> wrap("
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            Set&lt;android.app.slice.SliceSpec> supportedSpecs) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceConvert.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    protected @Slice.SliceHint String[] mHints = Slice.NO_HINTS;"
-        errorLine2="                               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
-        errorLine2="                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
-        errorLine2="                                                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            @Slice.SliceHint String[] hints) {"
-        errorLine2="                             ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
-        errorLine2="                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(Object obj, @SliceType String format, String subType,"
-        errorLine2="                                                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            @Slice.SliceHint List&lt;String> hints) {"
-        errorLine2="                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
-        errorLine2="                     ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
-        errorLine2="                                           ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
-        errorLine2="                                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
-        errorLine2="                                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            @Slice.SliceHint String[] hints) {"
-        errorLine2="                             ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
-        errorLine2="                     ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
-        errorLine2="                                           ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
-        errorLine2="                                                        ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
-        errorLine2="                                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            @Slice.SliceHint String[] hints) {"
-        errorLine2="                             ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void addHint(@Slice.SliceHint String hint) {"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public @SliceType String getFormat() {"
-        errorLine2="                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getSubType() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CharSequence getText() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public CharSequence getSanitizedText() {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public IconCompat getIcon() {"
-        errorLine2="           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public PendingIntent getAction() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public RemoteInput getRemoteInput() {"
-        errorLine2="           ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Slice getSlice() {"
-        errorLine2="           ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public boolean hasHint(@Slice.SliceHint String hint) {"
-        errorLine2="                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItem(Bundle in) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Bundle toBundle() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public boolean hasHints(@Slice.SliceHint String[] hints) {"
-        errorLine2="                                             ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public boolean hasAnyHints(@Slice.SliceHint String... hints) {"
-        errorLine2="                                                ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static String typeToString(String format) {"
-        errorLine2="                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static String typeToString(String format) {"
-        errorLine2="                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String toString(String indent) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String toString(String indent) {"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        void onAction(SliceItem item, Context context, Intent intent);"
-        errorLine2="                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        void onAction(SliceItem item, Context context, Intent intent);"
-        errorLine2="                                      ~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        void onAction(SliceItem item, Context context, Intent intent);"
-        errorLine2="                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItem.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static HolderHandler sHandler;"
-        errorLine2="                  ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public VersionedParcelable mVersionedParcelable = null;"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItemHolder(String format, Object mObj, boolean isStream) {"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SliceItemHolder(String format, Object mObj, boolean isStream) {"
-        errorLine2="                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Object getObj(String format) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public Object getObj(String format) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        void handle(SliceItemHolder holder, String format);"
-        errorLine2="                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        void handle(SliceItemHolder holder, String format);"
-        errorLine2="                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public SliceItemHolder get() {"
-        errorLine2="               ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="        public void release(SliceItemHolder sliceItemHolder) {"
-        errorLine2="                            ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceItemHolder.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
-        errorLine2="                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/compat/SlicePermissionActivity.java"/>
-    </issue>
-
-    <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SliceProviderWrapper(androidx.slice.SliceProvider provider,"
@@ -1594,688 +91,4 @@
             file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static boolean hasAnyHints(SliceItem item, String... hints) {"
-        errorLine2="                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static boolean hasAnyHints(SliceItem item, String... hints) {"
-        errorLine2="                                                      ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static boolean hasHints(SliceItem item, String... hints) {"
-        errorLine2="                                   ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static boolean hasHints(SliceItem item, String... hints) {"
-        errorLine2="                                                   ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static boolean hasHints(Slice item, String... hints) {"
-        errorLine2="                                   ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static boolean hasHints(Slice item, String... hints) {"
-        errorLine2="                                               ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findNotContaining(SliceItem container, List&lt;SliceItem> list) {"
-        errorLine2="                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findNotContaining(SliceItem container, List&lt;SliceItem> list) {"
-        errorLine2="                                              ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findNotContaining(SliceItem container, List&lt;SliceItem> list) {"
-        errorLine2="                                                                   ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format) {"
-        errorLine2="                  ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format) {"
-        errorLine2="                                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format) {"
-        errorLine2="                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(Slice s, String format, String hints, String nonHints) {"
-        errorLine2="                  ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(Slice s, String format, String hints, String nonHints) {"
-        errorLine2="                                          ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(Slice s, String format, String hints, String nonHints) {"
-        errorLine2="                                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(Slice s, String format, String hints, String nonHints) {"
-        errorLine2="                                                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(Slice s, String format, String hints, String nonHints) {"
-        errorLine2="                                                                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format, String hints,"
-        errorLine2="                  ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format, String hints,"
-        errorLine2="                                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format, String hints,"
-        errorLine2="                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, String format, String hints,"
-        errorLine2="                                                                      ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            String nonHints) {"
-        errorLine2="            ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(Slice s, final String format, final String[] hints,"
-        errorLine2="                  ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(Slice s, final String format, final String[] hints,"
-        errorLine2="                                          ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(Slice s, final String format, final String[] hints,"
-        errorLine2="                                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(Slice s, final String format, final String[] hints,"
-        errorLine2="                                                                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            final String[] nonHints) {"
-        errorLine2="                  ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, final String format, final String[] hints,"
-        errorLine2="                  ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, final String format, final String[] hints,"
-        errorLine2="                                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, final String format, final String[] hints,"
-        errorLine2="                                                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static List&lt;SliceItem> findAll(SliceItem s, final String format, final String[] hints,"
-        errorLine2="                                                                                  ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            final String[] nonHints) {"
-        errorLine2="                  ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
-        errorLine2="                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
-        errorLine2="                                 ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
-        errorLine2="                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
-        errorLine2="                                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
-        errorLine2="                                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, String format) {"
-        errorLine2="                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, String format) {"
-        errorLine2="                                 ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, String format) {"
-        errorLine2="                                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, String format) {"
-        errorLine2="                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, String format) {"
-        errorLine2="                                 ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, String format) {"
-        errorLine2="                                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
-        errorLine2="                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
-        errorLine2="                                 ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
-        errorLine2="                                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
-        errorLine2="                                                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
-        errorLine2="                                                                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, final String format, final String[] hints,"
-        errorLine2="                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, final String format, final String[] hints,"
-        errorLine2="                                 ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, final String format, final String[] hints,"
-        errorLine2="                                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(Slice s, final String format, final String[] hints,"
-        errorLine2="                                                                     ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            final String[] nonHints) {"
-        errorLine2="                  ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
-        errorLine2="                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
-        errorLine2="                                        ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
-        errorLine2="                                                       ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
-        errorLine2="                                                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
-        errorLine2="                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
-        errorLine2="                                        ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
-        errorLine2="                                                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
-        errorLine2="                                                                                ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, final String format, final String[] hints,"
-        errorLine2="                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, final String format, final String[] hints,"
-        errorLine2="                                 ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, final String format, final String[] hints,"
-        errorLine2="                                                    ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem find(SliceItem s, final String format, final String[] hints,"
-        errorLine2="                                                                         ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            final String[] nonHints) {"
-        errorLine2="                  ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
-        errorLine2="                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
-        errorLine2="                                             ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
-        errorLine2="                                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
-        errorLine2="                                                                                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            final String[] hints, final String[] nonHints) {"
-        errorLine2="                  ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            final String[] hints, final String[] nonHints) {"
-        errorLine2="                                        ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findItem(Slice s, final Uri uri) {"
-        errorLine2="                  ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findItem(Slice s, final Uri uri) {"
-        errorLine2="                                     ~~~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static SliceItem findItem(Slice s, final Uri uri) {"
-        errorLine2="                                                    ~~~">
-        <location
-            file="src/main/java/androidx/slice/core/SliceQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getType() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/slice/SliceSpec.java"/>
-    </issue>
-
 </issues>
diff --git a/slice/slice-test/lint-baseline.xml b/slice/slice-test/lint-baseline.xml
index a2616bf..67f3065 100644
--- a/slice/slice-test/lint-baseline.xml
+++ b/slice/slice-test/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
diff --git a/slice/slice-view/lint-baseline.xml b/slice/slice-view/lint-baseline.xml
index fc94cc9..2a146f2 100644
--- a/slice/slice-view/lint-baseline.xml
+++ b/slice/slice-view/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/slice/slice-view/src/androidTest/java/androidx/slice/SliceViewManagerTest.java b/slice/slice-view/src/androidTest/java/androidx/slice/SliceViewManagerTest.java
index c276a95..357de26 100644
--- a/slice/slice-view/src/androidTest/java/androidx/slice/SliceViewManagerTest.java
+++ b/slice/slice-view/src/androidTest/java/androidx/slice/SliceViewManagerTest.java
@@ -42,6 +42,7 @@
 import androidx.slice.widget.SliceLiveData;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.FlakyTest;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
 
@@ -109,6 +110,7 @@
         verify(mSliceProvider, timeout(2000)).onSliceUnpinned(eq(uri));
     }
 
+    @FlakyTest(bugId = 239964752)
     @Test
     public void testPinList() {
         Uri uri = new Uri.Builder()
diff --git a/sqlite/sqlite-framework/lint-baseline.xml b/sqlite/sqlite-framework/lint-baseline.xml
index 985b8ee..fc2beac 100644
--- a/sqlite/sqlite-framework/lint-baseline.xml
+++ b/sqlite/sqlite-framework/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
diff --git a/sqlite/sqlite-inspection/lint-baseline.xml b/sqlite/sqlite-inspection/lint-baseline.xml
deleted file mode 100644
index 7c3078b..0000000
--- a/sqlite/sqlite-inspection/lint-baseline.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="BanUncheckedReflection"
-        message="Calling `Method.invoke` without an SDK check"
-        errorLine1="                    mRefreshMethod.invoke(instance);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/inspection/RoomInvalidationRegistry.java"/>
-    </issue>
-
-    <issue
-        id="BanUncheckedReflection"
-        message="Calling `Method.invoke` without an SDK check"
-        errorLine1="            mNotifyDataChangeMethod.invoke(query);"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/inspection/SqlDelightInvalidation.java"/>
-    </issue>
-
-</issues>
diff --git a/sqlite/sqlite/lint-baseline.xml b/sqlite/sqlite/lint-baseline.xml
index f6fbbb4..58c8b41 100644
--- a/sqlite/sqlite/lint-baseline.xml
+++ b/sqlite/sqlite/lint-baseline.xml
@@ -1,374 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SimpleSQLiteQuery(String query, @Nullable Object[] bindArgs) {"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SimpleSQLiteQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public SimpleSQLiteQuery(String query) {"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SimpleSQLiteQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public String getSql() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SimpleSQLiteQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public void bindTo(SupportSQLiteProgram statement) {"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SimpleSQLiteQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static void bind(SupportSQLiteProgram statement, Object[] bindArgs) {"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SimpleSQLiteQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    public static void bind(SupportSQLiteProgram statement, Object[] bindArgs) {"
-        errorLine2="                                                            ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SimpleSQLiteQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    SupportSQLiteStatement compileStatement(String sql);"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    SupportSQLiteStatement compileStatement(String sql);"
-        errorLine2="                                            ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void beginTransactionWithListener(SQLiteTransactionListener transactionListener);"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void beginTransactionWithListenerNonExclusive(SQLiteTransactionListener transactionListener);"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    Cursor query(String query);"
-        errorLine2="    ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    Cursor query(String query);"
-        errorLine2="                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    Cursor query(String query, Object[] bindArgs);"
-        errorLine2="    ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    Cursor query(String query, Object[] bindArgs);"
-        errorLine2="                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    Cursor query(String query, Object[] bindArgs);"
-        errorLine2="                               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    Cursor query(SupportSQLiteQuery query);"
-        errorLine2="    ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    Cursor query(SupportSQLiteQuery query);"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    Cursor query(SupportSQLiteQuery query, CancellationSignal cancellationSignal);"
-        errorLine2="    ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    Cursor query(SupportSQLiteQuery query, CancellationSignal cancellationSignal);"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    Cursor query(SupportSQLiteQuery query, CancellationSignal cancellationSignal);"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    long insert(String table, int conflictAlgorithm, ContentValues values) throws SQLException;"
-        errorLine2="                ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    long insert(String table, int conflictAlgorithm, ContentValues values) throws SQLException;"
-        errorLine2="                                                     ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    int delete(String table, String whereClause, Object[] whereArgs);"
-        errorLine2="               ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    int delete(String table, String whereClause, Object[] whereArgs);"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    int delete(String table, String whereClause, Object[] whereArgs);"
-        errorLine2="                                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    int update(String table, int conflictAlgorithm,"
-        errorLine2="               ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            ContentValues values, String whereClause, Object[] whereArgs);"
-        errorLine2="            ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            ContentValues values, String whereClause, Object[] whereArgs);"
-        errorLine2="                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="            ContentValues values, String whereClause, Object[] whereArgs);"
-        errorLine2="                                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void execSQL(String sql) throws SQLException;"
-        errorLine2="                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void execSQL(String sql, Object[] bindArgs) throws SQLException;"
-        errorLine2="                 ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void execSQL(String sql, Object[] bindArgs) throws SQLException;"
-        errorLine2="                             ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    String getPath();"
-        errorLine2="    ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void setLocale(Locale locale);"
-        errorLine2="                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    List&lt;Pair&lt;String, String>> getAttachedDbs();"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteDatabase.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    SupportSQLiteDatabase getWritableDatabase();"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteOpenHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    SupportSQLiteDatabase getReadableDatabase();"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteOpenHelper.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void bindString(int index, String value);"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteProgram.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void bindBlob(int index, byte[] value);"
-        errorLine2="                             ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteProgram.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    String getSql();"
-        errorLine2="    ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteQuery.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    void bindTo(SupportSQLiteProgram statement);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteQuery.java"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
@@ -523,13 +154,4 @@
             file="src/main/java/androidx/sqlite/db/SupportSQLiteQueryBuilder.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
-        errorLine1="    String simpleQueryForString();"
-        errorLine2="    ~~~~~~">
-        <location
-            file="src/main/java/androidx/sqlite/db/SupportSQLiteStatement.java"/>
-    </issue>
-
 </issues>
diff --git a/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml b/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
index 47e64c7..f9d16b9 100644
--- a/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
+++ b/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (7.1.0-beta02)" variant="all" version="7.1.0-beta02">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="KotlinPropertyAccess"
@@ -15,7 +15,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void draw(Canvas canvas) {"
         errorLine2="                     ~~~~~~">
         <location
@@ -24,7 +24,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setColorFilter(ColorFilter colorFilter) {"
         errorLine2="                               ~~~~~~~~~~~">
         <location
@@ -33,133 +33,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected Parcelable onSaveInstanceState() {"
-        errorLine2="              ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onRestoreInstanceState(Parcelable state) {"
-        errorLine2="                                          ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setColorScheme(@ColorRes int... colors) {"
-        errorLine2="                                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setColorSchemeResources(@ColorRes int... colorResIds) {"
-        errorLine2="                                                  ~~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setColorSchemeColors(@ColorInt int... colors) {"
-        errorLine2="                                               ~~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onInterceptTouchEvent(MotionEvent ev) {"
-        errorLine2="                                         ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onStartNestedScroll(View child, View target, int axes, int type) {"
-        errorLine2="                                       ~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onStartNestedScroll(View child, View target, int axes, int type) {"
-        errorLine2="                                                   ~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes, int type) {"
-        errorLine2="                                       ~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes, int type) {"
-        errorLine2="                                                   ~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onStopNestedScroll(View target, int type) {"
-        errorLine2="                                   ~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed,"
-        errorLine2="                               ~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed, int type) {"
-        errorLine2="                                  ~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed, int type) {"
-        errorLine2="                                                               ~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {"
         errorLine2="                                       ~~~~">
         <location
@@ -168,7 +42,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {"
         errorLine2="                                                   ~~~~">
         <location
@@ -177,7 +51,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes) {"
         errorLine2="                                       ~~~~">
         <location
@@ -186,7 +60,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onNestedScrollAccepted(View child, View target, int axes) {"
         errorLine2="                                                   ~~~~">
         <location
@@ -195,7 +69,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {"
         errorLine2="                                  ~~~~">
         <location
@@ -204,7 +78,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {"
         errorLine2="                                                               ~~~~~">
         <location
@@ -213,7 +87,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onStopNestedScroll(View target) {"
         errorLine2="                                   ~~~~">
         <location
@@ -222,7 +96,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onNestedScroll(final View target, final int dxConsumed, final int dyConsumed,"
         errorLine2="                                     ~~~~">
         <location
@@ -231,7 +105,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onNestedPreFling(View target, float velocityX,"
         errorLine2="                                    ~~~~">
         <location
@@ -240,74 +114,11 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public boolean onNestedFling(View target, float velocityX, float velocityY,"
         errorLine2="                                 ~~~~">
         <location
             file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            int dyUnconsumed, int[] offsetInWindow, int type) {"
-        errorLine2="                              ~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow,"
-        errorLine2="                                                           ~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow,"
-        errorLine2="                                                                           ~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            int dyUnconsumed, int[] offsetInWindow) {"
-        errorLine2="                              ~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {"
-        errorLine2="                                                           ~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {"
-        errorLine2="                                                                           ~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
-    </issue>
-
 </issues>
diff --git a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Tests.java b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Tests.java
index 47b3acd..e8de38b 100644
--- a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Tests.java
+++ b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Tests.java
@@ -555,6 +555,53 @@
     }
 
     @Test
+    public void testSwipe() {
+        launchTestActivity(UiObject2TestSwipeActivity.class);
+
+        // Avoid touching too close to the edges.
+        UiObject2 scrollView = mDevice.findObject(By.res(TEST_APP, "horizontal_scroll_view"));
+        scrollView.setGestureMargin(SCROLL_MARGIN);
+
+        // Initially at top left corner.
+        assertTrue(mDevice.hasObject(By.res(TEST_APP, "top_text")));
+        assertFalse(mDevice.hasObject(By.res(TEST_APP, "right_text")));
+
+        // Swipe left to right bound (5000px) within one swipe.
+        scrollView.swipe(Direction.LEFT, 1.0f);
+        assertFalse(mDevice.hasObject(By.res(TEST_APP, "top_text")));
+        assertTrue(mDevice.hasObject(By.res(TEST_APP, "right_text")));
+
+        // Swipe right back to left bound (0px) within one swipe.
+        scrollView.swipe(Direction.RIGHT, 1.0f);
+        assertTrue(mDevice.hasObject(By.res(TEST_APP, "top_text")));
+        assertFalse(mDevice.hasObject(By.res(TEST_APP, "right_text")));
+
+        // Swipe up to bottom bound (5000px) within one swipe.
+        scrollView.swipe(Direction.UP, 1.0f, 10000);
+        assertFalse(mDevice.hasObject(By.res(TEST_APP, "top_text")));
+        assertTrue(mDevice.hasObject(By.res(TEST_APP, "bottom_text")));
+
+        // Swipe down back to top bound (0px) within one swipe.
+        scrollView.swipe(Direction.DOWN, 1.0f, 10000);
+        assertTrue(mDevice.hasObject(By.res(TEST_APP, "top_text")));
+        assertFalse(mDevice.hasObject(By.res(TEST_APP, "bottom_text")));
+    }
+
+    @Test
+    public void testSwipe_throwsIllegalArgumentException() {
+        launchTestActivity(UiObject2TestSwipeActivity.class);
+
+        UiObject2 scrollView = mDevice.findObject(By.res(TEST_APP, "horizontal_scroll_view"));
+
+        assertThrows("Percent must be between 0.0f and 1.0f", IllegalArgumentException.class,
+                () -> scrollView.swipe(Direction.UP, 10.0f));
+        assertThrows("Percent must be between 0.0f and 1.0f", IllegalArgumentException.class,
+                () -> scrollView.swipe(Direction.UP, -10.0f));
+        assertThrows("Speed cannot be negative", IllegalArgumentException.class,
+                () -> scrollView.swipe(Direction.UP, 1.0f, -10));
+    }
+
+    @Test
     public void testRecycle() {
         launchTestActivity(MainActivity.class);
 
@@ -678,8 +725,6 @@
     /* TODO(b/235841473): Implement these tests
     public void testFling() {}
 
-    public void testSwipe() {}
-
     public void testWaitForExists() {}
 
     public void testWaitForGone() {}
diff --git a/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml b/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
index b3a03eb..b0af640 100644
--- a/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -150,6 +150,13 @@
                 <action android:name="android.intent.action.MAIN" />
             </intent-filter>
         </activity>
+        <activity android:name=".UiObject2TestSwipeActivity"
+            android:exported="true"
+            android:theme="@android:style/Theme.Holo.NoActionBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+            </intent-filter>
+        </activity>
         <activity android:name=".UiObject2TestVerticalScrollActivity"
             android:exported="true"
             android:theme="@android:style/Theme.Holo.NoActionBar">
diff --git a/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/UiObject2TestSwipeActivity.java b/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/UiObject2TestSwipeActivity.java
new file mode 100644
index 0000000..2f92cb5
--- /dev/null
+++ b/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/UiObject2TestSwipeActivity.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2022 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.test.uiautomator.testapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+
+public class UiObject2TestSwipeActivity extends Activity {
+
+    @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setContentView(R.layout.uiobject2_testswipe_activity);
+    }
+}
diff --git a/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/UiObject2TestVerticalScrollActivity.java b/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/UiObject2TestVerticalScrollActivity.java
index 12bd767..a28f5b6 100644
--- a/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/UiObject2TestVerticalScrollActivity.java
+++ b/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/UiObject2TestVerticalScrollActivity.java
@@ -18,11 +18,9 @@
 
 import android.app.Activity;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.GestureDetector;
 import android.view.GestureDetector.SimpleOnGestureListener;
 import android.view.MotionEvent;
-import android.widget.TextView;
 
 import androidx.annotation.Nullable;
 
@@ -36,20 +34,11 @@
 
         setContentView(R.layout.uiobject2_testverticalscroll_activity);
 
-        final TextView flingDetected = (TextView)findViewById(R.id.fling_detected);
-
         mGestureDetector = new GestureDetector(this, new SimpleOnGestureListener() {
             @Override
             public boolean onDown(MotionEvent event) {
                 return true;
             }
-
-            @Override
-            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
-                Log.d("FOO", "Fling detected!");
-                flingDetected.setText("true");
-                return true;
-            }
         });
     }
 
diff --git a/test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testswipe_activity.xml b/test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testswipe_activity.xml
new file mode 100644
index 0000000..b9acb26
--- /dev/null
+++ b/test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testswipe_activity.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ * Copyright (C) 2022 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:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    tools:context=".UiObject2TestSwipeActivity">
+
+    <HorizontalScrollView
+        android:id="@+id/horizontal_scroll_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content">
+
+        <ScrollView
+            android:id="@+id/vertical_scroll_view"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content">
+
+            <RelativeLayout
+                android:layout_width="5000px"
+                android:layout_height="5000px">
+
+                <TextView
+                    android:id="@+id/top_text"
+                    android:layout_width="wrap_content"
+                    android:layout_height="50px"
+                    android:layout_alignParentTop="true"
+                    android:text="This is the top" />
+
+                <TextView
+                    android:id="@+id/bottom_text"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_alignParentBottom="true"
+                    android:text="This is the bottom" />
+
+                <TextView
+                    android:id="@+id/right_text"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_alignParentRight="true"
+                    android:text="This is the right" />
+
+            </RelativeLayout>
+
+        </ScrollView>
+
+    </HorizontalScrollView>
+
+</LinearLayout>
diff --git a/test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testverticalscroll_activity.xml b/test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testverticalscroll_activity.xml
index 596267f..2af186a 100644
--- a/test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testverticalscroll_activity.xml
+++ b/test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testverticalscroll_activity.xml
@@ -71,10 +71,4 @@
 
     </ScrollView>
 
-    <TextView
-        android:id="@+id/fling_detected"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="false" />
-
 </LinearLayout>
diff --git a/text/text/lint-baseline.xml b/text/text/lint-baseline.xml
index c5957fa..ffc2908 100644
--- a/text/text/lint-baseline.xml
+++ b/text/text/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanInlineOptIn"
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
index e4a4227..fba9e8f 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
@@ -74,12 +74,42 @@
     }
 
     @Test
-    fun create_returnsGivenValues() {
+    fun create_returnsGivenValues_includePadding_false() {
         val text = "abc"
         val paint = TextPaint()
         val width = 100
         val metrics = BoringLayout.isBoring(text, paint)
-        val boringLayout = create(text, paint, width, metrics)
+        val boringLayout = create(
+            text = text,
+            paint = paint,
+            width = width,
+            metrics = metrics,
+            includePadding = false
+        )
+
+        assertThat(boringLayout.text).isEqualTo(text)
+        assertThat(boringLayout.paint).isEqualTo(paint)
+        // The width and height of the boringLayout is the same in metrics, indicating metrics is
+        // passed correctly.
+        assertThat(boringLayout.getLineWidth(0).toInt()).isEqualTo(metrics.width)
+        assertThat(boringLayout.getLineBottom(0) - boringLayout.getLineTop(0))
+            .isEqualTo(metrics.descent - metrics.ascent)
+        assertThat(boringLayout.width).isEqualTo(width)
+    }
+
+    @Test
+    fun create_returnsGivenValues_includePadding_true() {
+        val text = "abc"
+        val paint = TextPaint()
+        val width = 100
+        val metrics = BoringLayout.isBoring(text, paint)
+        val boringLayout = create(
+            text = text,
+            paint = paint,
+            width = width,
+            metrics = metrics,
+            includePadding = true
+        )
 
         assertThat(boringLayout.text).isEqualTo(text)
         assertThat(boringLayout.paint).isEqualTo(paint)
@@ -137,7 +167,7 @@
     }
 
     @Test
-    fun create_defaultIncludePad_isTrue() {
+    fun create_defaultIncludePad_isFalse() {
         val text: CharSequence = "abcdefghijk"
         val paint = TextPaint()
         val metrics = BoringLayout.isBoring(text, paint)
@@ -150,8 +180,8 @@
 
         val topPad = boringLayout.topPadding
         val bottomPad = boringLayout.bottomPadding
-        // Top and bottom padding are not 0 at the same time, indicating includePad is true.
-        assertThat(topPad * topPad + bottomPad * bottomPad).isGreaterThan(0)
+        // Top and bottom padding are 0 at the same time, indicating includePad is false
+        assertThat(topPad + bottomPad).isEqualTo(0)
     }
 
     @Test(expected = IllegalArgumentException::class)
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt
index 2b197be..023c89a 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt
@@ -949,4 +949,31 @@
         // If insert RX to second line, it will be |RX L1 L2 SP L3 L4| (SP)
         assertThat(layout.getDownstreamSecondaryHorizontalPosition(offset)).isEqualTo(0)
     }
+
+    @Test
+    fun getHorizontal_BiDi_singleLine_Whitespace() {
+        // The line break happens like as follows
+        //
+        // input (Logical): R1 R2 SP L1 L2 SP L3 L4 SP R3 R4 SP L5 L6
+        //
+        // |L1 L2 SP R2 R1| (SP)
+        // |L3 L4 SP R4 R3| (SP)
+        // |L5 L6         |
+        val layout = getLayout(
+            "\u05D0\u05D1 \u0061\u0062 \u0063\u0064 \u05D3\u05D4 \u0065\u0066",
+            10,
+            50,
+            LTR
+        )
+
+        val offset = 6 // before L3 == after SP
+        // If insert LX to first line, it will be |L1 L2 SP R2 R1 SP LX|
+        assertThat(layout.getUpstreamPrimaryHorizontalPosition(offset)).isEqualTo(50)
+        // If insert RX to first line, it will be |L1 L2 SP R2 R1 SP RX|
+        assertThat(layout.getUpstreamSecondaryHorizontalPosition(offset)).isEqualTo(50)
+        // If insert LX to second line, it will be |LX L3 L4 SP R4 R3| (SP)
+        assertThat(layout.getDownstreamPrimaryHorizontalPosition(offset)).isEqualTo(0)
+        // If insert RX to second line, it will be |RX L3 L4 SP R4 R3| (SP)
+        assertThat(layout.getDownstreamSecondaryHorizontalPosition(offset)).isEqualTo(0)
+    }
 }
\ No newline at end of file
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutConstructor33.java b/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutConstructor33.java
new file mode 100644
index 0000000..b1379e8
--- /dev/null
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutConstructor33.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2022 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.compose.ui.text.android;
+
+import android.text.BoringLayout;
+import android.text.Layout;
+import android.text.TextPaint;
+import android.text.TextUtils;
+
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+
+/**
+ * Platform BoringLayout constructor has marked TextUtils.TruncateAt as NonNull even though it is
+ * nullable, and have to be nullable.
+ *
+ * This class has the same signature of the BoringLayout constructor with only difference of
+ * ellipsize is marked as Nullable.
+ *
+ * This was the only way to prevent compilation failure for nullability of TruncateAt ellipsize.
+ *
+ * See b/225695033
+ */
+@RequiresApi(33)
+class BoringLayoutConstructor33 {
+
+    private BoringLayoutConstructor33() {}
+
+    @NonNull
+    public static BoringLayout create(
+            @NonNull CharSequence text,
+            @NonNull TextPaint paint,
+            @IntRange(from = 0) int width,
+            @NonNull Layout.Alignment alignment,
+            float lineSpacingMultiplier,
+            float lineSpacingExtra,
+            @NonNull BoringLayout.Metrics metrics,
+            boolean includePadding,
+            @Nullable TextUtils.TruncateAt ellipsize,
+            @IntRange(from = 0) int ellipsizedWidth,
+            boolean useFallbackLineSpacing
+    ) {
+        return new BoringLayout(
+                text,
+                paint,
+                width,
+                alignment,
+                lineSpacingMultiplier,
+                lineSpacingExtra,
+                metrics,
+                includePadding,
+                ellipsize,
+                ellipsizedWidth,
+                useFallbackLineSpacing
+        );
+    }
+}
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutFactory.kt b/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutFactory.kt
index f4300cb..f9116ac 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutFactory.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutFactory.kt
@@ -18,9 +18,13 @@
 import android.text.BoringLayout
 import android.text.BoringLayout.Metrics
 import android.text.Layout.Alignment
+import android.text.StaticLayout
 import android.text.TextDirectionHeuristic
 import android.text.TextPaint
 import android.text.TextUtils.TruncateAt
+import androidx.annotation.DoNotInline
+import androidx.annotation.RequiresApi
+import androidx.core.os.BuildCompat
 
 /**
  * Factory Class for BoringLayout
@@ -28,7 +32,7 @@
 @OptIn(InternalPlatformTextApi::class)
 internal object BoringLayoutFactory {
     /**
-     * Try to lay out text by BoringLayout with provided paint and text direction.
+     * Try to layout text by BoringLayout with provided paint and text direction.
      *
      * @param text the text to analyze.
      * @param paint TextPaint which carries text style parameters such as size, weight, font e.g.
@@ -36,15 +40,16 @@
      * @return null if not boring; the width, ascent, and descent in a BoringLayout.Metrics
      * object.
      */
+    @androidx.annotation.OptIn(markerClass = [BuildCompat.PrereleaseSdkCheck::class])
     fun measure(
         text: CharSequence,
-        paint: TextPaint?,
+        paint: TextPaint,
         textDir: TextDirectionHeuristic
     ): Metrics? {
-        return if (!textDir.isRtl(text, 0, text.length)) {
-            BoringLayout.isBoring(text, paint, null /* metrics */)
+        return if (BuildCompat.isAtLeastT()) {
+            BoringLayoutFactory33.isBoring(text, paint, textDir)
         } else {
-            null
+            BoringLayoutFactoryDefault.isBoring(text, paint, textDir)
         }
     }
 
@@ -58,23 +63,33 @@
      * @param alignment To which edge the text is aligned.
      * @param includePadding Whether to add extra space beyond font ascent and descent (which is
      * needed to avoid clipping in some languages, such as Arabic and Kannada). Default is true.
+     * @param useFallbackLineSpacing Sets Android TextView#setFallbackLineSpacing. This value should
+     * be set to true in most cases and it is the default on platform; otherwise tall scripts such
+     * as Burmese or Tibetan result in clippings on top and bottom sometimes making the text
+     * not-readable.
      * @param ellipsize The ellipsize option specifying how the overflowed text is handled.
      * @param ellipsizedWidth The width where the exceeding text will be ellipsized, in pixel.
+     *
+     * @see BoringLayout.isFallbackLineSpacingEnabled
+     * @see StaticLayout.Builder.setUseLineSpacingFromFallbacks
      **/
+    @androidx.annotation.OptIn(markerClass = [BuildCompat.PrereleaseSdkCheck::class])
     fun create(
         text: CharSequence,
         paint: TextPaint,
         width: Int,
         metrics: Metrics,
         alignment: Alignment = Alignment.ALIGN_NORMAL,
-        includePadding: Boolean = true,
+        includePadding: Boolean = LayoutCompat.DEFAULT_INCLUDE_PADDING,
+        useFallbackLineSpacing: Boolean = LayoutCompat.DEFAULT_FALLBACK_LINE_SPACING,
         ellipsize: TruncateAt? = null,
-        ellipsizedWidth: Int = width
+        ellipsizedWidth: Int = width,
     ): BoringLayout {
         require(width >= 0)
         require(ellipsizedWidth >= 0)
-        return if (ellipsize == null) {
-            BoringLayout(
+
+        return if (BuildCompat.isAtLeastT()) {
+            BoringLayoutFactory33.create(
                 text,
                 paint,
                 width,
@@ -82,10 +97,13 @@
                 LayoutCompat.DEFAULT_LINESPACING_MULTIPLIER,
                 LayoutCompat.DEFAULT_LINESPACING_EXTRA,
                 metrics,
-                includePadding
+                includePadding,
+                useFallbackLineSpacing,
+                ellipsize,
+                ellipsizedWidth
             )
         } else {
-            BoringLayout(
+            BoringLayoutFactoryDefault.create(
                 text,
                 paint,
                 width,
@@ -99,4 +117,107 @@
             )
         }
     }
+
+    /**
+     * Returns whether fallbackLineSpacing is enabled for the given layout.
+     */
+    @androidx.annotation.OptIn(markerClass = [BuildCompat.PrereleaseSdkCheck::class])
+    fun isFallbackLineSpacingEnabled(layout: BoringLayout): Boolean {
+        return if (BuildCompat.isAtLeastT()) {
+            BoringLayoutFactory33.isFallbackLineSpacingEnabled(layout)
+        } else {
+            return false
+        }
+    }
+}
+
+@RequiresApi(33)
+@OptIn(InternalPlatformTextApi::class)
+private object BoringLayoutFactory33 {
+
+    @JvmStatic
+    @DoNotInline
+    fun isBoring(text: CharSequence, paint: TextPaint, textDir: TextDirectionHeuristic): Metrics? {
+        return BoringLayout.isBoring(
+            text,
+            paint,
+            textDir,
+            LayoutCompat.DEFAULT_FALLBACK_LINE_SPACING,
+            null /* metrics */
+        )
+    }
+
+    @JvmStatic
+    @DoNotInline
+    fun create(
+        text: CharSequence,
+        paint: TextPaint,
+        width: Int,
+        alignment: Alignment,
+        lineSpacingMultiplier: Float,
+        lineSpacingExtra: Float,
+        metrics: Metrics,
+        includePadding: Boolean,
+        useFallbackLineSpacing: Boolean,
+        ellipsize: TruncateAt? = null,
+        ellipsizedWidth: Int = width
+    ): BoringLayout {
+        return BoringLayoutConstructor33.create(
+            text,
+            paint,
+            width,
+            alignment,
+            lineSpacingMultiplier,
+            lineSpacingExtra,
+            metrics,
+            includePadding,
+            ellipsize,
+            ellipsizedWidth,
+            useFallbackLineSpacing
+        )
+    }
+
+    fun isFallbackLineSpacingEnabled(layout: BoringLayout): Boolean {
+        return layout.isFallbackLineSpacingEnabled
+    }
+}
+
+private object BoringLayoutFactoryDefault {
+    @JvmStatic
+    @DoNotInline
+    fun isBoring(text: CharSequence, paint: TextPaint, textDir: TextDirectionHeuristic): Metrics? {
+        return if (!textDir.isRtl(text, 0, text.length)) {
+            return BoringLayout.isBoring(text, paint, null /* metrics */)
+        } else {
+            null
+        }
+    }
+
+    @JvmStatic
+    @DoNotInline
+    fun create(
+        text: CharSequence,
+        paint: TextPaint,
+        width: Int,
+        alignment: Alignment,
+        lineSpacingMultiplier: Float,
+        lineSpacingExtra: Float,
+        metrics: Metrics,
+        includePadding: Boolean,
+        ellipsize: TruncateAt? = null,
+        ellipsizedWidth: Int = width
+    ): BoringLayout {
+        return BoringLayout(
+            text,
+            paint,
+            width,
+            alignment,
+            lineSpacingMultiplier,
+            lineSpacingExtra,
+            metrics,
+            includePadding,
+            ellipsize,
+            ellipsizedWidth
+        )
+    }
 }
\ No newline at end of file
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
index 17a719a..20f6ff4 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
@@ -309,8 +309,17 @@
                 return layout.getPrimaryHorizontal(runs[index + 1].start)
             }
         } else {
+            // Bidi runs are created between lineStart and lineVisibleEnd
+            // If the requested offset is a white space at the end of the line, it would be
+            // out of bounds for the runs in this Bidi. We are adjusting the requested offset
+            // to the visible end of line.
+            val lineEndAdjustedOffset = if (offset > lineVisibleEnd) {
+                lineEndToVisibleEnd(offset)
+            } else {
+                offset
+            }
             // find the visual position of the last character
-            val index = runs.indexOfFirst { it.end == offset }
+            val index = runs.indexOfFirst { it.end == lineEndAdjustedOffset }
             val run = runs[index]
             // True if the requesting end offset is left edge of the run.
             val isLeftRequested = if (usePrimaryDirection || isParaRtl == run.isRtl) {
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt b/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
index ef17dfb..e2c9747 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
@@ -30,6 +30,7 @@
 import androidx.compose.ui.text.android.LayoutCompat.BreakStrategy
 import androidx.compose.ui.text.android.LayoutCompat.HyphenationFrequency
 import androidx.compose.ui.text.android.LayoutCompat.JustificationMode
+import androidx.core.os.BuildCompat
 import java.lang.reflect.Constructor
 import java.lang.reflect.InvocationTargetException
 
@@ -41,7 +42,7 @@
     private val delegate: StaticLayoutFactoryImpl = if (Build.VERSION.SDK_INT >= 23) {
         StaticLayoutFactory23()
     } else {
-        StaticLayoutFactoryPre21()
+        StaticLayoutFactoryDefault()
     }
 
     /**
@@ -98,6 +99,20 @@
             )
         )
     }
+
+    /**
+     * Returns whether fallbackLineSpacing is enabled for the given layout.
+     *
+     * @param layout StaticLayout instance
+     * @param useFallbackLineSpacing fallbackLineSpacing canfiguration passed while creating the
+     * StaticLayout.
+     */
+    fun isFallbackLineSpacingEnabled(
+        layout: StaticLayout,
+        useFallbackLineSpacing: Boolean
+    ): Boolean {
+        return delegate.isFallbackLineSpacingEnabled(layout, useFallbackLineSpacing)
+    }
 }
 
 @OptIn(InternalPlatformTextApi::class)
@@ -136,6 +151,8 @@
 
     @DoNotInline // API level specific, do not inline to prevent ART class verification breakages
     fun create(params: StaticLayoutParams): StaticLayout
+
+    fun isFallbackLineSpacingEnabled(layout: StaticLayout, useFallbackLineSpacing: Boolean): Boolean
 }
 
 @RequiresApi(23)
@@ -166,10 +183,25 @@
                 }
             }.build()
     }
+
+    @androidx.annotation.OptIn(markerClass = [BuildCompat.PrereleaseSdkCheck::class])
+    override fun isFallbackLineSpacingEnabled(
+        layout: StaticLayout,
+        useFallbackLineSpacing: Boolean
+    ): Boolean {
+        return if (BuildCompat.isAtLeastT()) {
+            StaticLayoutFactory33.isFallbackLineSpacingEnabled(layout)
+        } else if (Build.VERSION.SDK_INT >= 28) {
+            useFallbackLineSpacing
+        } else {
+            false
+        }
+    }
 }
 
 @RequiresApi(26)
 private object StaticLayoutFactory26 {
+    @JvmStatic
     @DoNotInline
     fun setJustificationMode(builder: Builder, justificationMode: Int) {
         builder.setJustificationMode(justificationMode)
@@ -178,13 +210,23 @@
 
 @RequiresApi(28)
 private object StaticLayoutFactory28 {
+    @JvmStatic
     @DoNotInline
     fun setUseLineSpacingFromFallbacks(builder: Builder, useFallbackLineSpacing: Boolean) {
         builder.setUseLineSpacingFromFallbacks(useFallbackLineSpacing)
     }
 }
 
-private class StaticLayoutFactoryPre21 : StaticLayoutFactoryImpl {
+@RequiresApi(33)
+private object StaticLayoutFactory33 {
+    @JvmStatic
+    @DoNotInline
+    fun isFallbackLineSpacingEnabled(layout: StaticLayout): Boolean {
+        return layout.isFallbackLineSpacingEnabled
+    }
+}
+
+private class StaticLayoutFactoryDefault : StaticLayoutFactoryImpl {
 
     companion object {
         private var isInitialized = false
@@ -274,4 +316,11 @@
             params.ellipsizedWidth
         )
     }
+
+    override fun isFallbackLineSpacingEnabled(
+        layout: StaticLayout,
+        useFallbackLineSpacing: Boolean
+    ): Boolean {
+        return false
+    }
 }
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt b/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
index 7a645c1..a0c1bdb 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
@@ -17,9 +17,10 @@
 
 import android.graphics.Canvas
 import android.graphics.Path
-import android.os.Build
+import android.text.BoringLayout
 import android.text.Layout
 import android.text.Spanned
+import android.text.StaticLayout
 import android.text.TextDirectionHeuristic
 import android.text.TextDirectionHeuristics
 import android.text.TextPaint
@@ -70,7 +71,11 @@
  * @param lineSpacingMultiplier the multiplier to be applied to each line of the text.
  * @param lineSpacingExtra the extra height to be added to each line of the text.
  * @param includePadding defines whether the extra space to be applied beyond font ascent and
- * descent,
+ * descent
+ * @param fallbackLineSpacing Sets Android TextView#setFallbackLineSpacing. This value should
+ * be set to true in most cases and it is the default on platform; otherwise tall scripts such
+ * as Burmese or Tibetan result in clippings on top and bottom sometimes making the text
+ * not-readable.
  * @param maxLines the maximum number of lines to be laid out.
  * @param breakStrategy the strategy to be used for line breaking
  * @param hyphenationFrequency set the frequency to control the amount of automatic hyphenation
@@ -83,7 +88,9 @@
  * element in the array is applied to the corresponding line. For lines past the last element in
  * array, the last element repeats.
  * @param layoutIntrinsics previously calculated [LayoutIntrinsics] for this text
+ *
  * @see StaticLayoutFactory
+ * @see BoringLayoutFactory
  *
  * @suppress
  */
@@ -176,6 +183,7 @@
                 metrics = boringMetrics,
                 alignment = frameworkAlignment,
                 includePadding = includePadding,
+                useFallbackLineSpacing = fallbackLineSpacing,
                 ellipsize = ellipsize,
                 ellipsizedWidth = widthInt
             )
@@ -458,7 +466,14 @@
     }
 
     internal fun isFallbackLinespacingApplied(): Boolean {
-        return fallbackLineSpacing && !isBoringLayout && Build.VERSION.SDK_INT >= 28
+        return if (isBoringLayout) {
+            BoringLayoutFactory.isFallbackLineSpacingEnabled(layout as BoringLayout)
+        } else {
+            StaticLayoutFactory.isFallbackLineSpacingEnabled(
+                layout as StaticLayout,
+                fallbackLineSpacing
+            )
+        }
     }
 }
 
diff --git a/transition/transition/lint-baseline.xml b/transition/transition/lint-baseline.xml
index 97a7ae8..0e4b999 100644
--- a/transition/transition/lint-baseline.xml
+++ b/transition/transition/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="ResourceType"
diff --git a/tvprovider/tvprovider/lint-baseline.xml b/tvprovider/tvprovider/lint-baseline.xml
index 5f3b54c..b8000c8 100644
--- a/tvprovider/tvprovider/lint-baseline.xml
+++ b/tvprovider/tvprovider/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/vectordrawable/integration-tests/testapp/lint-baseline.xml b/vectordrawable/integration-tests/testapp/lint-baseline.xml
index 2cc2c55..6c79993 100644
--- a/vectordrawable/integration-tests/testapp/lint-baseline.xml
+++ b/vectordrawable/integration-tests/testapp/lint-baseline.xml
@@ -142,7 +142,9 @@
         errorLine1="                m-.001, 0"
         errorLine2="            ~~~~">
         <location
-            file="src/main/res/drawable/vector_drawable04.xml"/>
+            file="src/main/res/drawable/vector_drawable04.xml"
+            line="27"
+            column="13"/>
     </issue>
 
     <issue
@@ -151,7 +153,9 @@
         errorLine1="                m-.001, 0"
         errorLine2="                       ^">
         <location
-            file="src/main/res/drawable/vector_drawable04.xml"/>
+            file="src/main/res/drawable/vector_drawable04.xml"
+            line="27"
+            column="24"/>
     </issue>
 
     <issue
@@ -160,7 +164,9 @@
         errorLine1="                a .001,.001 0 1,0 .002,0"
         errorLine2="                                     ^">
         <location
-            file="src/main/res/drawable/vector_drawable04.xml"/>
+            file="src/main/res/drawable/vector_drawable04.xml"
+            line="28"
+            column="38"/>
     </issue>
 
     <issue
@@ -169,7 +175,9 @@
         errorLine1="                a .001,.001 0 1,0 .002,0"
         errorLine2="                      ~~~~">
         <location
-            file="src/main/res/drawable/vector_drawable04.xml"/>
+            file="src/main/res/drawable/vector_drawable04.xml"
+            line="28"
+            column="23"/>
     </issue>
 
     <issue
@@ -178,7 +186,9 @@
         errorLine1="                a .001,.001 0 1,0 .002,0"
         errorLine2="                           ~~~~">
         <location
-            file="src/main/res/drawable/vector_drawable04.xml"/>
+            file="src/main/res/drawable/vector_drawable04.xml"
+            line="28"
+            column="28"/>
     </issue>
 
     <issue
@@ -187,7 +197,9 @@
         errorLine1="            android:pathData=&quot;l0.0.0.5.0.0.5-0.5.0.0-.5z&quot;"
         errorLine2="                                                    ~~~">
         <location
-            file="src/main/res/drawable/vector_drawable29.xml"/>
+            file="src/main/res/drawable/vector_drawable29.xml"
+            line="25"
+            column="53"/>
     </issue>
 
     <issue
@@ -196,7 +208,9 @@
         errorLine1="            android:pathData=&quot;l0.0.0.5.0.0.5-0.5.0.0-.5z&quot;"
         errorLine2="                                  ~~">
         <location
-            file="src/main/res/drawable/vector_drawable29.xml"/>
+            file="src/main/res/drawable/vector_drawable29.xml"
+            line="25"
+            column="35"/>
     </issue>
 
     <issue
@@ -205,7 +219,9 @@
         errorLine1="            android:pathData=&quot;l0.0.0.5.0.0.5-0.5.0.0-.5z&quot;"
         errorLine2="                                      ~~">
         <location
-            file="src/main/res/drawable/vector_drawable29.xml"/>
+            file="src/main/res/drawable/vector_drawable29.xml"
+            line="25"
+            column="39"/>
     </issue>
 
     <issue
@@ -214,7 +230,9 @@
         errorLine1="            android:pathData=&quot;l0.0.0.5.0.0.5-0.5.0.0-.5z&quot;"
         errorLine2="                                        ~~">
         <location
-            file="src/main/res/drawable/vector_drawable29.xml"/>
+            file="src/main/res/drawable/vector_drawable29.xml"
+            line="25"
+            column="41"/>
     </issue>
 
     <issue
@@ -223,7 +241,9 @@
         errorLine1="            android:pathData=&quot;l0.0.0.5.0.0.5-0.5.0.0-.5z&quot;"
         errorLine2="                                                ~~">
         <location
-            file="src/main/res/drawable/vector_drawable29.xml"/>
+            file="src/main/res/drawable/vector_drawable29.xml"
+            line="25"
+            column="49"/>
     </issue>
 
     <issue
@@ -232,7 +252,9 @@
         errorLine1="            android:pathData=&quot;l0.0.0.5.0.0.5-0.5.0.0-.5z&quot;"
         errorLine2="                                                  ~~">
         <location
-            file="src/main/res/drawable/vector_drawable29.xml"/>
+            file="src/main/res/drawable/vector_drawable29.xml"
+            line="25"
+            column="51"/>
     </issue>
 
     <issue
@@ -241,7 +263,9 @@
         errorLine1="            android:pathData=&quot;l0.0.0.5.0.0.5-0.5.0.0-.5z&quot;"
         errorLine2="                                    ~~">
         <location
-            file="src/main/res/drawable/vector_drawable29.xml"/>
+            file="src/main/res/drawable/vector_drawable29.xml"
+            line="25"
+            column="37"/>
     </issue>
 
     <issue
@@ -250,7 +274,9 @@
         errorLine1="            android:pathData=&quot;l0.0.0.5.0.0.5-0.5.0.0-.5z&quot;"
         errorLine2="                                          ~~">
         <location
-            file="src/main/res/drawable/vector_drawable29.xml"/>
+            file="src/main/res/drawable/vector_drawable29.xml"
+            line="25"
+            column="43"/>
     </issue>
 
     <issue
@@ -259,7 +285,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/AVDCListenerDemo.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/AVDCListenerDemo.java"
+            line="39"
+            column="29"/>
     </issue>
 
     <issue
@@ -268,7 +296,9 @@
         errorLine1="    protected int[] mIcons = {"
         errorLine2="              ~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java"
+            line="38"
+            column="15"/>
     </issue>
 
     <issue
@@ -277,7 +307,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java"
+            line="51"
+            column="29"/>
     </issue>
 
     <issue
@@ -286,7 +318,9 @@
         errorLine1="    protected int[] mIcons = {"
         errorLine2="              ~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java"
+            line="39"
+            column="15"/>
     </issue>
 
     <issue
@@ -295,7 +329,9 @@
         errorLine1="    protected void onCreate(Bundle savedInstanceState) {"
         errorLine2="                            ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java"
+            line="85"
+            column="29"/>
     </issue>
 
     <issue
@@ -304,7 +340,9 @@
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+            line="42"
+            column="26"/>
     </issue>
 
     <issue
@@ -313,7 +351,9 @@
         errorLine1="    protected List&lt;Map&lt;String, Object>> getData(String prefix) {"
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+            line="59"
+            column="15"/>
     </issue>
 
     <issue
@@ -322,7 +362,9 @@
         errorLine1="    protected List&lt;Map&lt;String, Object>> getData(String prefix) {"
         errorLine2="                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+            line="59"
+            column="49"/>
     </issue>
 
     <issue
@@ -331,7 +373,9 @@
         errorLine1="    protected Intent activityIntent(String pkg, String componentName) {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+            line="128"
+            column="15"/>
     </issue>
 
     <issue
@@ -340,7 +384,9 @@
         errorLine1="    protected Intent activityIntent(String pkg, String componentName) {"
         errorLine2="                                    ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+            line="128"
+            column="37"/>
     </issue>
 
     <issue
@@ -349,7 +395,9 @@
         errorLine1="    protected Intent activityIntent(String pkg, String componentName) {"
         errorLine2="                                                ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+            line="128"
+            column="49"/>
     </issue>
 
     <issue
@@ -358,7 +406,9 @@
         errorLine1="    protected Intent browseIntent(String path) {"
         errorLine2="              ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+            line="134"
+            column="15"/>
     </issue>
 
     <issue
@@ -367,7 +417,9 @@
         errorLine1="    protected Intent browseIntent(String path) {"
         errorLine2="                                  ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+            line="134"
+            column="35"/>
     </issue>
 
     <issue
@@ -376,7 +428,9 @@
         errorLine1="    protected void addItem(List&lt;Map&lt;String, Object>> data, String name, Intent intent) {"
         errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+            line="141"
+            column="28"/>
     </issue>
 
     <issue
@@ -385,7 +439,9 @@
         errorLine1="    protected void addItem(List&lt;Map&lt;String, Object>> data, String name, Intent intent) {"
         errorLine2="                                                           ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+            line="141"
+            column="60"/>
     </issue>
 
     <issue
@@ -394,7 +450,9 @@
         errorLine1="    protected void addItem(List&lt;Map&lt;String, Object>> data, String name, Intent intent) {"
         errorLine2="                                                                        ~~~~~~">
         <location
-            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+            file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+            line="141"
+            column="73"/>
     </issue>
 
 </issues>
diff --git a/vectordrawable/vectordrawable-animated/lint-baseline.xml b/vectordrawable/vectordrawable-animated/lint-baseline.xml
index ed73a301..84bb277 100644
--- a/vectordrawable/vectordrawable-animated/lint-baseline.xml
+++ b/vectordrawable/vectordrawable-animated/lint-baseline.xml
@@ -1,144 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (7.1.0-beta02)" variant="all" version="7.1.0-beta02">
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="        return dr.unregisterAnimationCallback(callback.getPlatformCallback());"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="        avd.registerAnimationCallback(callback.getPlatformCallback());"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((AnimatedVectorDrawable) mDelegateDrawable).clearAnimationCallbacks();"
-        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 23; however, the containing class androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            ((AnimatedVectorDrawable) dr).clearAnimationCallbacks();"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="cli" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onAnimationStart(Drawable drawable) {};"
-        errorLine2="                                     ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/Animatable2Compat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onAnimationEnd(Drawable drawable) {};"
-        errorLine2="                                   ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/Animatable2Compat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable mutate() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static AnimatedVectorDrawableCompat createFromXmlInner(Context context, Resources r,"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static AnimatedVectorDrawableCompat createFromXmlInner(Context context, Resources r,"
-        errorLine2="                                                                  ~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static AnimatedVectorDrawableCompat createFromXmlInner(Context context, Resources r,"
-        errorLine2="                                                                                   ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            XmlPullParser parser, AttributeSet attrs, Theme theme)"
-        errorLine2="            ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            XmlPullParser parser, AttributeSet attrs, Theme theme)"
-        errorLine2="                                  ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            XmlPullParser parser, AttributeSet attrs, Theme theme)"
-        errorLine2="                                                      ~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ConstantState getConstantState() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void draw(Canvas canvas) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onBoundsChange(Rect bounds) {"
         errorLine2="                                  ~~~~">
         <location
@@ -147,7 +12,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected boolean onStateChange(int[] state) {"
         errorLine2="                                    ~~~~~">
         <location
@@ -156,178 +21,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setColorFilter(ColorFilter colorFilter) {"
-        errorLine2="                               ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ColorFilter getColorFilter() {"
-        errorLine2="           ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTintList(ColorStateList tint) {"
-        errorLine2="                            ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTintMode(PorterDuff.Mode tintMode) {"
-        errorLine2="                            ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme)"
-        errorLine2="                        ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme)"
-        errorLine2="                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme)"
-        errorLine2="                                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme)"
-        errorLine2="                                                                                 ~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs)"
-        errorLine2="                        ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs)"
-        errorLine2="                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs)"
-        errorLine2="                                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void applyTheme(Theme t) {"
-        errorLine2="                           ~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void registerAnimationCallback(Drawable dr,"
-        errorLine2="                                                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Animatable2Compat.AnimationCallback callback) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static boolean unregisterAnimationCallback(Drawable dr,"
-        errorLine2="                                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Animatable2Compat.AnimationCallback callback) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static void clearAnimationCallbacks(Drawable dr) {"
-        errorLine2="                                               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimatedVectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Interpolator loadInterpolator(Context context, int id)"
-        errorLine2="                  ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimationUtilsCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static Interpolator loadInterpolator(Context context, int id)"
-        errorLine2="                                                ~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AnimationUtilsCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Animator loadAnimator(Context context, @AnimatorRes int id)"
         errorLine2="                  ~~~~~~~~">
         <location
@@ -336,7 +30,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Animator loadAnimator(Context context, @AnimatorRes int id)"
         errorLine2="                                        ~~~~~~~">
         <location
@@ -345,7 +39,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Animator loadAnimator(Context context, Resources resources, Theme theme,"
         errorLine2="                  ~~~~~~~~">
         <location
@@ -354,7 +48,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Animator loadAnimator(Context context, Resources resources, Theme theme,"
         errorLine2="                                        ~~~~~~~">
         <location
@@ -363,7 +57,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Animator loadAnimator(Context context, Resources resources, Theme theme,"
         errorLine2="                                                         ~~~~~~~~~">
         <location
@@ -372,7 +66,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Animator loadAnimator(Context context, Resources resources, Theme theme,"
         errorLine2="                                                                              ~~~~~">
         <location
@@ -381,7 +75,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Animator loadAnimator(Context context, Resources resources, Theme theme,"
         errorLine2="                  ~~~~~~~~">
         <location
@@ -390,7 +84,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Animator loadAnimator(Context context, Resources resources, Theme theme,"
         errorLine2="                                        ~~~~~~~">
         <location
@@ -399,7 +93,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Animator loadAnimator(Context context, Resources resources, Theme theme,"
         errorLine2="                                                         ~~~~~~~~~">
         <location
@@ -408,7 +102,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static Animator loadAnimator(Context context, Resources resources, Theme theme,"
         errorLine2="                                                                              ~~~~~">
         <location
@@ -417,43 +111,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static ArgbEvaluator getInstance() {"
-        errorLine2="                  ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/ArgbEvaluator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Object evaluate(float fraction, Object startValue, Object endValue) {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/ArgbEvaluator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Object evaluate(float fraction, Object startValue, Object endValue) {"
-        errorLine2="                                           ~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/ArgbEvaluator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Object evaluate(float fraction, Object startValue, Object endValue) {"
-        errorLine2="                                                              ~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/ArgbEvaluator.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PathInterpolatorCompat(Context context, AttributeSet attrs, XmlPullParser parser) {"
         errorLine2="                                  ~~~~~~~">
         <location
@@ -462,7 +120,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PathInterpolatorCompat(Context context, AttributeSet attrs, XmlPullParser parser) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
@@ -471,7 +129,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PathInterpolatorCompat(Context context, AttributeSet attrs, XmlPullParser parser) {"
         errorLine2="                                                                       ~~~~~~~~~~~~~">
         <location
@@ -480,7 +138,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PathInterpolatorCompat(Resources res, Resources.Theme theme, AttributeSet attrs,"
         errorLine2="                                  ~~~~~~~~~">
         <location
@@ -489,7 +147,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PathInterpolatorCompat(Resources res, Resources.Theme theme, AttributeSet attrs,"
         errorLine2="                                                 ~~~~~~~~~~~~~~~">
         <location
@@ -498,7 +156,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PathInterpolatorCompat(Resources res, Resources.Theme theme, AttributeSet attrs,"
         errorLine2="                                                                        ~~~~~~~~~~~~">
         <location
@@ -507,7 +165,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            XmlPullParser parser) {"
         errorLine2="            ~~~~~~~~~~~~~">
         <location
diff --git a/vectordrawable/vectordrawable/lint-baseline.xml b/vectordrawable/vectordrawable/lint-baseline.xml
index 5ca9fec8..f647f1f 100644
--- a/vectordrawable/vectordrawable/lint-baseline.xml
+++ b/vectordrawable/vectordrawable/lint-baseline.xml
@@ -1,90 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (7.1.0-beta02)" variant="all" version="7.1.0-beta02">
-
-    <issue
-        id="ResourceType"
-        message="Expected resource of type styleable"
-        errorLine1="    static final int STYLEABLE_ANIMATED_VECTOR_DRAWABLE_TARGET_ANIMATION = 1;"
-        errorLine2="                                                                           ~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/AndroidResources.java"/>
-    </issue>
-
-    <issue
-        id="LambdaLast"
-        message="Functional interface parameters (such as parameter 1, &quot;what&quot;, in androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.scheduleSelf) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions"
-        errorLine1="    public void scheduleSelf(Runnable what, long when) {"
-        errorLine2="                                            ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Drawable mutate() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ConstantState getConstantState() {"
-        errorLine2="           ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void draw(Canvas canvas) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setColorFilter(ColorFilter colorFilter) {"
-        errorLine2="                               ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ColorFilter getColorFilter() {"
-        errorLine2="           ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTintList(ColorStateList tint) {"
-        errorLine2="                            ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setTintMode(Mode tintMode) {"
-        errorLine2="                            ~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected boolean onStateChange(int[] stateSet) {"
         errorLine2="                                    ~~~~~">
         <location
@@ -93,137 +12,11 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static VectorDrawableCompat createFromXmlInner(Resources r, XmlPullParser parser,"
-        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static VectorDrawableCompat createFromXmlInner(Resources r, XmlPullParser parser,"
-        errorLine2="                                                          ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static VectorDrawableCompat createFromXmlInner(Resources r, XmlPullParser parser,"
-        errorLine2="                                                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException {"
-        errorLine2="            ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException {"
-        errorLine2="                                ~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs)"
-        errorLine2="                        ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs)"
-        errorLine2="                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs)"
-        errorLine2="                                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme)"
-        errorLine2="                        ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme)"
-        errorLine2="                                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme)"
-        errorLine2="                                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme)"
-        errorLine2="                                                                                 ~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onBoundsChange(Rect bounds) {"
         errorLine2="                                  ~~~~">
         <location
             file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void scheduleSelf(Runnable what, long when) {"
-        errorLine2="                             ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void unscheduleSelf(Runnable what) {"
-        errorLine2="                               ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java"/>
-    </issue>
-
 </issues>
diff --git a/versionedparcelable/versionedparcelable-compiler/lint-baseline.xml b/versionedparcelable/versionedparcelable-compiler/lint-baseline.xml
index 4c6df9f..fda0fa9 100644
--- a/versionedparcelable/versionedparcelable-compiler/lint-baseline.xml
+++ b/versionedparcelable/versionedparcelable-compiler/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanSynchronizedMethods"
@@ -7,9 +7,7 @@
         errorLine1="    @Override"
         errorLine2="    ^">
         <location
-            file="src/main/java/androidx/versionedparcelable/compiler/VersionedParcelProcessor.java"
-            line="85"
-            column="5"/>
+            file="src/main/java/androidx/versionedparcelable/compiler/VersionedParcelProcessor.java"/>
     </issue>
 
 </issues>
diff --git a/versionedparcelable/versionedparcelable/lint-baseline.xml b/versionedparcelable/versionedparcelable/lint-baseline.xml
index ae680c9..d96bee4 100644
--- a/versionedparcelable/versionedparcelable/lint-baseline.xml
+++ b/versionedparcelable/versionedparcelable/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanUncheckedReflection"
diff --git a/viewpager/viewpager/lint-baseline.xml b/viewpager/viewpager/lint-baseline.xml
index 062254e..a252977 100644
--- a/viewpager/viewpager/lint-baseline.xml
+++ b/viewpager/viewpager/lint-baseline.xml
@@ -1,274 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (7.1.0-beta02)" variant="all" version="7.1.0-beta02">
-
-    <issue
-        id="LambdaLast"
-        message="Functional interface parameters (such as parameter 2, &quot;transformer&quot;, in androidx.viewpager.widget.ViewPager.setPageTransformer) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions"
-        errorLine1="            @Nullable PageTransformer transformer, int pageLayerType) {"
-        errorLine2="                                                   ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setBackgroundDrawable(Drawable d) {"
-        errorLine2="                                      ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/PagerTabStrip.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/PagerTabStrip.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onDraw(Canvas canvas) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/PagerTabStrip.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setOnPageChangeListener(OnPageChangeListener listener) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean verifyDrawable(Drawable who) {"
-        errorLine2="                                     ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void writeToParcel(Parcel out, int flags) {"
         errorLine2="                                  ~~~~~~">
         <location
             file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Parcelable onSaveInstanceState() {"
-        errorLine2="           ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onRestoreInstanceState(Parcelable state) {"
-        errorLine2="                                       ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
-        errorLine2="                        ~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void removeView(View view) {"
-        errorLine2="                           ~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onInterceptTouchEvent(MotionEvent ev) {"
-        errorLine2="                                         ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void draw(Canvas canvas) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onDraw(Canvas canvas) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {"
-        errorLine2="                                ~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchKeyEvent(KeyEvent event) {"
-        errorLine2="                                    ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addFocusables(ArrayList&lt;View> views, int direction, int focusableMode) {"
-        errorLine2="                              ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addTouchables(ArrayList&lt;View> views) {"
-        errorLine2="                              ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            Rect previouslyFocusedRect) {"
-        errorLine2="            ~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {"
-        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ViewGroup.LayoutParams generateDefaultLayoutParams() {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="                                                       ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public LayoutParams(Context context, AttributeSet attrs) {"
-        errorLine2="                            ~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public LayoutParams(Context context, AttributeSet attrs) {"
-        errorLine2="                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
-    </issue>
-
 </issues>
diff --git a/wear/tiles/tiles-material/api/1.1.0-beta02.txt b/wear/tiles/tiles-material/api/1.1.0-beta02.txt
new file mode 100644
index 0000000..aecb80e
--- /dev/null
+++ b/wear/tiles/tiles-material/api/1.1.0-beta02.txt
@@ -0,0 +1,298 @@
+// Signature format: 4.0
+package androidx.wear.tiles.material {
+
+  public class Button implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.Button? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ButtonColors getButtonColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public CharSequence? getContentDescription();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getCustomContent();
+    method public String? getIconContent();
+    method public String? getImageContent();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getSize();
+    method public String? getTextContent();
+  }
+
+  public static final class Button.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public Button.Builder(android.content.Context, androidx.wear.tiles.ModifiersBuilders.Clickable);
+    method public androidx.wear.tiles.material.Button build();
+    method public androidx.wear.tiles.material.Button.Builder setButtonColors(androidx.wear.tiles.material.ButtonColors);
+    method public androidx.wear.tiles.material.Button.Builder setContentDescription(CharSequence);
+    method public androidx.wear.tiles.material.Button.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.Button.Builder setIconContent(String, androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.material.Button.Builder setIconContent(String);
+    method public androidx.wear.tiles.material.Button.Builder setImageContent(String);
+    method public androidx.wear.tiles.material.Button.Builder setSize(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+    method public androidx.wear.tiles.material.Button.Builder setTextContent(String);
+    method public androidx.wear.tiles.material.Button.Builder setTextContent(String, int);
+  }
+
+  public class ButtonColors {
+    ctor public ButtonColors(@ColorInt int, @ColorInt int);
+    ctor public ButtonColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
+    method public static androidx.wear.tiles.material.ButtonColors primaryButtonColors(androidx.wear.tiles.material.Colors);
+    method public static androidx.wear.tiles.material.ButtonColors secondaryButtonColors(androidx.wear.tiles.material.Colors);
+  }
+
+  public class ButtonDefaults {
+    method public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_SIZE;
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp EXTRA_LARGE_SIZE;
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp LARGE_SIZE;
+    field public static final androidx.wear.tiles.material.ButtonColors PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ButtonColors SECONDARY_COLORS;
+  }
+
+  public class Chip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.Chip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ChipColors getChipColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public CharSequence? getContentDescription();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getCustomContent();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getHeight();
+    method public int getHorizontalAlignment();
+    method public String? getIconContent();
+    method public String? getPrimaryLabelContent();
+    method public String? getSecondaryLabelContent();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth();
+  }
+
+  public static final class Chip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public Chip.Builder(android.content.Context, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.Chip build();
+    method public androidx.wear.tiles.material.Chip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
+    method public androidx.wear.tiles.material.Chip.Builder setContentDescription(CharSequence);
+    method public androidx.wear.tiles.material.Chip.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.Chip.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.material.Chip.Builder setIconContent(String);
+    method public androidx.wear.tiles.material.Chip.Builder setPrimaryLabelContent(String);
+    method public androidx.wear.tiles.material.Chip.Builder setSecondaryLabelContent(String);
+    method public androidx.wear.tiles.material.Chip.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.material.Chip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class ChipColors {
+    ctor public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
+    ctor public ChipColors(@ColorInt int, @ColorInt int);
+    ctor public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    ctor public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getIconColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getSecondaryContentColor();
+    method public static androidx.wear.tiles.material.ChipColors primaryChipColors(androidx.wear.tiles.material.Colors);
+    method public static androidx.wear.tiles.material.ChipColors secondaryChipColors(androidx.wear.tiles.material.Colors);
+  }
+
+  public class ChipDefaults {
+    field public static final androidx.wear.tiles.material.ChipColors COMPACT_PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors COMPACT_SECONDARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors SECONDARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors TITLE_PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors TITLE_SECONDARY_COLORS;
+  }
+
+  public class CircularProgressIndicator implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.CircularProgressIndicator? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ProgressIndicatorColors getCircularProgressIndicatorColors();
+    method public CharSequence? getContentDescription();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp getEndAngle();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp getProgress();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp getStartAngle();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp getStrokeWidth();
+  }
+
+  public static final class CircularProgressIndicator.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public CircularProgressIndicator.Builder();
+    method public androidx.wear.tiles.material.CircularProgressIndicator build();
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setCircularProgressIndicatorColors(androidx.wear.tiles.material.ProgressIndicatorColors);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setEndAngle(float);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStartAngle(float);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStrokeWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStrokeWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class Colors {
+    ctor public Colors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
+    method @ColorInt public int getOnPrimary();
+    method @ColorInt public int getOnSurface();
+    method @ColorInt public int getPrimary();
+    method @ColorInt public int getSurface();
+    field public static final androidx.wear.tiles.material.Colors DEFAULT;
+  }
+
+  public class CompactChip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.CompactChip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ChipColors getChipColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public String getText();
+  }
+
+  public static final class CompactChip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public CompactChip.Builder(android.content.Context, String, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.CompactChip build();
+    method public androidx.wear.tiles.material.CompactChip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
+  }
+
+  public class ProgressIndicatorColors {
+    ctor public ProgressIndicatorColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    ctor public ProgressIndicatorColors(@ColorInt int, @ColorInt int);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getIndicatorColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getTrackColor();
+    method public static androidx.wear.tiles.material.ProgressIndicatorColors progressIndicatorColors(androidx.wear.tiles.material.Colors);
+  }
+
+  public class ProgressIndicatorDefaults {
+    field public static final androidx.wear.tiles.material.ProgressIndicatorColors DEFAULT_COLORS;
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_STROKE_WIDTH;
+    field public static final float GAP_END_ANGLE = 156.1f;
+    field public static final float GAP_START_ANGLE = -156.1f;
+  }
+
+  public class Text implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.Text? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getColor();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle getFontStyle();
+    method public float getLineHeight();
+    method public int getMaxLines();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers getModifiers();
+    method public int getMultilineAlignment();
+    method public int getOverflow();
+    method public String getText();
+    method public int getWeight();
+    method public boolean isItalic();
+    method public boolean isUnderline();
+  }
+
+  public static final class Text.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public Text.Builder(android.content.Context, String);
+    method public androidx.wear.tiles.material.Text build();
+    method public androidx.wear.tiles.material.Text.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.material.Text.Builder setItalic(boolean);
+    method public androidx.wear.tiles.material.Text.Builder setMaxLines(@IntRange(from=1) int);
+    method public androidx.wear.tiles.material.Text.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.material.Text.Builder setMultilineAlignment(int);
+    method public androidx.wear.tiles.material.Text.Builder setOverflow(int);
+    method public androidx.wear.tiles.material.Text.Builder setTypography(int);
+    method public androidx.wear.tiles.material.Text.Builder setUnderline(boolean);
+    method public androidx.wear.tiles.material.Text.Builder setWeight(int);
+  }
+
+  public class TitleChip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.TitleChip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ChipColors getChipColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public int getHorizontalAlignment();
+    method public String getText();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth();
+  }
+
+  public static final class TitleChip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public TitleChip.Builder(android.content.Context, String, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.TitleChip build();
+    method public androidx.wear.tiles.material.TitleChip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
+    method public androidx.wear.tiles.material.TitleChip.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.material.TitleChip.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.material.TitleChip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class Typography {
+    field public static final int TYPOGRAPHY_BODY1 = 7; // 0x7
+    field public static final int TYPOGRAPHY_BODY2 = 8; // 0x8
+    field public static final int TYPOGRAPHY_BUTTON = 9; // 0x9
+    field public static final int TYPOGRAPHY_CAPTION1 = 10; // 0xa
+    field public static final int TYPOGRAPHY_CAPTION2 = 11; // 0xb
+    field public static final int TYPOGRAPHY_CAPTION3 = 12; // 0xc
+    field public static final int TYPOGRAPHY_DISPLAY1 = 1; // 0x1
+    field public static final int TYPOGRAPHY_DISPLAY2 = 2; // 0x2
+    field public static final int TYPOGRAPHY_DISPLAY3 = 3; // 0x3
+    field public static final int TYPOGRAPHY_TITLE1 = 4; // 0x4
+    field public static final int TYPOGRAPHY_TITLE2 = 5; // 0x5
+    field public static final int TYPOGRAPHY_TITLE3 = 6; // 0x6
+  }
+
+}
+
+package androidx.wear.tiles.material.layouts {
+
+  public class EdgeContentLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.EdgeContentLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getEdgeContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
+  }
+
+  public static final class EdgeContentLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public EdgeContentLayout.Builder(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout build();
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setEdgeContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setPrimaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setSecondaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+  }
+
+  public class LayoutDefaults {
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_VERTICAL_SPACER_HEIGHT;
+    field public static final float EDGE_CONTENT_LAYOUT_PADDING_ABOVE_MAIN_CONTENT_DP = 6.0f;
+    field public static final float EDGE_CONTENT_LAYOUT_PADDING_BELOW_MAIN_CONTENT_DP = 8.0f;
+    field public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH;
+  }
+
+  public class MultiButtonLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.MultiButtonLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getButtonContents();
+    method public int getFiveButtonDistribution();
+    field public static final int FIVE_BUTTON_DISTRIBUTION_BOTTOM_HEAVY = 2; // 0x2
+    field public static final int FIVE_BUTTON_DISTRIBUTION_TOP_HEAVY = 1; // 0x1
+  }
+
+  public static final class MultiButtonLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public MultiButtonLayout.Builder();
+    method public androidx.wear.tiles.material.layouts.MultiButtonLayout.Builder addButtonContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.MultiButtonLayout build();
+    method public androidx.wear.tiles.material.layouts.MultiButtonLayout.Builder setFiveButtonDistribution(int);
+  }
+
+  public class MultiSlotLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.MultiSlotLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getHorizontalSpacerWidth();
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getSlotContents();
+  }
+
+  public static final class MultiSlotLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public MultiSlotLayout.Builder();
+    method public androidx.wear.tiles.material.layouts.MultiSlotLayout.Builder addSlotContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.MultiSlotLayout build();
+    method public androidx.wear.tiles.material.layouts.MultiSlotLayout.Builder setHorizontalSpacerWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class PrimaryLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.PrimaryLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryChipContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getVerticalSpacerHeight();
+  }
+
+  public static final class PrimaryLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public PrimaryLayout.Builder(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout build();
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setPrimaryChipContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setPrimaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setSecondaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setVerticalSpacerHeight(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+}
+
diff --git a/wear/tiles/tiles-material/api/public_plus_experimental_1.1.0-beta02.txt b/wear/tiles/tiles-material/api/public_plus_experimental_1.1.0-beta02.txt
new file mode 100644
index 0000000..aecb80e
--- /dev/null
+++ b/wear/tiles/tiles-material/api/public_plus_experimental_1.1.0-beta02.txt
@@ -0,0 +1,298 @@
+// Signature format: 4.0
+package androidx.wear.tiles.material {
+
+  public class Button implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.Button? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ButtonColors getButtonColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public CharSequence? getContentDescription();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getCustomContent();
+    method public String? getIconContent();
+    method public String? getImageContent();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getSize();
+    method public String? getTextContent();
+  }
+
+  public static final class Button.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public Button.Builder(android.content.Context, androidx.wear.tiles.ModifiersBuilders.Clickable);
+    method public androidx.wear.tiles.material.Button build();
+    method public androidx.wear.tiles.material.Button.Builder setButtonColors(androidx.wear.tiles.material.ButtonColors);
+    method public androidx.wear.tiles.material.Button.Builder setContentDescription(CharSequence);
+    method public androidx.wear.tiles.material.Button.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.Button.Builder setIconContent(String, androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.material.Button.Builder setIconContent(String);
+    method public androidx.wear.tiles.material.Button.Builder setImageContent(String);
+    method public androidx.wear.tiles.material.Button.Builder setSize(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+    method public androidx.wear.tiles.material.Button.Builder setTextContent(String);
+    method public androidx.wear.tiles.material.Button.Builder setTextContent(String, int);
+  }
+
+  public class ButtonColors {
+    ctor public ButtonColors(@ColorInt int, @ColorInt int);
+    ctor public ButtonColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
+    method public static androidx.wear.tiles.material.ButtonColors primaryButtonColors(androidx.wear.tiles.material.Colors);
+    method public static androidx.wear.tiles.material.ButtonColors secondaryButtonColors(androidx.wear.tiles.material.Colors);
+  }
+
+  public class ButtonDefaults {
+    method public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_SIZE;
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp EXTRA_LARGE_SIZE;
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp LARGE_SIZE;
+    field public static final androidx.wear.tiles.material.ButtonColors PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ButtonColors SECONDARY_COLORS;
+  }
+
+  public class Chip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.Chip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ChipColors getChipColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public CharSequence? getContentDescription();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getCustomContent();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getHeight();
+    method public int getHorizontalAlignment();
+    method public String? getIconContent();
+    method public String? getPrimaryLabelContent();
+    method public String? getSecondaryLabelContent();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth();
+  }
+
+  public static final class Chip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public Chip.Builder(android.content.Context, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.Chip build();
+    method public androidx.wear.tiles.material.Chip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
+    method public androidx.wear.tiles.material.Chip.Builder setContentDescription(CharSequence);
+    method public androidx.wear.tiles.material.Chip.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.Chip.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.material.Chip.Builder setIconContent(String);
+    method public androidx.wear.tiles.material.Chip.Builder setPrimaryLabelContent(String);
+    method public androidx.wear.tiles.material.Chip.Builder setSecondaryLabelContent(String);
+    method public androidx.wear.tiles.material.Chip.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.material.Chip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class ChipColors {
+    ctor public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
+    ctor public ChipColors(@ColorInt int, @ColorInt int);
+    ctor public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    ctor public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getIconColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getSecondaryContentColor();
+    method public static androidx.wear.tiles.material.ChipColors primaryChipColors(androidx.wear.tiles.material.Colors);
+    method public static androidx.wear.tiles.material.ChipColors secondaryChipColors(androidx.wear.tiles.material.Colors);
+  }
+
+  public class ChipDefaults {
+    field public static final androidx.wear.tiles.material.ChipColors COMPACT_PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors COMPACT_SECONDARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors SECONDARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors TITLE_PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors TITLE_SECONDARY_COLORS;
+  }
+
+  public class CircularProgressIndicator implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.CircularProgressIndicator? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ProgressIndicatorColors getCircularProgressIndicatorColors();
+    method public CharSequence? getContentDescription();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp getEndAngle();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp getProgress();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp getStartAngle();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp getStrokeWidth();
+  }
+
+  public static final class CircularProgressIndicator.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public CircularProgressIndicator.Builder();
+    method public androidx.wear.tiles.material.CircularProgressIndicator build();
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setCircularProgressIndicatorColors(androidx.wear.tiles.material.ProgressIndicatorColors);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setEndAngle(float);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStartAngle(float);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStrokeWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStrokeWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class Colors {
+    ctor public Colors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
+    method @ColorInt public int getOnPrimary();
+    method @ColorInt public int getOnSurface();
+    method @ColorInt public int getPrimary();
+    method @ColorInt public int getSurface();
+    field public static final androidx.wear.tiles.material.Colors DEFAULT;
+  }
+
+  public class CompactChip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.CompactChip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ChipColors getChipColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public String getText();
+  }
+
+  public static final class CompactChip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public CompactChip.Builder(android.content.Context, String, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.CompactChip build();
+    method public androidx.wear.tiles.material.CompactChip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
+  }
+
+  public class ProgressIndicatorColors {
+    ctor public ProgressIndicatorColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    ctor public ProgressIndicatorColors(@ColorInt int, @ColorInt int);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getIndicatorColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getTrackColor();
+    method public static androidx.wear.tiles.material.ProgressIndicatorColors progressIndicatorColors(androidx.wear.tiles.material.Colors);
+  }
+
+  public class ProgressIndicatorDefaults {
+    field public static final androidx.wear.tiles.material.ProgressIndicatorColors DEFAULT_COLORS;
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_STROKE_WIDTH;
+    field public static final float GAP_END_ANGLE = 156.1f;
+    field public static final float GAP_START_ANGLE = -156.1f;
+  }
+
+  public class Text implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.Text? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getColor();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle getFontStyle();
+    method public float getLineHeight();
+    method public int getMaxLines();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers getModifiers();
+    method public int getMultilineAlignment();
+    method public int getOverflow();
+    method public String getText();
+    method public int getWeight();
+    method public boolean isItalic();
+    method public boolean isUnderline();
+  }
+
+  public static final class Text.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public Text.Builder(android.content.Context, String);
+    method public androidx.wear.tiles.material.Text build();
+    method public androidx.wear.tiles.material.Text.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.material.Text.Builder setItalic(boolean);
+    method public androidx.wear.tiles.material.Text.Builder setMaxLines(@IntRange(from=1) int);
+    method public androidx.wear.tiles.material.Text.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.material.Text.Builder setMultilineAlignment(int);
+    method public androidx.wear.tiles.material.Text.Builder setOverflow(int);
+    method public androidx.wear.tiles.material.Text.Builder setTypography(int);
+    method public androidx.wear.tiles.material.Text.Builder setUnderline(boolean);
+    method public androidx.wear.tiles.material.Text.Builder setWeight(int);
+  }
+
+  public class TitleChip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.TitleChip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ChipColors getChipColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public int getHorizontalAlignment();
+    method public String getText();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth();
+  }
+
+  public static final class TitleChip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public TitleChip.Builder(android.content.Context, String, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.TitleChip build();
+    method public androidx.wear.tiles.material.TitleChip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
+    method public androidx.wear.tiles.material.TitleChip.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.material.TitleChip.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.material.TitleChip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class Typography {
+    field public static final int TYPOGRAPHY_BODY1 = 7; // 0x7
+    field public static final int TYPOGRAPHY_BODY2 = 8; // 0x8
+    field public static final int TYPOGRAPHY_BUTTON = 9; // 0x9
+    field public static final int TYPOGRAPHY_CAPTION1 = 10; // 0xa
+    field public static final int TYPOGRAPHY_CAPTION2 = 11; // 0xb
+    field public static final int TYPOGRAPHY_CAPTION3 = 12; // 0xc
+    field public static final int TYPOGRAPHY_DISPLAY1 = 1; // 0x1
+    field public static final int TYPOGRAPHY_DISPLAY2 = 2; // 0x2
+    field public static final int TYPOGRAPHY_DISPLAY3 = 3; // 0x3
+    field public static final int TYPOGRAPHY_TITLE1 = 4; // 0x4
+    field public static final int TYPOGRAPHY_TITLE2 = 5; // 0x5
+    field public static final int TYPOGRAPHY_TITLE3 = 6; // 0x6
+  }
+
+}
+
+package androidx.wear.tiles.material.layouts {
+
+  public class EdgeContentLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.EdgeContentLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getEdgeContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
+  }
+
+  public static final class EdgeContentLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public EdgeContentLayout.Builder(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout build();
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setEdgeContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setPrimaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setSecondaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+  }
+
+  public class LayoutDefaults {
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_VERTICAL_SPACER_HEIGHT;
+    field public static final float EDGE_CONTENT_LAYOUT_PADDING_ABOVE_MAIN_CONTENT_DP = 6.0f;
+    field public static final float EDGE_CONTENT_LAYOUT_PADDING_BELOW_MAIN_CONTENT_DP = 8.0f;
+    field public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH;
+  }
+
+  public class MultiButtonLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.MultiButtonLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getButtonContents();
+    method public int getFiveButtonDistribution();
+    field public static final int FIVE_BUTTON_DISTRIBUTION_BOTTOM_HEAVY = 2; // 0x2
+    field public static final int FIVE_BUTTON_DISTRIBUTION_TOP_HEAVY = 1; // 0x1
+  }
+
+  public static final class MultiButtonLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public MultiButtonLayout.Builder();
+    method public androidx.wear.tiles.material.layouts.MultiButtonLayout.Builder addButtonContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.MultiButtonLayout build();
+    method public androidx.wear.tiles.material.layouts.MultiButtonLayout.Builder setFiveButtonDistribution(int);
+  }
+
+  public class MultiSlotLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.MultiSlotLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getHorizontalSpacerWidth();
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getSlotContents();
+  }
+
+  public static final class MultiSlotLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public MultiSlotLayout.Builder();
+    method public androidx.wear.tiles.material.layouts.MultiSlotLayout.Builder addSlotContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.MultiSlotLayout build();
+    method public androidx.wear.tiles.material.layouts.MultiSlotLayout.Builder setHorizontalSpacerWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class PrimaryLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.PrimaryLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryChipContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getVerticalSpacerHeight();
+  }
+
+  public static final class PrimaryLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public PrimaryLayout.Builder(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout build();
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setPrimaryChipContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setPrimaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setSecondaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setVerticalSpacerHeight(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+}
+
diff --git a/core/core-ktx/api/res-1.8.0-beta01.txt b/wear/tiles/tiles-material/api/res-1.1.0-beta02.txt
similarity index 100%
copy from core/core-ktx/api/res-1.8.0-beta01.txt
copy to wear/tiles/tiles-material/api/res-1.1.0-beta02.txt
diff --git a/wear/tiles/tiles-material/api/restricted_1.1.0-beta02.txt b/wear/tiles/tiles-material/api/restricted_1.1.0-beta02.txt
new file mode 100644
index 0000000..aecb80e
--- /dev/null
+++ b/wear/tiles/tiles-material/api/restricted_1.1.0-beta02.txt
@@ -0,0 +1,298 @@
+// Signature format: 4.0
+package androidx.wear.tiles.material {
+
+  public class Button implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.Button? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ButtonColors getButtonColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public CharSequence? getContentDescription();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getCustomContent();
+    method public String? getIconContent();
+    method public String? getImageContent();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getSize();
+    method public String? getTextContent();
+  }
+
+  public static final class Button.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public Button.Builder(android.content.Context, androidx.wear.tiles.ModifiersBuilders.Clickable);
+    method public androidx.wear.tiles.material.Button build();
+    method public androidx.wear.tiles.material.Button.Builder setButtonColors(androidx.wear.tiles.material.ButtonColors);
+    method public androidx.wear.tiles.material.Button.Builder setContentDescription(CharSequence);
+    method public androidx.wear.tiles.material.Button.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.Button.Builder setIconContent(String, androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.material.Button.Builder setIconContent(String);
+    method public androidx.wear.tiles.material.Button.Builder setImageContent(String);
+    method public androidx.wear.tiles.material.Button.Builder setSize(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+    method public androidx.wear.tiles.material.Button.Builder setTextContent(String);
+    method public androidx.wear.tiles.material.Button.Builder setTextContent(String, int);
+  }
+
+  public class ButtonColors {
+    ctor public ButtonColors(@ColorInt int, @ColorInt int);
+    ctor public ButtonColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
+    method public static androidx.wear.tiles.material.ButtonColors primaryButtonColors(androidx.wear.tiles.material.Colors);
+    method public static androidx.wear.tiles.material.ButtonColors secondaryButtonColors(androidx.wear.tiles.material.Colors);
+  }
+
+  public class ButtonDefaults {
+    method public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_SIZE;
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp EXTRA_LARGE_SIZE;
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp LARGE_SIZE;
+    field public static final androidx.wear.tiles.material.ButtonColors PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ButtonColors SECONDARY_COLORS;
+  }
+
+  public class Chip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.Chip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ChipColors getChipColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public CharSequence? getContentDescription();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getCustomContent();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getHeight();
+    method public int getHorizontalAlignment();
+    method public String? getIconContent();
+    method public String? getPrimaryLabelContent();
+    method public String? getSecondaryLabelContent();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth();
+  }
+
+  public static final class Chip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public Chip.Builder(android.content.Context, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.Chip build();
+    method public androidx.wear.tiles.material.Chip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
+    method public androidx.wear.tiles.material.Chip.Builder setContentDescription(CharSequence);
+    method public androidx.wear.tiles.material.Chip.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.Chip.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.material.Chip.Builder setIconContent(String);
+    method public androidx.wear.tiles.material.Chip.Builder setPrimaryLabelContent(String);
+    method public androidx.wear.tiles.material.Chip.Builder setSecondaryLabelContent(String);
+    method public androidx.wear.tiles.material.Chip.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.material.Chip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class ChipColors {
+    ctor public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
+    ctor public ChipColors(@ColorInt int, @ColorInt int);
+    ctor public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    ctor public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getIconColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getSecondaryContentColor();
+    method public static androidx.wear.tiles.material.ChipColors primaryChipColors(androidx.wear.tiles.material.Colors);
+    method public static androidx.wear.tiles.material.ChipColors secondaryChipColors(androidx.wear.tiles.material.Colors);
+  }
+
+  public class ChipDefaults {
+    field public static final androidx.wear.tiles.material.ChipColors COMPACT_PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors COMPACT_SECONDARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors SECONDARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors TITLE_PRIMARY_COLORS;
+    field public static final androidx.wear.tiles.material.ChipColors TITLE_SECONDARY_COLORS;
+  }
+
+  public class CircularProgressIndicator implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.CircularProgressIndicator? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ProgressIndicatorColors getCircularProgressIndicatorColors();
+    method public CharSequence? getContentDescription();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp getEndAngle();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp getProgress();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp getStartAngle();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp getStrokeWidth();
+  }
+
+  public static final class CircularProgressIndicator.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public CircularProgressIndicator.Builder();
+    method public androidx.wear.tiles.material.CircularProgressIndicator build();
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setCircularProgressIndicatorColors(androidx.wear.tiles.material.ProgressIndicatorColors);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setEndAngle(float);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStartAngle(float);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStrokeWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStrokeWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class Colors {
+    ctor public Colors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
+    method @ColorInt public int getOnPrimary();
+    method @ColorInt public int getOnSurface();
+    method @ColorInt public int getPrimary();
+    method @ColorInt public int getSurface();
+    field public static final androidx.wear.tiles.material.Colors DEFAULT;
+  }
+
+  public class CompactChip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.CompactChip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ChipColors getChipColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public String getText();
+  }
+
+  public static final class CompactChip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public CompactChip.Builder(android.content.Context, String, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.CompactChip build();
+    method public androidx.wear.tiles.material.CompactChip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
+  }
+
+  public class ProgressIndicatorColors {
+    ctor public ProgressIndicatorColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
+    ctor public ProgressIndicatorColors(@ColorInt int, @ColorInt int);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getIndicatorColor();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getTrackColor();
+    method public static androidx.wear.tiles.material.ProgressIndicatorColors progressIndicatorColors(androidx.wear.tiles.material.Colors);
+  }
+
+  public class ProgressIndicatorDefaults {
+    field public static final androidx.wear.tiles.material.ProgressIndicatorColors DEFAULT_COLORS;
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_STROKE_WIDTH;
+    field public static final float GAP_END_ANGLE = 156.1f;
+    field public static final float GAP_START_ANGLE = -156.1f;
+  }
+
+  public class Text implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.Text? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.ColorBuilders.ColorProp getColor();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle getFontStyle();
+    method public float getLineHeight();
+    method public int getMaxLines();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers getModifiers();
+    method public int getMultilineAlignment();
+    method public int getOverflow();
+    method public String getText();
+    method public int getWeight();
+    method public boolean isItalic();
+    method public boolean isUnderline();
+  }
+
+  public static final class Text.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public Text.Builder(android.content.Context, String);
+    method public androidx.wear.tiles.material.Text build();
+    method public androidx.wear.tiles.material.Text.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.material.Text.Builder setItalic(boolean);
+    method public androidx.wear.tiles.material.Text.Builder setMaxLines(@IntRange(from=1) int);
+    method public androidx.wear.tiles.material.Text.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.material.Text.Builder setMultilineAlignment(int);
+    method public androidx.wear.tiles.material.Text.Builder setOverflow(int);
+    method public androidx.wear.tiles.material.Text.Builder setTypography(int);
+    method public androidx.wear.tiles.material.Text.Builder setUnderline(boolean);
+    method public androidx.wear.tiles.material.Text.Builder setWeight(int);
+  }
+
+  public class TitleChip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.TitleChip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.ChipColors getChipColors();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
+    method public int getHorizontalAlignment();
+    method public String getText();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth();
+  }
+
+  public static final class TitleChip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public TitleChip.Builder(android.content.Context, String, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.TitleChip build();
+    method public androidx.wear.tiles.material.TitleChip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
+    method public androidx.wear.tiles.material.TitleChip.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.material.TitleChip.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.material.TitleChip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class Typography {
+    field public static final int TYPOGRAPHY_BODY1 = 7; // 0x7
+    field public static final int TYPOGRAPHY_BODY2 = 8; // 0x8
+    field public static final int TYPOGRAPHY_BUTTON = 9; // 0x9
+    field public static final int TYPOGRAPHY_CAPTION1 = 10; // 0xa
+    field public static final int TYPOGRAPHY_CAPTION2 = 11; // 0xb
+    field public static final int TYPOGRAPHY_CAPTION3 = 12; // 0xc
+    field public static final int TYPOGRAPHY_DISPLAY1 = 1; // 0x1
+    field public static final int TYPOGRAPHY_DISPLAY2 = 2; // 0x2
+    field public static final int TYPOGRAPHY_DISPLAY3 = 3; // 0x3
+    field public static final int TYPOGRAPHY_TITLE1 = 4; // 0x4
+    field public static final int TYPOGRAPHY_TITLE2 = 5; // 0x5
+    field public static final int TYPOGRAPHY_TITLE3 = 6; // 0x6
+  }
+
+}
+
+package androidx.wear.tiles.material.layouts {
+
+  public class EdgeContentLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.EdgeContentLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getEdgeContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
+  }
+
+  public static final class EdgeContentLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public EdgeContentLayout.Builder(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout build();
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setEdgeContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setPrimaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setSecondaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+  }
+
+  public class LayoutDefaults {
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_VERTICAL_SPACER_HEIGHT;
+    field public static final float EDGE_CONTENT_LAYOUT_PADDING_ABOVE_MAIN_CONTENT_DP = 6.0f;
+    field public static final float EDGE_CONTENT_LAYOUT_PADDING_BELOW_MAIN_CONTENT_DP = 8.0f;
+    field public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
+    field public static final androidx.wear.tiles.DimensionBuilders.DpProp MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH;
+  }
+
+  public class MultiButtonLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.MultiButtonLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getButtonContents();
+    method public int getFiveButtonDistribution();
+    field public static final int FIVE_BUTTON_DISTRIBUTION_BOTTOM_HEAVY = 2; // 0x2
+    field public static final int FIVE_BUTTON_DISTRIBUTION_TOP_HEAVY = 1; // 0x1
+  }
+
+  public static final class MultiButtonLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public MultiButtonLayout.Builder();
+    method public androidx.wear.tiles.material.layouts.MultiButtonLayout.Builder addButtonContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.MultiButtonLayout build();
+    method public androidx.wear.tiles.material.layouts.MultiButtonLayout.Builder setFiveButtonDistribution(int);
+  }
+
+  public class MultiSlotLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.MultiSlotLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getHorizontalSpacerWidth();
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getSlotContents();
+  }
+
+  public static final class MultiSlotLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public MultiSlotLayout.Builder();
+    method public androidx.wear.tiles.material.layouts.MultiSlotLayout.Builder addSlotContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.MultiSlotLayout build();
+    method public androidx.wear.tiles.material.layouts.MultiSlotLayout.Builder setHorizontalSpacerWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public class PrimaryLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public static androidx.wear.tiles.material.layouts.PrimaryLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryChipContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getVerticalSpacerHeight();
+  }
+
+  public static final class PrimaryLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public PrimaryLayout.Builder(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout build();
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setPrimaryChipContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setPrimaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setSecondaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setVerticalSpacerHeight(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+}
+
diff --git a/wear/tiles/tiles-renderer/api/1.1.0-beta02.txt b/wear/tiles/tiles-renderer/api/1.1.0-beta02.txt
new file mode 100644
index 0000000..a162ceb
--- /dev/null
+++ b/wear/tiles/tiles-renderer/api/1.1.0-beta02.txt
@@ -0,0 +1,80 @@
+// Signature format: 4.0
+package androidx.wear.tiles.client {
+
+  public interface TileClient {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> requestApiVersion();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources!> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile!> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileAddedEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileEnterEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileLeaveEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileRemovedEvent();
+  }
+
+}
+
+package androidx.wear.tiles.connection {
+
+  public final class DefaultTileClient implements androidx.wear.tiles.client.TileClient {
+    ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
+    ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, java.util.concurrent.Executor executor);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileAddedEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileEnterEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileLeaveEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileRemovedEvent();
+  }
+
+}
+
+package androidx.wear.tiles.manager {
+
+  public final class TileUiClient implements java.lang.AutoCloseable {
+    ctor public TileUiClient(android.content.Context context, android.content.ComponentName component, android.view.ViewGroup parentView);
+    method @MainThread public void close();
+    method @MainThread public void connect();
+  }
+
+}
+
+package androidx.wear.tiles.renderer {
+
+  public final class TileRenderer {
+    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    method public android.view.View? inflate(android.view.ViewGroup);
+  }
+
+  public static interface TileRenderer.LoadActionListener {
+    method public void onClick(androidx.wear.tiles.StateBuilders.State);
+  }
+
+}
+
+package androidx.wear.tiles.timeline {
+
+  public final class TilesTimelineCache {
+    ctor public TilesTimelineCache(androidx.wear.tiles.TimelineBuilders.Timeline);
+    method @MainThread public androidx.wear.tiles.TimelineBuilders.TimelineEntry? findClosestTimelineEntry(long);
+    method @MainThread public long findCurrentTimelineEntryExpiry(androidx.wear.tiles.TimelineBuilders.TimelineEntry, long);
+    method @MainThread public androidx.wear.tiles.TimelineBuilders.TimelineEntry? findTimelineEntryForTime(long);
+  }
+
+  public class TilesTimelineManager implements java.lang.AutoCloseable {
+    ctor public TilesTimelineManager(android.app.AlarmManager, androidx.wear.tiles.timeline.TilesTimelineManager.Clock, androidx.wear.tiles.TimelineBuilders.Timeline, int, java.util.concurrent.Executor, androidx.wear.tiles.timeline.TilesTimelineManager.Listener);
+    method public void close();
+    method public void init();
+  }
+
+  public static interface TilesTimelineManager.Clock {
+    method public long getCurrentTimeMillis();
+  }
+
+  public static interface TilesTimelineManager.Listener {
+    method public void onLayoutUpdate(int, androidx.wear.tiles.LayoutElementBuilders.Layout);
+  }
+
+}
+
diff --git a/wear/tiles/tiles-renderer/api/public_plus_experimental_1.1.0-beta02.txt b/wear/tiles/tiles-renderer/api/public_plus_experimental_1.1.0-beta02.txt
new file mode 100644
index 0000000..a162ceb
--- /dev/null
+++ b/wear/tiles/tiles-renderer/api/public_plus_experimental_1.1.0-beta02.txt
@@ -0,0 +1,80 @@
+// Signature format: 4.0
+package androidx.wear.tiles.client {
+
+  public interface TileClient {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> requestApiVersion();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources!> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile!> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileAddedEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileEnterEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileLeaveEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileRemovedEvent();
+  }
+
+}
+
+package androidx.wear.tiles.connection {
+
+  public final class DefaultTileClient implements androidx.wear.tiles.client.TileClient {
+    ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
+    ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, java.util.concurrent.Executor executor);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileAddedEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileEnterEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileLeaveEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileRemovedEvent();
+  }
+
+}
+
+package androidx.wear.tiles.manager {
+
+  public final class TileUiClient implements java.lang.AutoCloseable {
+    ctor public TileUiClient(android.content.Context context, android.content.ComponentName component, android.view.ViewGroup parentView);
+    method @MainThread public void close();
+    method @MainThread public void connect();
+  }
+
+}
+
+package androidx.wear.tiles.renderer {
+
+  public final class TileRenderer {
+    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    method public android.view.View? inflate(android.view.ViewGroup);
+  }
+
+  public static interface TileRenderer.LoadActionListener {
+    method public void onClick(androidx.wear.tiles.StateBuilders.State);
+  }
+
+}
+
+package androidx.wear.tiles.timeline {
+
+  public final class TilesTimelineCache {
+    ctor public TilesTimelineCache(androidx.wear.tiles.TimelineBuilders.Timeline);
+    method @MainThread public androidx.wear.tiles.TimelineBuilders.TimelineEntry? findClosestTimelineEntry(long);
+    method @MainThread public long findCurrentTimelineEntryExpiry(androidx.wear.tiles.TimelineBuilders.TimelineEntry, long);
+    method @MainThread public androidx.wear.tiles.TimelineBuilders.TimelineEntry? findTimelineEntryForTime(long);
+  }
+
+  public class TilesTimelineManager implements java.lang.AutoCloseable {
+    ctor public TilesTimelineManager(android.app.AlarmManager, androidx.wear.tiles.timeline.TilesTimelineManager.Clock, androidx.wear.tiles.TimelineBuilders.Timeline, int, java.util.concurrent.Executor, androidx.wear.tiles.timeline.TilesTimelineManager.Listener);
+    method public void close();
+    method public void init();
+  }
+
+  public static interface TilesTimelineManager.Clock {
+    method public long getCurrentTimeMillis();
+  }
+
+  public static interface TilesTimelineManager.Listener {
+    method public void onLayoutUpdate(int, androidx.wear.tiles.LayoutElementBuilders.Layout);
+  }
+
+}
+
diff --git a/core/core-ktx/api/res-1.8.0-beta01.txt b/wear/tiles/tiles-renderer/api/res-1.1.0-beta02.txt
similarity index 100%
copy from core/core-ktx/api/res-1.8.0-beta01.txt
copy to wear/tiles/tiles-renderer/api/res-1.1.0-beta02.txt
diff --git a/wear/tiles/tiles-renderer/api/restricted_1.1.0-beta02.txt b/wear/tiles/tiles-renderer/api/restricted_1.1.0-beta02.txt
new file mode 100644
index 0000000..a162ceb
--- /dev/null
+++ b/wear/tiles/tiles-renderer/api/restricted_1.1.0-beta02.txt
@@ -0,0 +1,80 @@
+// Signature format: 4.0
+package androidx.wear.tiles.client {
+
+  public interface TileClient {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> requestApiVersion();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources!> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile!> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileAddedEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileEnterEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileLeaveEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileRemovedEvent();
+  }
+
+}
+
+package androidx.wear.tiles.connection {
+
+  public final class DefaultTileClient implements androidx.wear.tiles.client.TileClient {
+    ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
+    ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, java.util.concurrent.Executor executor);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileAddedEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileEnterEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileLeaveEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileRemovedEvent();
+  }
+
+}
+
+package androidx.wear.tiles.manager {
+
+  public final class TileUiClient implements java.lang.AutoCloseable {
+    ctor public TileUiClient(android.content.Context context, android.content.ComponentName component, android.view.ViewGroup parentView);
+    method @MainThread public void close();
+    method @MainThread public void connect();
+  }
+
+}
+
+package androidx.wear.tiles.renderer {
+
+  public final class TileRenderer {
+    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+    method public android.view.View? inflate(android.view.ViewGroup);
+  }
+
+  public static interface TileRenderer.LoadActionListener {
+    method public void onClick(androidx.wear.tiles.StateBuilders.State);
+  }
+
+}
+
+package androidx.wear.tiles.timeline {
+
+  public final class TilesTimelineCache {
+    ctor public TilesTimelineCache(androidx.wear.tiles.TimelineBuilders.Timeline);
+    method @MainThread public androidx.wear.tiles.TimelineBuilders.TimelineEntry? findClosestTimelineEntry(long);
+    method @MainThread public long findCurrentTimelineEntryExpiry(androidx.wear.tiles.TimelineBuilders.TimelineEntry, long);
+    method @MainThread public androidx.wear.tiles.TimelineBuilders.TimelineEntry? findTimelineEntryForTime(long);
+  }
+
+  public class TilesTimelineManager implements java.lang.AutoCloseable {
+    ctor public TilesTimelineManager(android.app.AlarmManager, androidx.wear.tiles.timeline.TilesTimelineManager.Clock, androidx.wear.tiles.TimelineBuilders.Timeline, int, java.util.concurrent.Executor, androidx.wear.tiles.timeline.TilesTimelineManager.Listener);
+    method public void close();
+    method public void init();
+  }
+
+  public static interface TilesTimelineManager.Clock {
+    method public long getCurrentTimeMillis();
+  }
+
+  public static interface TilesTimelineManager.Listener {
+    method public void onLayoutUpdate(int, androidx.wear.tiles.LayoutElementBuilders.Layout);
+  }
+
+}
+
diff --git a/wear/tiles/tiles-testing/api/1.1.0-beta02.txt b/wear/tiles/tiles-testing/api/1.1.0-beta02.txt
new file mode 100644
index 0000000..353b0c6
--- /dev/null
+++ b/wear/tiles/tiles-testing/api/1.1.0-beta02.txt
@@ -0,0 +1,17 @@
+// Signature format: 4.0
+package androidx.wear.tiles.testing {
+
+  public final class TestTileClient<T extends androidx.wear.tiles.TileService> implements androidx.wear.tiles.client.TileClient {
+    ctor public TestTileClient(T service, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
+    ctor public TestTileClient(T service, java.util.concurrent.Executor executor);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileAddedEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileEnterEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileLeaveEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileRemovedEvent();
+  }
+
+}
+
diff --git a/wear/tiles/tiles-testing/api/public_plus_experimental_1.1.0-beta02.txt b/wear/tiles/tiles-testing/api/public_plus_experimental_1.1.0-beta02.txt
new file mode 100644
index 0000000..353b0c6
--- /dev/null
+++ b/wear/tiles/tiles-testing/api/public_plus_experimental_1.1.0-beta02.txt
@@ -0,0 +1,17 @@
+// Signature format: 4.0
+package androidx.wear.tiles.testing {
+
+  public final class TestTileClient<T extends androidx.wear.tiles.TileService> implements androidx.wear.tiles.client.TileClient {
+    ctor public TestTileClient(T service, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
+    ctor public TestTileClient(T service, java.util.concurrent.Executor executor);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileAddedEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileEnterEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileLeaveEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileRemovedEvent();
+  }
+
+}
+
diff --git a/fragment/fragment-testing/api/res-1.5.0-beta01.txt b/wear/tiles/tiles-testing/api/res-1.1.0-beta02.txt
similarity index 100%
rename from fragment/fragment-testing/api/res-1.5.0-beta01.txt
rename to wear/tiles/tiles-testing/api/res-1.1.0-beta02.txt
diff --git a/wear/tiles/tiles-testing/api/restricted_1.1.0-beta02.txt b/wear/tiles/tiles-testing/api/restricted_1.1.0-beta02.txt
new file mode 100644
index 0000000..353b0c6
--- /dev/null
+++ b/wear/tiles/tiles-testing/api/restricted_1.1.0-beta02.txt
@@ -0,0 +1,17 @@
+// Signature format: 4.0
+package androidx.wear.tiles.testing {
+
+  public final class TestTileClient<T extends androidx.wear.tiles.TileService> implements androidx.wear.tiles.client.TileClient {
+    ctor public TestTileClient(T service, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
+    ctor public TestTileClient(T service, java.util.concurrent.Executor executor);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileAddedEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileEnterEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileLeaveEvent();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> sendOnTileRemovedEvent();
+  }
+
+}
+
diff --git a/wear/tiles/tiles/api/1.1.0-beta02.txt b/wear/tiles/tiles/api/1.1.0-beta02.txt
new file mode 100644
index 0000000..1f4b5140
--- /dev/null
+++ b/wear/tiles/tiles/api/1.1.0-beta02.txt
@@ -0,0 +1,1084 @@
+// Signature format: 4.0
+package androidx.wear.tiles {
+
+  public final class ActionBuilders {
+    method public static androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra booleanExtra(boolean);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra doubleExtra(double);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidIntExtra intExtra(int);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidLongExtra longExtra(long);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidStringExtra stringExtra(String);
+  }
+
+  public static interface ActionBuilders.Action {
+  }
+
+  public static interface ActionBuilders.Action.Builder {
+    method public androidx.wear.tiles.ActionBuilders.Action build();
+  }
+
+  public static final class ActionBuilders.AndroidActivity {
+    method public String getClassName();
+    method public java.util.Map<java.lang.String!,androidx.wear.tiles.ActionBuilders.AndroidExtra!> getKeyToExtraMapping();
+    method public String getPackageName();
+  }
+
+  public static final class ActionBuilders.AndroidActivity.Builder {
+    ctor public ActionBuilders.AndroidActivity.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder addKeyToExtraMapping(String, androidx.wear.tiles.ActionBuilders.AndroidExtra);
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder setClassName(String);
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder setPackageName(String);
+  }
+
+  public static final class ActionBuilders.AndroidBooleanExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public boolean getValue();
+  }
+
+  public static final class ActionBuilders.AndroidBooleanExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidBooleanExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra.Builder setValue(boolean);
+  }
+
+  public static final class ActionBuilders.AndroidDoubleExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public double getValue();
+  }
+
+  public static final class ActionBuilders.AndroidDoubleExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidDoubleExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra.Builder setValue(double);
+  }
+
+  public static interface ActionBuilders.AndroidExtra {
+  }
+
+  public static interface ActionBuilders.AndroidExtra.Builder {
+    method public androidx.wear.tiles.ActionBuilders.AndroidExtra build();
+  }
+
+  public static final class ActionBuilders.AndroidIntExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public int getValue();
+  }
+
+  public static final class ActionBuilders.AndroidIntExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidIntExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidIntExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidIntExtra.Builder setValue(int);
+  }
+
+  public static final class ActionBuilders.AndroidLongExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public long getValue();
+  }
+
+  public static final class ActionBuilders.AndroidLongExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidLongExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidLongExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidLongExtra.Builder setValue(long);
+  }
+
+  public static final class ActionBuilders.AndroidStringExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public String getValue();
+  }
+
+  public static final class ActionBuilders.AndroidStringExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidStringExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidStringExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidStringExtra.Builder setValue(String);
+  }
+
+  public static final class ActionBuilders.LaunchAction implements androidx.wear.tiles.ActionBuilders.Action {
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity? getAndroidActivity();
+  }
+
+  public static final class ActionBuilders.LaunchAction.Builder implements androidx.wear.tiles.ActionBuilders.Action.Builder {
+    ctor public ActionBuilders.LaunchAction.Builder();
+    method public androidx.wear.tiles.ActionBuilders.LaunchAction build();
+    method public androidx.wear.tiles.ActionBuilders.LaunchAction.Builder setAndroidActivity(androidx.wear.tiles.ActionBuilders.AndroidActivity);
+  }
+
+  public static final class ActionBuilders.LoadAction implements androidx.wear.tiles.ActionBuilders.Action {
+    method public androidx.wear.tiles.StateBuilders.State? getRequestState();
+  }
+
+  public static final class ActionBuilders.LoadAction.Builder implements androidx.wear.tiles.ActionBuilders.Action.Builder {
+    ctor public ActionBuilders.LoadAction.Builder();
+    method public androidx.wear.tiles.ActionBuilders.LoadAction build();
+    method public androidx.wear.tiles.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.tiles.StateBuilders.State);
+  }
+
+  public final class ColorBuilders {
+    method public static androidx.wear.tiles.ColorBuilders.ColorProp argb(@ColorInt int);
+  }
+
+  public static final class ColorBuilders.ColorProp {
+    method @ColorInt public int getArgb();
+  }
+
+  public static final class ColorBuilders.ColorProp.Builder {
+    ctor public ColorBuilders.ColorProp.Builder();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp build();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp.Builder setArgb(@ColorInt int);
+  }
+
+  public final class DeviceParametersBuilders {
+    field public static final int DEVICE_PLATFORM_UNDEFINED = 0; // 0x0
+    field public static final int DEVICE_PLATFORM_WEAR_OS = 1; // 0x1
+    field public static final int SCREEN_SHAPE_RECT = 2; // 0x2
+    field public static final int SCREEN_SHAPE_ROUND = 1; // 0x1
+    field public static final int SCREEN_SHAPE_UNDEFINED = 0; // 0x0
+  }
+
+  public static final class DeviceParametersBuilders.DeviceParameters {
+    method public int getDevicePlatform();
+    method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getScreenDensity();
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenHeightDp();
+    method public int getScreenShape();
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenWidthDp();
+  }
+
+  public static final class DeviceParametersBuilders.DeviceParameters.Builder {
+    ctor public DeviceParametersBuilders.DeviceParameters.Builder();
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters build();
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setDevicePlatform(int);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenDensity(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenHeightDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenShape(int);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenWidthDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+  }
+
+  public final class DimensionBuilders {
+    method public static androidx.wear.tiles.DimensionBuilders.DegreesProp degrees(float);
+    method public static androidx.wear.tiles.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+    method public static androidx.wear.tiles.DimensionBuilders.EmProp em(int);
+    method public static androidx.wear.tiles.DimensionBuilders.EmProp em(float);
+    method public static androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp expand();
+    method public static androidx.wear.tiles.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
+    method public static androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp wrap();
+  }
+
+  public static interface DimensionBuilders.ContainerDimension {
+  }
+
+  public static interface DimensionBuilders.ContainerDimension.Builder {
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension build();
+  }
+
+  public static final class DimensionBuilders.DegreesProp {
+    method public float getValue();
+  }
+
+  public static final class DimensionBuilders.DegreesProp.Builder {
+    ctor public DimensionBuilders.DegreesProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp build();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp.Builder setValue(float);
+  }
+
+  public static final class DimensionBuilders.DpProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension androidx.wear.tiles.DimensionBuilders.ImageDimension androidx.wear.tiles.DimensionBuilders.SpacerDimension {
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
+  }
+
+  public static final class DimensionBuilders.DpProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder androidx.wear.tiles.DimensionBuilders.SpacerDimension.Builder {
+    ctor public DimensionBuilders.DpProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp build();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public static final class DimensionBuilders.EmProp {
+    method public float getValue();
+  }
+
+  public static final class DimensionBuilders.EmProp.Builder {
+    ctor public DimensionBuilders.EmProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.EmProp build();
+    method public androidx.wear.tiles.DimensionBuilders.EmProp.Builder setValue(float);
+  }
+
+  public static final class DimensionBuilders.ExpandedDimensionProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension androidx.wear.tiles.DimensionBuilders.ImageDimension {
+  }
+
+  public static final class DimensionBuilders.ExpandedDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder {
+    ctor public DimensionBuilders.ExpandedDimensionProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp build();
+  }
+
+  public static interface DimensionBuilders.ImageDimension {
+  }
+
+  public static interface DimensionBuilders.ImageDimension.Builder {
+    method public androidx.wear.tiles.DimensionBuilders.ImageDimension build();
+  }
+
+  public static final class DimensionBuilders.ProportionalDimensionProp implements androidx.wear.tiles.DimensionBuilders.ImageDimension {
+    method @IntRange(from=0) public int getAspectRatioHeight();
+    method @IntRange(from=0) public int getAspectRatioWidth();
+  }
+
+  public static final class DimensionBuilders.ProportionalDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder {
+    ctor public DimensionBuilders.ProportionalDimensionProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp build();
+    method public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioHeight(@IntRange(from=0) int);
+    method public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioWidth(@IntRange(from=0) int);
+  }
+
+  public static final class DimensionBuilders.SpProp {
+    method @Dimension(unit=androidx.annotation.Dimension.SP) public float getValue();
+  }
+
+  public static final class DimensionBuilders.SpProp.Builder {
+    ctor public DimensionBuilders.SpProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp build();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.SP) float);
+  }
+
+  public static interface DimensionBuilders.SpacerDimension {
+  }
+
+  public static interface DimensionBuilders.SpacerDimension.Builder {
+    method public androidx.wear.tiles.DimensionBuilders.SpacerDimension build();
+  }
+
+  public static final class DimensionBuilders.WrappedDimensionProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension {
+  }
+
+  public static final class DimensionBuilders.WrappedDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder {
+    ctor public DimensionBuilders.WrappedDimensionProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp build();
+  }
+
+  public final class EventBuilders {
+  }
+
+  public static final class EventBuilders.TileAddEvent {
+  }
+
+  public static final class EventBuilders.TileAddEvent.Builder {
+    ctor public EventBuilders.TileAddEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileAddEvent build();
+  }
+
+  public static final class EventBuilders.TileEnterEvent {
+  }
+
+  public static final class EventBuilders.TileEnterEvent.Builder {
+    ctor public EventBuilders.TileEnterEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileEnterEvent build();
+  }
+
+  public static final class EventBuilders.TileLeaveEvent {
+  }
+
+  public static final class EventBuilders.TileLeaveEvent.Builder {
+    ctor public EventBuilders.TileLeaveEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileLeaveEvent build();
+  }
+
+  public static final class EventBuilders.TileRemoveEvent {
+  }
+
+  public static final class EventBuilders.TileRemoveEvent.Builder {
+    ctor public EventBuilders.TileRemoveEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileRemoveEvent build();
+  }
+
+  public final class LayoutElementBuilders {
+    field public static final int ARC_ANCHOR_CENTER = 2; // 0x2
+    field public static final int ARC_ANCHOR_END = 3; // 0x3
+    field public static final int ARC_ANCHOR_START = 1; // 0x1
+    field public static final int ARC_ANCHOR_UNDEFINED = 0; // 0x0
+    field public static final int CONTENT_SCALE_MODE_CROP = 2; // 0x2
+    field public static final int CONTENT_SCALE_MODE_FILL_BOUNDS = 3; // 0x3
+    field public static final int CONTENT_SCALE_MODE_FIT = 1; // 0x1
+    field public static final int CONTENT_SCALE_MODE_UNDEFINED = 0; // 0x0
+    field public static final int FONT_VARIANT_BODY = 2; // 0x2
+    field public static final int FONT_VARIANT_TITLE = 1; // 0x1
+    field public static final int FONT_VARIANT_UNDEFINED = 0; // 0x0
+    field public static final int FONT_WEIGHT_BOLD = 700; // 0x2bc
+    field public static final int FONT_WEIGHT_NORMAL = 400; // 0x190
+    field public static final int FONT_WEIGHT_UNDEFINED = 0; // 0x0
+    field public static final int HORIZONTAL_ALIGN_CENTER = 2; // 0x2
+    field public static final int HORIZONTAL_ALIGN_END = 5; // 0x5
+    field public static final int HORIZONTAL_ALIGN_LEFT = 1; // 0x1
+    field public static final int HORIZONTAL_ALIGN_RIGHT = 3; // 0x3
+    field public static final int HORIZONTAL_ALIGN_START = 4; // 0x4
+    field public static final int HORIZONTAL_ALIGN_UNDEFINED = 0; // 0x0
+    field public static final int SPAN_VERTICAL_ALIGN_BOTTOM = 1; // 0x1
+    field public static final int SPAN_VERTICAL_ALIGN_TEXT_BASELINE = 2; // 0x2
+    field public static final int SPAN_VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
+    field public static final int TEXT_ALIGN_CENTER = 2; // 0x2
+    field public static final int TEXT_ALIGN_END = 3; // 0x3
+    field public static final int TEXT_ALIGN_START = 1; // 0x1
+    field public static final int TEXT_ALIGN_UNDEFINED = 0; // 0x0
+    field public static final int TEXT_OVERFLOW_ELLIPSIZE_END = 2; // 0x2
+    field public static final int TEXT_OVERFLOW_TRUNCATE = 1; // 0x1
+    field public static final int TEXT_OVERFLOW_UNDEFINED = 0; // 0x0
+    field public static final int VERTICAL_ALIGN_BOTTOM = 3; // 0x3
+    field public static final int VERTICAL_ALIGN_CENTER = 2; // 0x2
+    field public static final int VERTICAL_ALIGN_TOP = 1; // 0x1
+    field public static final int VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
+  }
+
+  public static final class LayoutElementBuilders.Arc implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp? getAnchorAngle();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp? getAnchorType();
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement!> getContents();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlign();
+  }
+
+  public static final class LayoutElementBuilders.Arc.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Arc.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorAngle(androidx.wear.tiles.DimensionBuilders.DegreesProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorType(androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorType(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setVerticalAlign(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setVerticalAlign(int);
+  }
+
+  public static final class LayoutElementBuilders.ArcAdapter implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getRotateContents();
+  }
+
+  public static final class LayoutElementBuilders.ArcAdapter.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcAdapter.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(boolean);
+  }
+
+  public static final class LayoutElementBuilders.ArcAnchorTypeProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.ArcAnchorTypeProp.Builder {
+    ctor public LayoutElementBuilders.ArcAnchorTypeProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp.Builder setValue(int);
+  }
+
+  public static interface LayoutElementBuilders.ArcLayoutElement {
+  }
+
+  public static interface LayoutElementBuilders.ArcLayoutElement.Builder {
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement build();
+  }
+
+  public static final class LayoutElementBuilders.ArcLine implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp? getLength();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getThickness();
+  }
+
+  public static final class LayoutElementBuilders.ArcLine.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcLine.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setLength(androidx.wear.tiles.DimensionBuilders.DegreesProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setThickness(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class LayoutElementBuilders.ArcSpacer implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp? getLength();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getThickness();
+  }
+
+  public static final class LayoutElementBuilders.ArcSpacer.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcSpacer.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setLength(androidx.wear.tiles.DimensionBuilders.DegreesProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setThickness(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class LayoutElementBuilders.ArcText implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getText();
+  }
+
+  public static final class LayoutElementBuilders.ArcText.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcText.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setText(String);
+  }
+
+  public static final class LayoutElementBuilders.Box implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Box.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Box.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHorizontalAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setVerticalAlignment(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setVerticalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+  }
+
+  public static final class LayoutElementBuilders.ColorFilter {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getTint();
+  }
+
+  public static final class LayoutElementBuilders.ColorFilter.Builder {
+    ctor public LayoutElementBuilders.ColorFilter.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ColorFilter build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ColorFilter.Builder setTint(androidx.wear.tiles.ColorBuilders.ColorProp);
+  }
+
+  public static final class LayoutElementBuilders.Column implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Column.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Column.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHorizontalAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+  }
+
+  public static final class LayoutElementBuilders.ContentScaleModeProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.ContentScaleModeProp.Builder {
+    ctor public LayoutElementBuilders.ContentScaleModeProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.FontStyle {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getItalic();
+    method public androidx.wear.tiles.DimensionBuilders.EmProp? getLetterSpacing();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp? getSize();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getUnderline();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp? getWeight();
+  }
+
+  public static final class LayoutElementBuilders.FontStyle.Builder {
+    ctor public LayoutElementBuilders.FontStyle.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle build();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setItalic(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setItalic(boolean);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setLetterSpacing(androidx.wear.tiles.DimensionBuilders.EmProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setSize(androidx.wear.tiles.DimensionBuilders.SpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setUnderline(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setUnderline(boolean);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setWeight(androidx.wear.tiles.LayoutElementBuilders.FontWeightProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setWeight(int);
+  }
+
+  public static class LayoutElementBuilders.FontStyles {
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+  }
+
+  public static final class LayoutElementBuilders.FontWeightProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.FontWeightProp.Builder {
+    ctor public LayoutElementBuilders.FontWeightProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.HorizontalAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.HorizontalAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.HorizontalAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.Image implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.ColorFilter? getColorFilter();
+    method public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp? getContentScaleMode();
+    method public androidx.wear.tiles.DimensionBuilders.ImageDimension? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getResourceId();
+    method public androidx.wear.tiles.DimensionBuilders.ImageDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Image.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Image.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Image build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setColorFilter(androidx.wear.tiles.LayoutElementBuilders.ColorFilter);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setContentScaleMode(androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setContentScaleMode(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ImageDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setResourceId(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setResourceId(String);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ImageDimension);
+  }
+
+  public static final class LayoutElementBuilders.Layout {
+    method public static androidx.wear.tiles.LayoutElementBuilders.Layout fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getRoot();
+  }
+
+  public static final class LayoutElementBuilders.Layout.Builder {
+    ctor public LayoutElementBuilders.Layout.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Layout build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Layout.Builder setRoot(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+  }
+
+  public static interface LayoutElementBuilders.LayoutElement {
+  }
+
+  public static interface LayoutElementBuilders.LayoutElement.Builder {
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement build();
+  }
+
+  public static final class LayoutElementBuilders.Row implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Row.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Row.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setVerticalAlignment(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setVerticalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+  }
+
+  public static final class LayoutElementBuilders.Spacer implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.SpacerDimension? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.SpacerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Spacer.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Spacer.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setHeight(androidx.wear.tiles.DimensionBuilders.SpacerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setWidth(androidx.wear.tiles.DimensionBuilders.SpacerDimension);
+  }
+
+  public static interface LayoutElementBuilders.Span {
+  }
+
+  public static interface LayoutElementBuilders.Span.Builder {
+    method public androidx.wear.tiles.LayoutElementBuilders.Span build();
+  }
+
+  public static final class LayoutElementBuilders.SpanImage implements androidx.wear.tiles.LayoutElementBuilders.Span {
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp? getAlignment();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getResourceId();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.SpanImage.Builder implements androidx.wear.tiles.LayoutElementBuilders.Span.Builder {
+    ctor public LayoutElementBuilders.SpanImage.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage build();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setAlignment(androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setHeight(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.SpanModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setResourceId(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setResourceId(String);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class LayoutElementBuilders.SpanText implements androidx.wear.tiles.LayoutElementBuilders.Span {
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getText();
+  }
+
+  public static final class LayoutElementBuilders.SpanText.Builder implements androidx.wear.tiles.LayoutElementBuilders.Span.Builder {
+    ctor public LayoutElementBuilders.SpanText.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText build();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.SpanModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setText(String);
+  }
+
+  public static final class LayoutElementBuilders.SpanVerticalAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.SpanVerticalAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.SpanVerticalAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.Spannable implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.SpProp? getLineHeight();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop? getMaxLines();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getMultilineAlignment();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp? getOverflow();
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.Span!> getSpans();
+  }
+
+  public static final class LayoutElementBuilders.Spannable.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Spannable.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder addSpan(androidx.wear.tiles.LayoutElementBuilders.Span);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setLineHeight(androidx.wear.tiles.DimensionBuilders.SpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMaxLines(androidx.wear.tiles.TypeBuilders.Int32Prop);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMaxLines(@IntRange(from=1) int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setOverflow(androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setOverflow(int);
+  }
+
+  public static final class LayoutElementBuilders.Text implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp? getLineHeight();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop? getMaxLines();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp? getMultilineAlignment();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp? getOverflow();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getText();
+  }
+
+  public static final class LayoutElementBuilders.Text.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Text.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Text build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setLineHeight(androidx.wear.tiles.DimensionBuilders.SpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMaxLines(androidx.wear.tiles.TypeBuilders.Int32Prop);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMaxLines(@IntRange(from=1) int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMultilineAlignment(androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMultilineAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setOverflow(androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setOverflow(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setText(String);
+  }
+
+  public static final class LayoutElementBuilders.TextAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.TextAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.TextAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.TextOverflowProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.TextOverflowProp.Builder {
+    ctor public LayoutElementBuilders.TextOverflowProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.VerticalAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.VerticalAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.VerticalAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp.Builder setValue(int);
+  }
+
+  public final class ModifiersBuilders {
+  }
+
+  public static final class ModifiersBuilders.ArcModifiers {
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics? getSemantics();
+  }
+
+  public static final class ModifiersBuilders.ArcModifiers.Builder {
+    ctor public ModifiersBuilders.ArcModifiers.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers build();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers.Builder setSemantics(androidx.wear.tiles.ModifiersBuilders.Semantics);
+  }
+
+  public static final class ModifiersBuilders.Background {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.ModifiersBuilders.Corner? getCorner();
+  }
+
+  public static final class ModifiersBuilders.Background.Builder {
+    ctor public ModifiersBuilders.Background.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Background build();
+    method public androidx.wear.tiles.ModifiersBuilders.Background.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Background.Builder setCorner(androidx.wear.tiles.ModifiersBuilders.Corner);
+  }
+
+  public static final class ModifiersBuilders.Border {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getWidth();
+  }
+
+  public static final class ModifiersBuilders.Border.Builder {
+    ctor public ModifiersBuilders.Border.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Border build();
+    method public androidx.wear.tiles.ModifiersBuilders.Border.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Border.Builder setWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class ModifiersBuilders.Clickable {
+    method public String getId();
+    method public androidx.wear.tiles.ActionBuilders.Action? getOnClick();
+  }
+
+  public static final class ModifiersBuilders.Clickable.Builder {
+    ctor public ModifiersBuilders.Clickable.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable build();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable.Builder setId(String);
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable.Builder setOnClick(androidx.wear.tiles.ActionBuilders.Action);
+  }
+
+  public static final class ModifiersBuilders.Corner {
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getRadius();
+  }
+
+  public static final class ModifiersBuilders.Corner.Builder {
+    ctor public ModifiersBuilders.Corner.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Corner build();
+    method public androidx.wear.tiles.ModifiersBuilders.Corner.Builder setRadius(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class ModifiersBuilders.ElementMetadata {
+    method public byte[] getTagData();
+  }
+
+  public static final class ModifiersBuilders.ElementMetadata.Builder {
+    ctor public ModifiersBuilders.ElementMetadata.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.ElementMetadata build();
+    method public androidx.wear.tiles.ModifiersBuilders.ElementMetadata.Builder setTagData(byte[]);
+  }
+
+  public static final class ModifiersBuilders.Modifiers {
+    method public androidx.wear.tiles.ModifiersBuilders.Background? getBackground();
+    method public androidx.wear.tiles.ModifiersBuilders.Border? getBorder();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
+    method public androidx.wear.tiles.ModifiersBuilders.ElementMetadata? getMetadata();
+    method public androidx.wear.tiles.ModifiersBuilders.Padding? getPadding();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics? getSemantics();
+  }
+
+  public static final class ModifiersBuilders.Modifiers.Builder {
+    ctor public ModifiersBuilders.Modifiers.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers build();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setBackground(androidx.wear.tiles.ModifiersBuilders.Background);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setBorder(androidx.wear.tiles.ModifiersBuilders.Border);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setMetadata(androidx.wear.tiles.ModifiersBuilders.ElementMetadata);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setPadding(androidx.wear.tiles.ModifiersBuilders.Padding);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setSemantics(androidx.wear.tiles.ModifiersBuilders.Semantics);
+  }
+
+  public static final class ModifiersBuilders.Padding {
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getBottom();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getEnd();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getRtlAware();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getStart();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getTop();
+  }
+
+  public static final class ModifiersBuilders.Padding.Builder {
+    ctor public ModifiersBuilders.Padding.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Padding build();
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setAll(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setBottom(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setEnd(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setRtlAware(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setRtlAware(boolean);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setStart(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setTop(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class ModifiersBuilders.Semantics {
+    method public String getContentDescription();
+  }
+
+  public static final class ModifiersBuilders.Semantics.Builder {
+    ctor public ModifiersBuilders.Semantics.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics build();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics.Builder setContentDescription(String);
+  }
+
+  public static final class ModifiersBuilders.SpanModifiers {
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
+  }
+
+  public static final class ModifiersBuilders.SpanModifiers.Builder {
+    ctor public ModifiersBuilders.SpanModifiers.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers build();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
+  }
+
+  public final class RequestBuilders {
+  }
+
+  public static final class RequestBuilders.ResourcesRequest {
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters? getDeviceParameters();
+    method public java.util.List<java.lang.String!> getResourceIds();
+    method public String getVersion();
+  }
+
+  public static final class RequestBuilders.ResourcesRequest.Builder {
+    ctor public RequestBuilders.ResourcesRequest.Builder();
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder addResourceId(String);
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest build();
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setDeviceParameters(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setVersion(String);
+  }
+
+  public static final class RequestBuilders.TileRequest {
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters? getDeviceParameters();
+    method public androidx.wear.tiles.StateBuilders.State? getState();
+  }
+
+  public static final class RequestBuilders.TileRequest.Builder {
+    ctor public RequestBuilders.TileRequest.Builder();
+    method public androidx.wear.tiles.RequestBuilders.TileRequest build();
+    method public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setDeviceParameters(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setState(androidx.wear.tiles.StateBuilders.State);
+  }
+
+  public final class ResourceBuilders {
+    field public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
+    field public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
+  }
+
+  public static final class ResourceBuilders.AndroidImageResourceByResId {
+    method @DrawableRes public int getResourceId();
+  }
+
+  public static final class ResourceBuilders.AndroidImageResourceByResId.Builder {
+    ctor public ResourceBuilders.AndroidImageResourceByResId.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId build();
+    method public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId.Builder setResourceId(@DrawableRes int);
+  }
+
+  public static final class ResourceBuilders.ImageResource {
+    method public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId? getAndroidResourceByResId();
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource? getInlineResource();
+  }
+
+  public static final class ResourceBuilders.ImageResource.Builder {
+    ctor public ResourceBuilders.ImageResource.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.ImageResource build();
+    method public androidx.wear.tiles.ResourceBuilders.ImageResource.Builder setAndroidResourceByResId(androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId);
+    method public androidx.wear.tiles.ResourceBuilders.ImageResource.Builder setInlineResource(androidx.wear.tiles.ResourceBuilders.InlineImageResource);
+  }
+
+  public static final class ResourceBuilders.InlineImageResource {
+    method public byte[] getData();
+    method public int getFormat();
+    method @Dimension(unit=androidx.annotation.Dimension.PX) public int getHeightPx();
+    method @Dimension(unit=androidx.annotation.Dimension.PX) public int getWidthPx();
+  }
+
+  public static final class ResourceBuilders.InlineImageResource.Builder {
+    ctor public ResourceBuilders.InlineImageResource.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource build();
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setData(byte[]);
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setFormat(int);
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setWidthPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
+  }
+
+  public static final class ResourceBuilders.Resources {
+    method public java.util.Map<java.lang.String!,androidx.wear.tiles.ResourceBuilders.ImageResource!> getIdToImageMapping();
+    method public String getVersion();
+  }
+
+  public static final class ResourceBuilders.Resources.Builder {
+    ctor public ResourceBuilders.Resources.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.Resources.Builder addIdToImageMapping(String, androidx.wear.tiles.ResourceBuilders.ImageResource);
+    method public androidx.wear.tiles.ResourceBuilders.Resources build();
+    method public androidx.wear.tiles.ResourceBuilders.Resources.Builder setVersion(String);
+  }
+
+  public final class StateBuilders {
+  }
+
+  public static final class StateBuilders.State {
+    method public String getLastClickableId();
+  }
+
+  public static final class StateBuilders.State.Builder {
+    ctor public StateBuilders.State.Builder();
+    method public androidx.wear.tiles.StateBuilders.State build();
+  }
+
+  public final class TileBuilders {
+  }
+
+  public static final class TileBuilders.Tile {
+    method public long getFreshnessIntervalMillis();
+    method public String getResourcesVersion();
+    method public androidx.wear.tiles.TimelineBuilders.Timeline? getTimeline();
+  }
+
+  public static final class TileBuilders.Tile.Builder {
+    ctor public TileBuilders.Tile.Builder();
+    method public androidx.wear.tiles.TileBuilders.Tile build();
+    method public androidx.wear.tiles.TileBuilders.Tile.Builder setFreshnessIntervalMillis(long);
+    method public androidx.wear.tiles.TileBuilders.Tile.Builder setResourcesVersion(String);
+    method public androidx.wear.tiles.TileBuilders.Tile.Builder setTimeline(androidx.wear.tiles.TimelineBuilders.Timeline);
+  }
+
+  public abstract class TileService extends android.app.Service {
+    ctor public TileService();
+    method public static androidx.wear.tiles.TileUpdateRequester getUpdater(android.content.Context);
+    method public android.os.IBinder? onBind(android.content.Intent);
+    method @MainThread protected abstract com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources!> onResourcesRequest(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
+    method @MainThread protected void onTileAddEvent(androidx.wear.tiles.EventBuilders.TileAddEvent);
+    method @MainThread protected void onTileEnterEvent(androidx.wear.tiles.EventBuilders.TileEnterEvent);
+    method @MainThread protected void onTileLeaveEvent(androidx.wear.tiles.EventBuilders.TileLeaveEvent);
+    method @MainThread protected void onTileRemoveEvent(androidx.wear.tiles.EventBuilders.TileRemoveEvent);
+    method @MainThread protected abstract com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile!> onTileRequest(androidx.wear.tiles.RequestBuilders.TileRequest);
+    field public static final String ACTION_BIND_TILE_PROVIDER = "androidx.wear.tiles.action.BIND_TILE_PROVIDER";
+    field public static final String EXTRA_CLICKABLE_ID = "androidx.wear.tiles.extra.CLICKABLE_ID";
+    field public static final String METADATA_PREVIEW_KEY = "androidx.wear.tiles.PREVIEW";
+  }
+
+  public interface TileUpdateRequester {
+    method public void requestUpdate(Class<? extends androidx.wear.tiles.TileService>);
+  }
+
+  public final class TimelineBuilders {
+  }
+
+  public static final class TimelineBuilders.TimeInterval {
+    method public long getEndMillis();
+    method public long getStartMillis();
+  }
+
+  public static final class TimelineBuilders.TimeInterval.Builder {
+    ctor public TimelineBuilders.TimeInterval.Builder();
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval build();
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval.Builder setEndMillis(long);
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval.Builder setStartMillis(long);
+  }
+
+  public static final class TimelineBuilders.Timeline {
+    method public static androidx.wear.tiles.TimelineBuilders.Timeline fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public java.util.List<androidx.wear.tiles.TimelineBuilders.TimelineEntry!> getTimelineEntries();
+  }
+
+  public static final class TimelineBuilders.Timeline.Builder {
+    ctor public TimelineBuilders.Timeline.Builder();
+    method public androidx.wear.tiles.TimelineBuilders.Timeline.Builder addTimelineEntry(androidx.wear.tiles.TimelineBuilders.TimelineEntry);
+    method public androidx.wear.tiles.TimelineBuilders.Timeline build();
+  }
+
+  public static final class TimelineBuilders.TimelineEntry {
+    method public static androidx.wear.tiles.TimelineBuilders.TimelineEntry fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Layout? getLayout();
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval? getValidity();
+  }
+
+  public static final class TimelineBuilders.TimelineEntry.Builder {
+    ctor public TimelineBuilders.TimelineEntry.Builder();
+    method public androidx.wear.tiles.TimelineBuilders.TimelineEntry build();
+    method public androidx.wear.tiles.TimelineBuilders.TimelineEntry.Builder setLayout(androidx.wear.tiles.LayoutElementBuilders.Layout);
+    method public androidx.wear.tiles.TimelineBuilders.TimelineEntry.Builder setValidity(androidx.wear.tiles.TimelineBuilders.TimeInterval);
+  }
+
+  public final class TypeBuilders {
+  }
+
+  public static final class TypeBuilders.BoolProp {
+    method public boolean getValue();
+  }
+
+  public static final class TypeBuilders.BoolProp.Builder {
+    ctor public TypeBuilders.BoolProp.Builder();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp build();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp.Builder setValue(boolean);
+  }
+
+  public static final class TypeBuilders.FloatProp {
+    method public float getValue();
+  }
+
+  public static final class TypeBuilders.FloatProp.Builder {
+    ctor public TypeBuilders.FloatProp.Builder();
+    method public androidx.wear.tiles.TypeBuilders.FloatProp build();
+    method public androidx.wear.tiles.TypeBuilders.FloatProp.Builder setValue(float);
+  }
+
+  public static final class TypeBuilders.Int32Prop {
+    method public int getValue();
+  }
+
+  public static final class TypeBuilders.Int32Prop.Builder {
+    ctor public TypeBuilders.Int32Prop.Builder();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop build();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop.Builder setValue(int);
+  }
+
+  public static final class TypeBuilders.StringProp {
+    method public String getValue();
+  }
+
+  public static final class TypeBuilders.StringProp.Builder {
+    ctor public TypeBuilders.StringProp.Builder();
+    method public androidx.wear.tiles.TypeBuilders.StringProp build();
+    method public androidx.wear.tiles.TypeBuilders.StringProp.Builder setValue(String);
+  }
+
+}
+
diff --git a/wear/tiles/tiles/api/public_plus_experimental_1.1.0-beta02.txt b/wear/tiles/tiles/api/public_plus_experimental_1.1.0-beta02.txt
new file mode 100644
index 0000000..13ed3e4
--- /dev/null
+++ b/wear/tiles/tiles/api/public_plus_experimental_1.1.0-beta02.txt
@@ -0,0 +1,1105 @@
+// Signature format: 4.0
+package androidx.wear.tiles {
+
+  public final class ActionBuilders {
+    method public static androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra booleanExtra(boolean);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra doubleExtra(double);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidIntExtra intExtra(int);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidLongExtra longExtra(long);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidStringExtra stringExtra(String);
+  }
+
+  public static interface ActionBuilders.Action {
+  }
+
+  public static interface ActionBuilders.Action.Builder {
+    method public androidx.wear.tiles.ActionBuilders.Action build();
+  }
+
+  public static final class ActionBuilders.AndroidActivity {
+    method public String getClassName();
+    method public java.util.Map<java.lang.String!,androidx.wear.tiles.ActionBuilders.AndroidExtra!> getKeyToExtraMapping();
+    method public String getPackageName();
+  }
+
+  public static final class ActionBuilders.AndroidActivity.Builder {
+    ctor public ActionBuilders.AndroidActivity.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder addKeyToExtraMapping(String, androidx.wear.tiles.ActionBuilders.AndroidExtra);
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder setClassName(String);
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder setPackageName(String);
+  }
+
+  public static final class ActionBuilders.AndroidBooleanExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public boolean getValue();
+  }
+
+  public static final class ActionBuilders.AndroidBooleanExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidBooleanExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra.Builder setValue(boolean);
+  }
+
+  public static final class ActionBuilders.AndroidDoubleExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public double getValue();
+  }
+
+  public static final class ActionBuilders.AndroidDoubleExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidDoubleExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra.Builder setValue(double);
+  }
+
+  public static interface ActionBuilders.AndroidExtra {
+  }
+
+  public static interface ActionBuilders.AndroidExtra.Builder {
+    method public androidx.wear.tiles.ActionBuilders.AndroidExtra build();
+  }
+
+  public static final class ActionBuilders.AndroidIntExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public int getValue();
+  }
+
+  public static final class ActionBuilders.AndroidIntExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidIntExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidIntExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidIntExtra.Builder setValue(int);
+  }
+
+  public static final class ActionBuilders.AndroidLongExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public long getValue();
+  }
+
+  public static final class ActionBuilders.AndroidLongExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidLongExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidLongExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidLongExtra.Builder setValue(long);
+  }
+
+  public static final class ActionBuilders.AndroidStringExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public String getValue();
+  }
+
+  public static final class ActionBuilders.AndroidStringExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidStringExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidStringExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidStringExtra.Builder setValue(String);
+  }
+
+  public static final class ActionBuilders.LaunchAction implements androidx.wear.tiles.ActionBuilders.Action {
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity? getAndroidActivity();
+  }
+
+  public static final class ActionBuilders.LaunchAction.Builder implements androidx.wear.tiles.ActionBuilders.Action.Builder {
+    ctor public ActionBuilders.LaunchAction.Builder();
+    method public androidx.wear.tiles.ActionBuilders.LaunchAction build();
+    method public androidx.wear.tiles.ActionBuilders.LaunchAction.Builder setAndroidActivity(androidx.wear.tiles.ActionBuilders.AndroidActivity);
+  }
+
+  public static final class ActionBuilders.LoadAction implements androidx.wear.tiles.ActionBuilders.Action {
+    method public androidx.wear.tiles.StateBuilders.State? getRequestState();
+  }
+
+  public static final class ActionBuilders.LoadAction.Builder implements androidx.wear.tiles.ActionBuilders.Action.Builder {
+    ctor public ActionBuilders.LoadAction.Builder();
+    method public androidx.wear.tiles.ActionBuilders.LoadAction build();
+    method public androidx.wear.tiles.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.tiles.StateBuilders.State);
+  }
+
+  public final class ColorBuilders {
+    method public static androidx.wear.tiles.ColorBuilders.ColorProp argb(@ColorInt int);
+  }
+
+  public static final class ColorBuilders.ColorProp {
+    method @ColorInt public int getArgb();
+  }
+
+  public static final class ColorBuilders.ColorProp.Builder {
+    ctor public ColorBuilders.ColorProp.Builder();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp build();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp.Builder setArgb(@ColorInt int);
+  }
+
+  public final class DeviceParametersBuilders {
+    field public static final int DEVICE_PLATFORM_UNDEFINED = 0; // 0x0
+    field public static final int DEVICE_PLATFORM_WEAR_OS = 1; // 0x1
+    field public static final int SCREEN_SHAPE_RECT = 2; // 0x2
+    field public static final int SCREEN_SHAPE_ROUND = 1; // 0x1
+    field public static final int SCREEN_SHAPE_UNDEFINED = 0; // 0x0
+  }
+
+  public static final class DeviceParametersBuilders.DeviceParameters {
+    method public int getDevicePlatform();
+    method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getScreenDensity();
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenHeightDp();
+    method public int getScreenShape();
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenWidthDp();
+  }
+
+  public static final class DeviceParametersBuilders.DeviceParameters.Builder {
+    ctor public DeviceParametersBuilders.DeviceParameters.Builder();
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters build();
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setDevicePlatform(int);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenDensity(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenHeightDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenShape(int);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenWidthDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+  }
+
+  public final class DimensionBuilders {
+    method public static androidx.wear.tiles.DimensionBuilders.DegreesProp degrees(float);
+    method public static androidx.wear.tiles.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+    method public static androidx.wear.tiles.DimensionBuilders.EmProp em(int);
+    method public static androidx.wear.tiles.DimensionBuilders.EmProp em(float);
+    method public static androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp expand();
+    method public static androidx.wear.tiles.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
+    method public static androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp wrap();
+  }
+
+  public static interface DimensionBuilders.ContainerDimension {
+  }
+
+  public static interface DimensionBuilders.ContainerDimension.Builder {
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension build();
+  }
+
+  public static final class DimensionBuilders.DegreesProp {
+    method public float getValue();
+  }
+
+  public static final class DimensionBuilders.DegreesProp.Builder {
+    ctor public DimensionBuilders.DegreesProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp build();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp.Builder setValue(float);
+  }
+
+  public static final class DimensionBuilders.DpProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension androidx.wear.tiles.DimensionBuilders.ImageDimension androidx.wear.tiles.DimensionBuilders.SpacerDimension {
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
+  }
+
+  public static final class DimensionBuilders.DpProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder androidx.wear.tiles.DimensionBuilders.SpacerDimension.Builder {
+    ctor public DimensionBuilders.DpProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp build();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public static final class DimensionBuilders.EmProp {
+    method public float getValue();
+  }
+
+  public static final class DimensionBuilders.EmProp.Builder {
+    ctor public DimensionBuilders.EmProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.EmProp build();
+    method public androidx.wear.tiles.DimensionBuilders.EmProp.Builder setValue(float);
+  }
+
+  public static final class DimensionBuilders.ExpandedDimensionProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension androidx.wear.tiles.DimensionBuilders.ImageDimension {
+  }
+
+  public static final class DimensionBuilders.ExpandedDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder {
+    ctor public DimensionBuilders.ExpandedDimensionProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp build();
+  }
+
+  public static interface DimensionBuilders.ImageDimension {
+  }
+
+  public static interface DimensionBuilders.ImageDimension.Builder {
+    method public androidx.wear.tiles.DimensionBuilders.ImageDimension build();
+  }
+
+  public static final class DimensionBuilders.ProportionalDimensionProp implements androidx.wear.tiles.DimensionBuilders.ImageDimension {
+    method @IntRange(from=0) public int getAspectRatioHeight();
+    method @IntRange(from=0) public int getAspectRatioWidth();
+  }
+
+  public static final class DimensionBuilders.ProportionalDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder {
+    ctor public DimensionBuilders.ProportionalDimensionProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp build();
+    method public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioHeight(@IntRange(from=0) int);
+    method public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioWidth(@IntRange(from=0) int);
+  }
+
+  public static final class DimensionBuilders.SpProp {
+    method @Dimension(unit=androidx.annotation.Dimension.SP) public float getValue();
+  }
+
+  public static final class DimensionBuilders.SpProp.Builder {
+    ctor public DimensionBuilders.SpProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp build();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.SP) float);
+  }
+
+  public static interface DimensionBuilders.SpacerDimension {
+  }
+
+  public static interface DimensionBuilders.SpacerDimension.Builder {
+    method public androidx.wear.tiles.DimensionBuilders.SpacerDimension build();
+  }
+
+  public static final class DimensionBuilders.WrappedDimensionProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension {
+  }
+
+  public static final class DimensionBuilders.WrappedDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder {
+    ctor public DimensionBuilders.WrappedDimensionProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp build();
+  }
+
+  public final class EventBuilders {
+  }
+
+  public static final class EventBuilders.TileAddEvent {
+  }
+
+  public static final class EventBuilders.TileAddEvent.Builder {
+    ctor public EventBuilders.TileAddEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileAddEvent build();
+  }
+
+  public static final class EventBuilders.TileEnterEvent {
+  }
+
+  public static final class EventBuilders.TileEnterEvent.Builder {
+    ctor public EventBuilders.TileEnterEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileEnterEvent build();
+  }
+
+  public static final class EventBuilders.TileLeaveEvent {
+  }
+
+  public static final class EventBuilders.TileLeaveEvent.Builder {
+    ctor public EventBuilders.TileLeaveEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileLeaveEvent build();
+  }
+
+  public static final class EventBuilders.TileRemoveEvent {
+  }
+
+  public static final class EventBuilders.TileRemoveEvent.Builder {
+    ctor public EventBuilders.TileRemoveEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileRemoveEvent build();
+  }
+
+  public final class LayoutElementBuilders {
+    field public static final int ARC_ANCHOR_CENTER = 2; // 0x2
+    field public static final int ARC_ANCHOR_END = 3; // 0x3
+    field public static final int ARC_ANCHOR_START = 1; // 0x1
+    field public static final int ARC_ANCHOR_UNDEFINED = 0; // 0x0
+    field public static final int CONTENT_SCALE_MODE_CROP = 2; // 0x2
+    field public static final int CONTENT_SCALE_MODE_FILL_BOUNDS = 3; // 0x3
+    field public static final int CONTENT_SCALE_MODE_FIT = 1; // 0x1
+    field public static final int CONTENT_SCALE_MODE_UNDEFINED = 0; // 0x0
+    field public static final int FONT_VARIANT_BODY = 2; // 0x2
+    field public static final int FONT_VARIANT_TITLE = 1; // 0x1
+    field public static final int FONT_VARIANT_UNDEFINED = 0; // 0x0
+    field public static final int FONT_WEIGHT_BOLD = 700; // 0x2bc
+    field @androidx.wear.tiles.TilesExperimental public static final int FONT_WEIGHT_MEDIUM = 500; // 0x1f4
+    field public static final int FONT_WEIGHT_NORMAL = 400; // 0x190
+    field public static final int FONT_WEIGHT_UNDEFINED = 0; // 0x0
+    field public static final int HORIZONTAL_ALIGN_CENTER = 2; // 0x2
+    field public static final int HORIZONTAL_ALIGN_END = 5; // 0x5
+    field public static final int HORIZONTAL_ALIGN_LEFT = 1; // 0x1
+    field public static final int HORIZONTAL_ALIGN_RIGHT = 3; // 0x3
+    field public static final int HORIZONTAL_ALIGN_START = 4; // 0x4
+    field public static final int HORIZONTAL_ALIGN_UNDEFINED = 0; // 0x0
+    field public static final int SPAN_VERTICAL_ALIGN_BOTTOM = 1; // 0x1
+    field public static final int SPAN_VERTICAL_ALIGN_TEXT_BASELINE = 2; // 0x2
+    field public static final int SPAN_VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
+    field public static final int TEXT_ALIGN_CENTER = 2; // 0x2
+    field public static final int TEXT_ALIGN_END = 3; // 0x3
+    field public static final int TEXT_ALIGN_START = 1; // 0x1
+    field public static final int TEXT_ALIGN_UNDEFINED = 0; // 0x0
+    field public static final int TEXT_OVERFLOW_ELLIPSIZE_END = 2; // 0x2
+    field public static final int TEXT_OVERFLOW_TRUNCATE = 1; // 0x1
+    field public static final int TEXT_OVERFLOW_UNDEFINED = 0; // 0x0
+    field public static final int VERTICAL_ALIGN_BOTTOM = 3; // 0x3
+    field public static final int VERTICAL_ALIGN_CENTER = 2; // 0x2
+    field public static final int VERTICAL_ALIGN_TOP = 1; // 0x1
+    field public static final int VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
+  }
+
+  public static final class LayoutElementBuilders.Arc implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp? getAnchorAngle();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp? getAnchorType();
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement!> getContents();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlign();
+  }
+
+  public static final class LayoutElementBuilders.Arc.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Arc.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorAngle(androidx.wear.tiles.DimensionBuilders.DegreesProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorType(androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorType(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setVerticalAlign(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setVerticalAlign(int);
+  }
+
+  public static final class LayoutElementBuilders.ArcAdapter implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getRotateContents();
+  }
+
+  public static final class LayoutElementBuilders.ArcAdapter.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcAdapter.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(boolean);
+  }
+
+  public static final class LayoutElementBuilders.ArcAnchorTypeProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.ArcAnchorTypeProp.Builder {
+    ctor public LayoutElementBuilders.ArcAnchorTypeProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp.Builder setValue(int);
+  }
+
+  public static interface LayoutElementBuilders.ArcLayoutElement {
+  }
+
+  public static interface LayoutElementBuilders.ArcLayoutElement.Builder {
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement build();
+  }
+
+  public static final class LayoutElementBuilders.ArcLine implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp? getLength();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getThickness();
+  }
+
+  public static final class LayoutElementBuilders.ArcLine.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcLine.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setLength(androidx.wear.tiles.DimensionBuilders.DegreesProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setThickness(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class LayoutElementBuilders.ArcSpacer implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp? getLength();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getThickness();
+  }
+
+  public static final class LayoutElementBuilders.ArcSpacer.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcSpacer.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setLength(androidx.wear.tiles.DimensionBuilders.DegreesProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setThickness(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class LayoutElementBuilders.ArcText implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getText();
+  }
+
+  public static final class LayoutElementBuilders.ArcText.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcText.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setText(String);
+  }
+
+  public static final class LayoutElementBuilders.Box implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Box.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Box.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHorizontalAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setVerticalAlignment(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setVerticalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+  }
+
+  public static final class LayoutElementBuilders.ColorFilter {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getTint();
+  }
+
+  public static final class LayoutElementBuilders.ColorFilter.Builder {
+    ctor public LayoutElementBuilders.ColorFilter.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ColorFilter build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ColorFilter.Builder setTint(androidx.wear.tiles.ColorBuilders.ColorProp);
+  }
+
+  public static final class LayoutElementBuilders.Column implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Column.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Column.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHorizontalAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+  }
+
+  public static final class LayoutElementBuilders.ContentScaleModeProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.ContentScaleModeProp.Builder {
+    ctor public LayoutElementBuilders.ContentScaleModeProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.FontStyle {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getItalic();
+    method public androidx.wear.tiles.DimensionBuilders.EmProp? getLetterSpacing();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp? getSize();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getUnderline();
+    method @androidx.wear.tiles.TilesExperimental public androidx.wear.tiles.LayoutElementBuilders.FontVariantProp? getVariant();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp? getWeight();
+  }
+
+  public static final class LayoutElementBuilders.FontStyle.Builder {
+    ctor public LayoutElementBuilders.FontStyle.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle build();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setItalic(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setItalic(boolean);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setLetterSpacing(androidx.wear.tiles.DimensionBuilders.EmProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setSize(androidx.wear.tiles.DimensionBuilders.SpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setUnderline(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setUnderline(boolean);
+    method @androidx.wear.tiles.TilesExperimental public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setVariant(androidx.wear.tiles.LayoutElementBuilders.FontVariantProp);
+    method @androidx.wear.tiles.TilesExperimental public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setVariant(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setWeight(androidx.wear.tiles.LayoutElementBuilders.FontWeightProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setWeight(int);
+  }
+
+  public static class LayoutElementBuilders.FontStyles {
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+  }
+
+  @androidx.wear.tiles.TilesExperimental public static final class LayoutElementBuilders.FontVariantProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.FontVariantProp.Builder {
+    ctor public LayoutElementBuilders.FontVariantProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontVariantProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontVariantProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.FontWeightProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.FontWeightProp.Builder {
+    ctor public LayoutElementBuilders.FontWeightProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.HorizontalAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.HorizontalAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.HorizontalAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.Image implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.ColorFilter? getColorFilter();
+    method public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp? getContentScaleMode();
+    method public androidx.wear.tiles.DimensionBuilders.ImageDimension? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getResourceId();
+    method public androidx.wear.tiles.DimensionBuilders.ImageDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Image.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Image.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Image build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setColorFilter(androidx.wear.tiles.LayoutElementBuilders.ColorFilter);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setContentScaleMode(androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setContentScaleMode(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ImageDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setResourceId(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setResourceId(String);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ImageDimension);
+  }
+
+  public static final class LayoutElementBuilders.Layout {
+    method @androidx.wear.tiles.TilesExperimental public static androidx.wear.tiles.LayoutElementBuilders.Layout? fromByteArray(byte[]);
+    method public static androidx.wear.tiles.LayoutElementBuilders.Layout fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getRoot();
+    method @androidx.wear.tiles.TilesExperimental public byte[] toByteArray();
+  }
+
+  public static final class LayoutElementBuilders.Layout.Builder {
+    ctor public LayoutElementBuilders.Layout.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Layout build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Layout.Builder setRoot(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+  }
+
+  public static interface LayoutElementBuilders.LayoutElement {
+  }
+
+  public static interface LayoutElementBuilders.LayoutElement.Builder {
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement build();
+  }
+
+  public static final class LayoutElementBuilders.Row implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Row.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Row.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setVerticalAlignment(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setVerticalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+  }
+
+  public static final class LayoutElementBuilders.Spacer implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.SpacerDimension? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.SpacerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Spacer.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Spacer.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setHeight(androidx.wear.tiles.DimensionBuilders.SpacerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setWidth(androidx.wear.tiles.DimensionBuilders.SpacerDimension);
+  }
+
+  public static interface LayoutElementBuilders.Span {
+  }
+
+  public static interface LayoutElementBuilders.Span.Builder {
+    method public androidx.wear.tiles.LayoutElementBuilders.Span build();
+  }
+
+  public static final class LayoutElementBuilders.SpanImage implements androidx.wear.tiles.LayoutElementBuilders.Span {
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp? getAlignment();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getResourceId();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.SpanImage.Builder implements androidx.wear.tiles.LayoutElementBuilders.Span.Builder {
+    ctor public LayoutElementBuilders.SpanImage.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage build();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setAlignment(androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setHeight(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.SpanModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setResourceId(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setResourceId(String);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class LayoutElementBuilders.SpanText implements androidx.wear.tiles.LayoutElementBuilders.Span {
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getText();
+  }
+
+  public static final class LayoutElementBuilders.SpanText.Builder implements androidx.wear.tiles.LayoutElementBuilders.Span.Builder {
+    ctor public LayoutElementBuilders.SpanText.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText build();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.SpanModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setText(String);
+  }
+
+  public static final class LayoutElementBuilders.SpanVerticalAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.SpanVerticalAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.SpanVerticalAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.Spannable implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.SpProp? getLineHeight();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop? getMaxLines();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getMultilineAlignment();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp? getOverflow();
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.Span!> getSpans();
+  }
+
+  public static final class LayoutElementBuilders.Spannable.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Spannable.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder addSpan(androidx.wear.tiles.LayoutElementBuilders.Span);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setLineHeight(androidx.wear.tiles.DimensionBuilders.SpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMaxLines(androidx.wear.tiles.TypeBuilders.Int32Prop);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMaxLines(@IntRange(from=1) int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setOverflow(androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setOverflow(int);
+  }
+
+  public static final class LayoutElementBuilders.Text implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp? getLineHeight();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop? getMaxLines();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp? getMultilineAlignment();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp? getOverflow();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getText();
+  }
+
+  public static final class LayoutElementBuilders.Text.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Text.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Text build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setLineHeight(androidx.wear.tiles.DimensionBuilders.SpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMaxLines(androidx.wear.tiles.TypeBuilders.Int32Prop);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMaxLines(@IntRange(from=1) int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMultilineAlignment(androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMultilineAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setOverflow(androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setOverflow(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setText(String);
+  }
+
+  public static final class LayoutElementBuilders.TextAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.TextAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.TextAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.TextOverflowProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.TextOverflowProp.Builder {
+    ctor public LayoutElementBuilders.TextOverflowProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.VerticalAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.VerticalAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.VerticalAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp.Builder setValue(int);
+  }
+
+  public final class ModifiersBuilders {
+  }
+
+  public static final class ModifiersBuilders.ArcModifiers {
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics? getSemantics();
+  }
+
+  public static final class ModifiersBuilders.ArcModifiers.Builder {
+    ctor public ModifiersBuilders.ArcModifiers.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers build();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers.Builder setSemantics(androidx.wear.tiles.ModifiersBuilders.Semantics);
+  }
+
+  public static final class ModifiersBuilders.Background {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.ModifiersBuilders.Corner? getCorner();
+  }
+
+  public static final class ModifiersBuilders.Background.Builder {
+    ctor public ModifiersBuilders.Background.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Background build();
+    method public androidx.wear.tiles.ModifiersBuilders.Background.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Background.Builder setCorner(androidx.wear.tiles.ModifiersBuilders.Corner);
+  }
+
+  public static final class ModifiersBuilders.Border {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getWidth();
+  }
+
+  public static final class ModifiersBuilders.Border.Builder {
+    ctor public ModifiersBuilders.Border.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Border build();
+    method public androidx.wear.tiles.ModifiersBuilders.Border.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Border.Builder setWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class ModifiersBuilders.Clickable {
+    method public String getId();
+    method public androidx.wear.tiles.ActionBuilders.Action? getOnClick();
+  }
+
+  public static final class ModifiersBuilders.Clickable.Builder {
+    ctor public ModifiersBuilders.Clickable.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable build();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable.Builder setId(String);
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable.Builder setOnClick(androidx.wear.tiles.ActionBuilders.Action);
+  }
+
+  public static final class ModifiersBuilders.Corner {
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getRadius();
+  }
+
+  public static final class ModifiersBuilders.Corner.Builder {
+    ctor public ModifiersBuilders.Corner.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Corner build();
+    method public androidx.wear.tiles.ModifiersBuilders.Corner.Builder setRadius(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class ModifiersBuilders.ElementMetadata {
+    method public byte[] getTagData();
+  }
+
+  public static final class ModifiersBuilders.ElementMetadata.Builder {
+    ctor public ModifiersBuilders.ElementMetadata.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.ElementMetadata build();
+    method public androidx.wear.tiles.ModifiersBuilders.ElementMetadata.Builder setTagData(byte[]);
+  }
+
+  public static final class ModifiersBuilders.Modifiers {
+    method public androidx.wear.tiles.ModifiersBuilders.Background? getBackground();
+    method public androidx.wear.tiles.ModifiersBuilders.Border? getBorder();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
+    method public androidx.wear.tiles.ModifiersBuilders.ElementMetadata? getMetadata();
+    method public androidx.wear.tiles.ModifiersBuilders.Padding? getPadding();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics? getSemantics();
+  }
+
+  public static final class ModifiersBuilders.Modifiers.Builder {
+    ctor public ModifiersBuilders.Modifiers.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers build();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setBackground(androidx.wear.tiles.ModifiersBuilders.Background);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setBorder(androidx.wear.tiles.ModifiersBuilders.Border);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setMetadata(androidx.wear.tiles.ModifiersBuilders.ElementMetadata);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setPadding(androidx.wear.tiles.ModifiersBuilders.Padding);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setSemantics(androidx.wear.tiles.ModifiersBuilders.Semantics);
+  }
+
+  public static final class ModifiersBuilders.Padding {
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getBottom();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getEnd();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getRtlAware();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getStart();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getTop();
+  }
+
+  public static final class ModifiersBuilders.Padding.Builder {
+    ctor public ModifiersBuilders.Padding.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Padding build();
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setAll(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setBottom(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setEnd(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setRtlAware(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setRtlAware(boolean);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setStart(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setTop(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class ModifiersBuilders.Semantics {
+    method public String getContentDescription();
+  }
+
+  public static final class ModifiersBuilders.Semantics.Builder {
+    ctor public ModifiersBuilders.Semantics.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics build();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics.Builder setContentDescription(String);
+  }
+
+  public static final class ModifiersBuilders.SpanModifiers {
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
+  }
+
+  public static final class ModifiersBuilders.SpanModifiers.Builder {
+    ctor public ModifiersBuilders.SpanModifiers.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers build();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
+  }
+
+  public final class RequestBuilders {
+  }
+
+  public static final class RequestBuilders.ResourcesRequest {
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters? getDeviceParameters();
+    method public java.util.List<java.lang.String!> getResourceIds();
+    method public String getVersion();
+  }
+
+  public static final class RequestBuilders.ResourcesRequest.Builder {
+    ctor public RequestBuilders.ResourcesRequest.Builder();
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder addResourceId(String);
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest build();
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setDeviceParameters(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setVersion(String);
+  }
+
+  public static final class RequestBuilders.TileRequest {
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters? getDeviceParameters();
+    method public androidx.wear.tiles.StateBuilders.State? getState();
+  }
+
+  public static final class RequestBuilders.TileRequest.Builder {
+    ctor public RequestBuilders.TileRequest.Builder();
+    method public androidx.wear.tiles.RequestBuilders.TileRequest build();
+    method public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setDeviceParameters(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setState(androidx.wear.tiles.StateBuilders.State);
+  }
+
+  public final class ResourceBuilders {
+    field public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
+    field public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
+  }
+
+  public static final class ResourceBuilders.AndroidImageResourceByResId {
+    method @DrawableRes public int getResourceId();
+  }
+
+  public static final class ResourceBuilders.AndroidImageResourceByResId.Builder {
+    ctor public ResourceBuilders.AndroidImageResourceByResId.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId build();
+    method public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId.Builder setResourceId(@DrawableRes int);
+  }
+
+  public static final class ResourceBuilders.ImageResource {
+    method public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId? getAndroidResourceByResId();
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource? getInlineResource();
+  }
+
+  public static final class ResourceBuilders.ImageResource.Builder {
+    ctor public ResourceBuilders.ImageResource.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.ImageResource build();
+    method public androidx.wear.tiles.ResourceBuilders.ImageResource.Builder setAndroidResourceByResId(androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId);
+    method public androidx.wear.tiles.ResourceBuilders.ImageResource.Builder setInlineResource(androidx.wear.tiles.ResourceBuilders.InlineImageResource);
+  }
+
+  public static final class ResourceBuilders.InlineImageResource {
+    method public byte[] getData();
+    method public int getFormat();
+    method @Dimension(unit=androidx.annotation.Dimension.PX) public int getHeightPx();
+    method @Dimension(unit=androidx.annotation.Dimension.PX) public int getWidthPx();
+  }
+
+  public static final class ResourceBuilders.InlineImageResource.Builder {
+    ctor public ResourceBuilders.InlineImageResource.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource build();
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setData(byte[]);
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setFormat(int);
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setWidthPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
+  }
+
+  public static final class ResourceBuilders.Resources {
+    method @androidx.wear.tiles.TilesExperimental public static androidx.wear.tiles.ResourceBuilders.Resources? fromByteArray(byte[]);
+    method public java.util.Map<java.lang.String!,androidx.wear.tiles.ResourceBuilders.ImageResource!> getIdToImageMapping();
+    method public String getVersion();
+    method @androidx.wear.tiles.TilesExperimental public byte[] toByteArray();
+  }
+
+  public static final class ResourceBuilders.Resources.Builder {
+    ctor public ResourceBuilders.Resources.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.Resources.Builder addIdToImageMapping(String, androidx.wear.tiles.ResourceBuilders.ImageResource);
+    method public androidx.wear.tiles.ResourceBuilders.Resources build();
+    method public androidx.wear.tiles.ResourceBuilders.Resources.Builder setVersion(String);
+  }
+
+  public final class StateBuilders {
+  }
+
+  public static final class StateBuilders.State {
+    method public String getLastClickableId();
+  }
+
+  public static final class StateBuilders.State.Builder {
+    ctor public StateBuilders.State.Builder();
+    method public androidx.wear.tiles.StateBuilders.State build();
+  }
+
+  public final class TileBuilders {
+  }
+
+  public static final class TileBuilders.Tile {
+    method public long getFreshnessIntervalMillis();
+    method public String getResourcesVersion();
+    method public androidx.wear.tiles.TimelineBuilders.Timeline? getTimeline();
+  }
+
+  public static final class TileBuilders.Tile.Builder {
+    ctor public TileBuilders.Tile.Builder();
+    method public androidx.wear.tiles.TileBuilders.Tile build();
+    method public androidx.wear.tiles.TileBuilders.Tile.Builder setFreshnessIntervalMillis(long);
+    method public androidx.wear.tiles.TileBuilders.Tile.Builder setResourcesVersion(String);
+    method public androidx.wear.tiles.TileBuilders.Tile.Builder setTimeline(androidx.wear.tiles.TimelineBuilders.Timeline);
+  }
+
+  public abstract class TileService extends android.app.Service {
+    ctor public TileService();
+    method public static androidx.wear.tiles.TileUpdateRequester getUpdater(android.content.Context);
+    method public android.os.IBinder? onBind(android.content.Intent);
+    method @MainThread protected abstract com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources!> onResourcesRequest(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
+    method @MainThread protected void onTileAddEvent(androidx.wear.tiles.EventBuilders.TileAddEvent);
+    method @MainThread protected void onTileEnterEvent(androidx.wear.tiles.EventBuilders.TileEnterEvent);
+    method @MainThread protected void onTileLeaveEvent(androidx.wear.tiles.EventBuilders.TileLeaveEvent);
+    method @MainThread protected void onTileRemoveEvent(androidx.wear.tiles.EventBuilders.TileRemoveEvent);
+    method @MainThread protected abstract com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile!> onTileRequest(androidx.wear.tiles.RequestBuilders.TileRequest);
+    field public static final String ACTION_BIND_TILE_PROVIDER = "androidx.wear.tiles.action.BIND_TILE_PROVIDER";
+    field public static final String EXTRA_CLICKABLE_ID = "androidx.wear.tiles.extra.CLICKABLE_ID";
+    field public static final String METADATA_PREVIEW_KEY = "androidx.wear.tiles.PREVIEW";
+  }
+
+  public interface TileUpdateRequester {
+    method public void requestUpdate(Class<? extends androidx.wear.tiles.TileService>);
+  }
+
+  @RequiresOptIn(level=androidx.annotation.RequiresOptIn.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) public @interface TilesExperimental {
+  }
+
+  public final class TimelineBuilders {
+  }
+
+  public static final class TimelineBuilders.TimeInterval {
+    method public long getEndMillis();
+    method public long getStartMillis();
+  }
+
+  public static final class TimelineBuilders.TimeInterval.Builder {
+    ctor public TimelineBuilders.TimeInterval.Builder();
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval build();
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval.Builder setEndMillis(long);
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval.Builder setStartMillis(long);
+  }
+
+  public static final class TimelineBuilders.Timeline {
+    method public static androidx.wear.tiles.TimelineBuilders.Timeline fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public java.util.List<androidx.wear.tiles.TimelineBuilders.TimelineEntry!> getTimelineEntries();
+  }
+
+  public static final class TimelineBuilders.Timeline.Builder {
+    ctor public TimelineBuilders.Timeline.Builder();
+    method public androidx.wear.tiles.TimelineBuilders.Timeline.Builder addTimelineEntry(androidx.wear.tiles.TimelineBuilders.TimelineEntry);
+    method public androidx.wear.tiles.TimelineBuilders.Timeline build();
+  }
+
+  public static final class TimelineBuilders.TimelineEntry {
+    method public static androidx.wear.tiles.TimelineBuilders.TimelineEntry fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Layout? getLayout();
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval? getValidity();
+  }
+
+  public static final class TimelineBuilders.TimelineEntry.Builder {
+    ctor public TimelineBuilders.TimelineEntry.Builder();
+    method public androidx.wear.tiles.TimelineBuilders.TimelineEntry build();
+    method public androidx.wear.tiles.TimelineBuilders.TimelineEntry.Builder setLayout(androidx.wear.tiles.LayoutElementBuilders.Layout);
+    method public androidx.wear.tiles.TimelineBuilders.TimelineEntry.Builder setValidity(androidx.wear.tiles.TimelineBuilders.TimeInterval);
+  }
+
+  public final class TypeBuilders {
+  }
+
+  public static final class TypeBuilders.BoolProp {
+    method public boolean getValue();
+  }
+
+  public static final class TypeBuilders.BoolProp.Builder {
+    ctor public TypeBuilders.BoolProp.Builder();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp build();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp.Builder setValue(boolean);
+  }
+
+  public static final class TypeBuilders.FloatProp {
+    method public float getValue();
+  }
+
+  public static final class TypeBuilders.FloatProp.Builder {
+    ctor public TypeBuilders.FloatProp.Builder();
+    method public androidx.wear.tiles.TypeBuilders.FloatProp build();
+    method public androidx.wear.tiles.TypeBuilders.FloatProp.Builder setValue(float);
+  }
+
+  public static final class TypeBuilders.Int32Prop {
+    method public int getValue();
+  }
+
+  public static final class TypeBuilders.Int32Prop.Builder {
+    ctor public TypeBuilders.Int32Prop.Builder();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop build();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop.Builder setValue(int);
+  }
+
+  public static final class TypeBuilders.StringProp {
+    method public String getValue();
+  }
+
+  public static final class TypeBuilders.StringProp.Builder {
+    ctor public TypeBuilders.StringProp.Builder();
+    method public androidx.wear.tiles.TypeBuilders.StringProp build();
+    method public androidx.wear.tiles.TypeBuilders.StringProp.Builder setValue(String);
+  }
+
+}
+
diff --git a/core/core-ktx/api/res-1.8.0-beta01.txt b/wear/tiles/tiles/api/res-1.1.0-beta02.txt
similarity index 100%
copy from core/core-ktx/api/res-1.8.0-beta01.txt
copy to wear/tiles/tiles/api/res-1.1.0-beta02.txt
diff --git a/wear/tiles/tiles/api/restricted_1.1.0-beta02.txt b/wear/tiles/tiles/api/restricted_1.1.0-beta02.txt
new file mode 100644
index 0000000..1f4b5140
--- /dev/null
+++ b/wear/tiles/tiles/api/restricted_1.1.0-beta02.txt
@@ -0,0 +1,1084 @@
+// Signature format: 4.0
+package androidx.wear.tiles {
+
+  public final class ActionBuilders {
+    method public static androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra booleanExtra(boolean);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra doubleExtra(double);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidIntExtra intExtra(int);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidLongExtra longExtra(long);
+    method public static androidx.wear.tiles.ActionBuilders.AndroidStringExtra stringExtra(String);
+  }
+
+  public static interface ActionBuilders.Action {
+  }
+
+  public static interface ActionBuilders.Action.Builder {
+    method public androidx.wear.tiles.ActionBuilders.Action build();
+  }
+
+  public static final class ActionBuilders.AndroidActivity {
+    method public String getClassName();
+    method public java.util.Map<java.lang.String!,androidx.wear.tiles.ActionBuilders.AndroidExtra!> getKeyToExtraMapping();
+    method public String getPackageName();
+  }
+
+  public static final class ActionBuilders.AndroidActivity.Builder {
+    ctor public ActionBuilders.AndroidActivity.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder addKeyToExtraMapping(String, androidx.wear.tiles.ActionBuilders.AndroidExtra);
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder setClassName(String);
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder setPackageName(String);
+  }
+
+  public static final class ActionBuilders.AndroidBooleanExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public boolean getValue();
+  }
+
+  public static final class ActionBuilders.AndroidBooleanExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidBooleanExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra.Builder setValue(boolean);
+  }
+
+  public static final class ActionBuilders.AndroidDoubleExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public double getValue();
+  }
+
+  public static final class ActionBuilders.AndroidDoubleExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidDoubleExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra.Builder setValue(double);
+  }
+
+  public static interface ActionBuilders.AndroidExtra {
+  }
+
+  public static interface ActionBuilders.AndroidExtra.Builder {
+    method public androidx.wear.tiles.ActionBuilders.AndroidExtra build();
+  }
+
+  public static final class ActionBuilders.AndroidIntExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public int getValue();
+  }
+
+  public static final class ActionBuilders.AndroidIntExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidIntExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidIntExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidIntExtra.Builder setValue(int);
+  }
+
+  public static final class ActionBuilders.AndroidLongExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public long getValue();
+  }
+
+  public static final class ActionBuilders.AndroidLongExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidLongExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidLongExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidLongExtra.Builder setValue(long);
+  }
+
+  public static final class ActionBuilders.AndroidStringExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
+    method public String getValue();
+  }
+
+  public static final class ActionBuilders.AndroidStringExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
+    ctor public ActionBuilders.AndroidStringExtra.Builder();
+    method public androidx.wear.tiles.ActionBuilders.AndroidStringExtra build();
+    method public androidx.wear.tiles.ActionBuilders.AndroidStringExtra.Builder setValue(String);
+  }
+
+  public static final class ActionBuilders.LaunchAction implements androidx.wear.tiles.ActionBuilders.Action {
+    method public androidx.wear.tiles.ActionBuilders.AndroidActivity? getAndroidActivity();
+  }
+
+  public static final class ActionBuilders.LaunchAction.Builder implements androidx.wear.tiles.ActionBuilders.Action.Builder {
+    ctor public ActionBuilders.LaunchAction.Builder();
+    method public androidx.wear.tiles.ActionBuilders.LaunchAction build();
+    method public androidx.wear.tiles.ActionBuilders.LaunchAction.Builder setAndroidActivity(androidx.wear.tiles.ActionBuilders.AndroidActivity);
+  }
+
+  public static final class ActionBuilders.LoadAction implements androidx.wear.tiles.ActionBuilders.Action {
+    method public androidx.wear.tiles.StateBuilders.State? getRequestState();
+  }
+
+  public static final class ActionBuilders.LoadAction.Builder implements androidx.wear.tiles.ActionBuilders.Action.Builder {
+    ctor public ActionBuilders.LoadAction.Builder();
+    method public androidx.wear.tiles.ActionBuilders.LoadAction build();
+    method public androidx.wear.tiles.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.tiles.StateBuilders.State);
+  }
+
+  public final class ColorBuilders {
+    method public static androidx.wear.tiles.ColorBuilders.ColorProp argb(@ColorInt int);
+  }
+
+  public static final class ColorBuilders.ColorProp {
+    method @ColorInt public int getArgb();
+  }
+
+  public static final class ColorBuilders.ColorProp.Builder {
+    ctor public ColorBuilders.ColorProp.Builder();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp build();
+    method public androidx.wear.tiles.ColorBuilders.ColorProp.Builder setArgb(@ColorInt int);
+  }
+
+  public final class DeviceParametersBuilders {
+    field public static final int DEVICE_PLATFORM_UNDEFINED = 0; // 0x0
+    field public static final int DEVICE_PLATFORM_WEAR_OS = 1; // 0x1
+    field public static final int SCREEN_SHAPE_RECT = 2; // 0x2
+    field public static final int SCREEN_SHAPE_ROUND = 1; // 0x1
+    field public static final int SCREEN_SHAPE_UNDEFINED = 0; // 0x0
+  }
+
+  public static final class DeviceParametersBuilders.DeviceParameters {
+    method public int getDevicePlatform();
+    method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getScreenDensity();
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenHeightDp();
+    method public int getScreenShape();
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenWidthDp();
+  }
+
+  public static final class DeviceParametersBuilders.DeviceParameters.Builder {
+    ctor public DeviceParametersBuilders.DeviceParameters.Builder();
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters build();
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setDevicePlatform(int);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenDensity(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenHeightDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenShape(int);
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenWidthDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+  }
+
+  public final class DimensionBuilders {
+    method public static androidx.wear.tiles.DimensionBuilders.DegreesProp degrees(float);
+    method public static androidx.wear.tiles.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+    method public static androidx.wear.tiles.DimensionBuilders.EmProp em(int);
+    method public static androidx.wear.tiles.DimensionBuilders.EmProp em(float);
+    method public static androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp expand();
+    method public static androidx.wear.tiles.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
+    method public static androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp wrap();
+  }
+
+  public static interface DimensionBuilders.ContainerDimension {
+  }
+
+  public static interface DimensionBuilders.ContainerDimension.Builder {
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension build();
+  }
+
+  public static final class DimensionBuilders.DegreesProp {
+    method public float getValue();
+  }
+
+  public static final class DimensionBuilders.DegreesProp.Builder {
+    ctor public DimensionBuilders.DegreesProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp build();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp.Builder setValue(float);
+  }
+
+  public static final class DimensionBuilders.DpProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension androidx.wear.tiles.DimensionBuilders.ImageDimension androidx.wear.tiles.DimensionBuilders.SpacerDimension {
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
+  }
+
+  public static final class DimensionBuilders.DpProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder androidx.wear.tiles.DimensionBuilders.SpacerDimension.Builder {
+    ctor public DimensionBuilders.DpProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp build();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.DP) float);
+  }
+
+  public static final class DimensionBuilders.EmProp {
+    method public float getValue();
+  }
+
+  public static final class DimensionBuilders.EmProp.Builder {
+    ctor public DimensionBuilders.EmProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.EmProp build();
+    method public androidx.wear.tiles.DimensionBuilders.EmProp.Builder setValue(float);
+  }
+
+  public static final class DimensionBuilders.ExpandedDimensionProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension androidx.wear.tiles.DimensionBuilders.ImageDimension {
+  }
+
+  public static final class DimensionBuilders.ExpandedDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder {
+    ctor public DimensionBuilders.ExpandedDimensionProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp build();
+  }
+
+  public static interface DimensionBuilders.ImageDimension {
+  }
+
+  public static interface DimensionBuilders.ImageDimension.Builder {
+    method public androidx.wear.tiles.DimensionBuilders.ImageDimension build();
+  }
+
+  public static final class DimensionBuilders.ProportionalDimensionProp implements androidx.wear.tiles.DimensionBuilders.ImageDimension {
+    method @IntRange(from=0) public int getAspectRatioHeight();
+    method @IntRange(from=0) public int getAspectRatioWidth();
+  }
+
+  public static final class DimensionBuilders.ProportionalDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder {
+    ctor public DimensionBuilders.ProportionalDimensionProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp build();
+    method public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioHeight(@IntRange(from=0) int);
+    method public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioWidth(@IntRange(from=0) int);
+  }
+
+  public static final class DimensionBuilders.SpProp {
+    method @Dimension(unit=androidx.annotation.Dimension.SP) public float getValue();
+  }
+
+  public static final class DimensionBuilders.SpProp.Builder {
+    ctor public DimensionBuilders.SpProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp build();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.SP) float);
+  }
+
+  public static interface DimensionBuilders.SpacerDimension {
+  }
+
+  public static interface DimensionBuilders.SpacerDimension.Builder {
+    method public androidx.wear.tiles.DimensionBuilders.SpacerDimension build();
+  }
+
+  public static final class DimensionBuilders.WrappedDimensionProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension {
+  }
+
+  public static final class DimensionBuilders.WrappedDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder {
+    ctor public DimensionBuilders.WrappedDimensionProp.Builder();
+    method public androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp build();
+  }
+
+  public final class EventBuilders {
+  }
+
+  public static final class EventBuilders.TileAddEvent {
+  }
+
+  public static final class EventBuilders.TileAddEvent.Builder {
+    ctor public EventBuilders.TileAddEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileAddEvent build();
+  }
+
+  public static final class EventBuilders.TileEnterEvent {
+  }
+
+  public static final class EventBuilders.TileEnterEvent.Builder {
+    ctor public EventBuilders.TileEnterEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileEnterEvent build();
+  }
+
+  public static final class EventBuilders.TileLeaveEvent {
+  }
+
+  public static final class EventBuilders.TileLeaveEvent.Builder {
+    ctor public EventBuilders.TileLeaveEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileLeaveEvent build();
+  }
+
+  public static final class EventBuilders.TileRemoveEvent {
+  }
+
+  public static final class EventBuilders.TileRemoveEvent.Builder {
+    ctor public EventBuilders.TileRemoveEvent.Builder();
+    method public androidx.wear.tiles.EventBuilders.TileRemoveEvent build();
+  }
+
+  public final class LayoutElementBuilders {
+    field public static final int ARC_ANCHOR_CENTER = 2; // 0x2
+    field public static final int ARC_ANCHOR_END = 3; // 0x3
+    field public static final int ARC_ANCHOR_START = 1; // 0x1
+    field public static final int ARC_ANCHOR_UNDEFINED = 0; // 0x0
+    field public static final int CONTENT_SCALE_MODE_CROP = 2; // 0x2
+    field public static final int CONTENT_SCALE_MODE_FILL_BOUNDS = 3; // 0x3
+    field public static final int CONTENT_SCALE_MODE_FIT = 1; // 0x1
+    field public static final int CONTENT_SCALE_MODE_UNDEFINED = 0; // 0x0
+    field public static final int FONT_VARIANT_BODY = 2; // 0x2
+    field public static final int FONT_VARIANT_TITLE = 1; // 0x1
+    field public static final int FONT_VARIANT_UNDEFINED = 0; // 0x0
+    field public static final int FONT_WEIGHT_BOLD = 700; // 0x2bc
+    field public static final int FONT_WEIGHT_NORMAL = 400; // 0x190
+    field public static final int FONT_WEIGHT_UNDEFINED = 0; // 0x0
+    field public static final int HORIZONTAL_ALIGN_CENTER = 2; // 0x2
+    field public static final int HORIZONTAL_ALIGN_END = 5; // 0x5
+    field public static final int HORIZONTAL_ALIGN_LEFT = 1; // 0x1
+    field public static final int HORIZONTAL_ALIGN_RIGHT = 3; // 0x3
+    field public static final int HORIZONTAL_ALIGN_START = 4; // 0x4
+    field public static final int HORIZONTAL_ALIGN_UNDEFINED = 0; // 0x0
+    field public static final int SPAN_VERTICAL_ALIGN_BOTTOM = 1; // 0x1
+    field public static final int SPAN_VERTICAL_ALIGN_TEXT_BASELINE = 2; // 0x2
+    field public static final int SPAN_VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
+    field public static final int TEXT_ALIGN_CENTER = 2; // 0x2
+    field public static final int TEXT_ALIGN_END = 3; // 0x3
+    field public static final int TEXT_ALIGN_START = 1; // 0x1
+    field public static final int TEXT_ALIGN_UNDEFINED = 0; // 0x0
+    field public static final int TEXT_OVERFLOW_ELLIPSIZE_END = 2; // 0x2
+    field public static final int TEXT_OVERFLOW_TRUNCATE = 1; // 0x1
+    field public static final int TEXT_OVERFLOW_UNDEFINED = 0; // 0x0
+    field public static final int VERTICAL_ALIGN_BOTTOM = 3; // 0x3
+    field public static final int VERTICAL_ALIGN_CENTER = 2; // 0x2
+    field public static final int VERTICAL_ALIGN_TOP = 1; // 0x1
+    field public static final int VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
+  }
+
+  public static final class LayoutElementBuilders.Arc implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp? getAnchorAngle();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp? getAnchorType();
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement!> getContents();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlign();
+  }
+
+  public static final class LayoutElementBuilders.Arc.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Arc.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorAngle(androidx.wear.tiles.DimensionBuilders.DegreesProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorType(androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorType(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setVerticalAlign(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setVerticalAlign(int);
+  }
+
+  public static final class LayoutElementBuilders.ArcAdapter implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getRotateContents();
+  }
+
+  public static final class LayoutElementBuilders.ArcAdapter.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcAdapter.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(boolean);
+  }
+
+  public static final class LayoutElementBuilders.ArcAnchorTypeProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.ArcAnchorTypeProp.Builder {
+    ctor public LayoutElementBuilders.ArcAnchorTypeProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp.Builder setValue(int);
+  }
+
+  public static interface LayoutElementBuilders.ArcLayoutElement {
+  }
+
+  public static interface LayoutElementBuilders.ArcLayoutElement.Builder {
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement build();
+  }
+
+  public static final class LayoutElementBuilders.ArcLine implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp? getLength();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getThickness();
+  }
+
+  public static final class LayoutElementBuilders.ArcLine.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcLine.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setLength(androidx.wear.tiles.DimensionBuilders.DegreesProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setThickness(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class LayoutElementBuilders.ArcSpacer implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.DegreesProp? getLength();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getThickness();
+  }
+
+  public static final class LayoutElementBuilders.ArcSpacer.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcSpacer.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setLength(androidx.wear.tiles.DimensionBuilders.DegreesProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setThickness(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class LayoutElementBuilders.ArcText implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getText();
+  }
+
+  public static final class LayoutElementBuilders.ArcText.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
+    ctor public LayoutElementBuilders.ArcText.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setText(String);
+  }
+
+  public static final class LayoutElementBuilders.Box implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Box.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Box.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHorizontalAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setVerticalAlignment(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setVerticalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+  }
+
+  public static final class LayoutElementBuilders.ColorFilter {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getTint();
+  }
+
+  public static final class LayoutElementBuilders.ColorFilter.Builder {
+    ctor public LayoutElementBuilders.ColorFilter.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ColorFilter build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ColorFilter.Builder setTint(androidx.wear.tiles.ColorBuilders.ColorProp);
+  }
+
+  public static final class LayoutElementBuilders.Column implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Column.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Column.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHorizontalAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHorizontalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+  }
+
+  public static final class LayoutElementBuilders.ContentScaleModeProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.ContentScaleModeProp.Builder {
+    ctor public LayoutElementBuilders.ContentScaleModeProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.FontStyle {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getItalic();
+    method public androidx.wear.tiles.DimensionBuilders.EmProp? getLetterSpacing();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp? getSize();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getUnderline();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp? getWeight();
+  }
+
+  public static final class LayoutElementBuilders.FontStyle.Builder {
+    ctor public LayoutElementBuilders.FontStyle.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle build();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setItalic(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setItalic(boolean);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setLetterSpacing(androidx.wear.tiles.DimensionBuilders.EmProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setSize(androidx.wear.tiles.DimensionBuilders.SpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setUnderline(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setUnderline(boolean);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setWeight(androidx.wear.tiles.LayoutElementBuilders.FontWeightProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setWeight(int);
+  }
+
+  public static class LayoutElementBuilders.FontStyles {
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+  }
+
+  public static final class LayoutElementBuilders.FontWeightProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.FontWeightProp.Builder {
+    ctor public LayoutElementBuilders.FontWeightProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.HorizontalAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.HorizontalAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.HorizontalAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.Image implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.ColorFilter? getColorFilter();
+    method public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp? getContentScaleMode();
+    method public androidx.wear.tiles.DimensionBuilders.ImageDimension? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getResourceId();
+    method public androidx.wear.tiles.DimensionBuilders.ImageDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Image.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Image.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Image build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setColorFilter(androidx.wear.tiles.LayoutElementBuilders.ColorFilter);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setContentScaleMode(androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setContentScaleMode(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ImageDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setResourceId(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setResourceId(String);
+    method public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ImageDimension);
+  }
+
+  public static final class LayoutElementBuilders.Layout {
+    method public static androidx.wear.tiles.LayoutElementBuilders.Layout fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getRoot();
+  }
+
+  public static final class LayoutElementBuilders.Layout.Builder {
+    ctor public LayoutElementBuilders.Layout.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Layout build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Layout.Builder setRoot(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+  }
+
+  public static interface LayoutElementBuilders.LayoutElement {
+  }
+
+  public static interface LayoutElementBuilders.LayoutElement.Builder {
+    method public androidx.wear.tiles.LayoutElementBuilders.LayoutElement build();
+  }
+
+  public static final class LayoutElementBuilders.Row implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
+    method public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Row.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Row.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setVerticalAlignment(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setVerticalAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
+  }
+
+  public static final class LayoutElementBuilders.Spacer implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.SpacerDimension? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.DimensionBuilders.SpacerDimension? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.Spacer.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Spacer.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setHeight(androidx.wear.tiles.DimensionBuilders.SpacerDimension);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setWidth(androidx.wear.tiles.DimensionBuilders.SpacerDimension);
+  }
+
+  public static interface LayoutElementBuilders.Span {
+  }
+
+  public static interface LayoutElementBuilders.Span.Builder {
+    method public androidx.wear.tiles.LayoutElementBuilders.Span build();
+  }
+
+  public static final class LayoutElementBuilders.SpanImage implements androidx.wear.tiles.LayoutElementBuilders.Span {
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp? getAlignment();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getHeight();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getResourceId();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getWidth();
+  }
+
+  public static final class LayoutElementBuilders.SpanImage.Builder implements androidx.wear.tiles.LayoutElementBuilders.Span.Builder {
+    ctor public LayoutElementBuilders.SpanImage.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage build();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setAlignment(androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setHeight(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.SpanModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setResourceId(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setResourceId(String);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class LayoutElementBuilders.SpanText implements androidx.wear.tiles.LayoutElementBuilders.Span {
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers? getModifiers();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getText();
+  }
+
+  public static final class LayoutElementBuilders.SpanText.Builder implements androidx.wear.tiles.LayoutElementBuilders.Span.Builder {
+    ctor public LayoutElementBuilders.SpanText.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText build();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.SpanModifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setText(String);
+  }
+
+  public static final class LayoutElementBuilders.SpanVerticalAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.SpanVerticalAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.SpanVerticalAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.Spannable implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.DimensionBuilders.SpProp? getLineHeight();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop? getMaxLines();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getMultilineAlignment();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp? getOverflow();
+    method public java.util.List<androidx.wear.tiles.LayoutElementBuilders.Span!> getSpans();
+  }
+
+  public static final class LayoutElementBuilders.Spannable.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Spannable.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder addSpan(androidx.wear.tiles.LayoutElementBuilders.Span);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setLineHeight(androidx.wear.tiles.DimensionBuilders.SpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMaxLines(androidx.wear.tiles.TypeBuilders.Int32Prop);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMaxLines(@IntRange(from=1) int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setOverflow(androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setOverflow(int);
+  }
+
+  public static final class LayoutElementBuilders.Text implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
+    method public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
+    method public androidx.wear.tiles.DimensionBuilders.SpProp? getLineHeight();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop? getMaxLines();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp? getMultilineAlignment();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp? getOverflow();
+    method public androidx.wear.tiles.TypeBuilders.StringProp? getText();
+  }
+
+  public static final class LayoutElementBuilders.Text.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
+    ctor public LayoutElementBuilders.Text.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.Text build();
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setLineHeight(androidx.wear.tiles.DimensionBuilders.SpProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMaxLines(androidx.wear.tiles.TypeBuilders.Int32Prop);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMaxLines(@IntRange(from=1) int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMultilineAlignment(androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMultilineAlignment(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setOverflow(androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setOverflow(int);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
+    method public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setText(String);
+  }
+
+  public static final class LayoutElementBuilders.TextAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.TextAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.TextAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.TextOverflowProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.TextOverflowProp.Builder {
+    ctor public LayoutElementBuilders.TextOverflowProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp.Builder setValue(int);
+  }
+
+  public static final class LayoutElementBuilders.VerticalAlignmentProp {
+    method public int getValue();
+  }
+
+  public static final class LayoutElementBuilders.VerticalAlignmentProp.Builder {
+    ctor public LayoutElementBuilders.VerticalAlignmentProp.Builder();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp build();
+    method public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp.Builder setValue(int);
+  }
+
+  public final class ModifiersBuilders {
+  }
+
+  public static final class ModifiersBuilders.ArcModifiers {
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics? getSemantics();
+  }
+
+  public static final class ModifiersBuilders.ArcModifiers.Builder {
+    ctor public ModifiersBuilders.ArcModifiers.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers build();
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
+    method public androidx.wear.tiles.ModifiersBuilders.ArcModifiers.Builder setSemantics(androidx.wear.tiles.ModifiersBuilders.Semantics);
+  }
+
+  public static final class ModifiersBuilders.Background {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.ModifiersBuilders.Corner? getCorner();
+  }
+
+  public static final class ModifiersBuilders.Background.Builder {
+    ctor public ModifiersBuilders.Background.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Background build();
+    method public androidx.wear.tiles.ModifiersBuilders.Background.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Background.Builder setCorner(androidx.wear.tiles.ModifiersBuilders.Corner);
+  }
+
+  public static final class ModifiersBuilders.Border {
+    method public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getWidth();
+  }
+
+  public static final class ModifiersBuilders.Border.Builder {
+    ctor public ModifiersBuilders.Border.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Border build();
+    method public androidx.wear.tiles.ModifiersBuilders.Border.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Border.Builder setWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class ModifiersBuilders.Clickable {
+    method public String getId();
+    method public androidx.wear.tiles.ActionBuilders.Action? getOnClick();
+  }
+
+  public static final class ModifiersBuilders.Clickable.Builder {
+    ctor public ModifiersBuilders.Clickable.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable build();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable.Builder setId(String);
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable.Builder setOnClick(androidx.wear.tiles.ActionBuilders.Action);
+  }
+
+  public static final class ModifiersBuilders.Corner {
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getRadius();
+  }
+
+  public static final class ModifiersBuilders.Corner.Builder {
+    ctor public ModifiersBuilders.Corner.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Corner build();
+    method public androidx.wear.tiles.ModifiersBuilders.Corner.Builder setRadius(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class ModifiersBuilders.ElementMetadata {
+    method public byte[] getTagData();
+  }
+
+  public static final class ModifiersBuilders.ElementMetadata.Builder {
+    ctor public ModifiersBuilders.ElementMetadata.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.ElementMetadata build();
+    method public androidx.wear.tiles.ModifiersBuilders.ElementMetadata.Builder setTagData(byte[]);
+  }
+
+  public static final class ModifiersBuilders.Modifiers {
+    method public androidx.wear.tiles.ModifiersBuilders.Background? getBackground();
+    method public androidx.wear.tiles.ModifiersBuilders.Border? getBorder();
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
+    method public androidx.wear.tiles.ModifiersBuilders.ElementMetadata? getMetadata();
+    method public androidx.wear.tiles.ModifiersBuilders.Padding? getPadding();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics? getSemantics();
+  }
+
+  public static final class ModifiersBuilders.Modifiers.Builder {
+    ctor public ModifiersBuilders.Modifiers.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers build();
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setBackground(androidx.wear.tiles.ModifiersBuilders.Background);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setBorder(androidx.wear.tiles.ModifiersBuilders.Border);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setMetadata(androidx.wear.tiles.ModifiersBuilders.ElementMetadata);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setPadding(androidx.wear.tiles.ModifiersBuilders.Padding);
+    method public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setSemantics(androidx.wear.tiles.ModifiersBuilders.Semantics);
+  }
+
+  public static final class ModifiersBuilders.Padding {
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getBottom();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getEnd();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp? getRtlAware();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getStart();
+    method public androidx.wear.tiles.DimensionBuilders.DpProp? getTop();
+  }
+
+  public static final class ModifiersBuilders.Padding.Builder {
+    ctor public ModifiersBuilders.Padding.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Padding build();
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setAll(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setBottom(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setEnd(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setRtlAware(androidx.wear.tiles.TypeBuilders.BoolProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setRtlAware(boolean);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setStart(androidx.wear.tiles.DimensionBuilders.DpProp);
+    method public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setTop(androidx.wear.tiles.DimensionBuilders.DpProp);
+  }
+
+  public static final class ModifiersBuilders.Semantics {
+    method public String getContentDescription();
+  }
+
+  public static final class ModifiersBuilders.Semantics.Builder {
+    ctor public ModifiersBuilders.Semantics.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics build();
+    method public androidx.wear.tiles.ModifiersBuilders.Semantics.Builder setContentDescription(String);
+  }
+
+  public static final class ModifiersBuilders.SpanModifiers {
+    method public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
+  }
+
+  public static final class ModifiersBuilders.SpanModifiers.Builder {
+    ctor public ModifiersBuilders.SpanModifiers.Builder();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers build();
+    method public androidx.wear.tiles.ModifiersBuilders.SpanModifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
+  }
+
+  public final class RequestBuilders {
+  }
+
+  public static final class RequestBuilders.ResourcesRequest {
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters? getDeviceParameters();
+    method public java.util.List<java.lang.String!> getResourceIds();
+    method public String getVersion();
+  }
+
+  public static final class RequestBuilders.ResourcesRequest.Builder {
+    ctor public RequestBuilders.ResourcesRequest.Builder();
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder addResourceId(String);
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest build();
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setDeviceParameters(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setVersion(String);
+  }
+
+  public static final class RequestBuilders.TileRequest {
+    method public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters? getDeviceParameters();
+    method public androidx.wear.tiles.StateBuilders.State? getState();
+  }
+
+  public static final class RequestBuilders.TileRequest.Builder {
+    ctor public RequestBuilders.TileRequest.Builder();
+    method public androidx.wear.tiles.RequestBuilders.TileRequest build();
+    method public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setDeviceParameters(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
+    method public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setState(androidx.wear.tiles.StateBuilders.State);
+  }
+
+  public final class ResourceBuilders {
+    field public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
+    field public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
+  }
+
+  public static final class ResourceBuilders.AndroidImageResourceByResId {
+    method @DrawableRes public int getResourceId();
+  }
+
+  public static final class ResourceBuilders.AndroidImageResourceByResId.Builder {
+    ctor public ResourceBuilders.AndroidImageResourceByResId.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId build();
+    method public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId.Builder setResourceId(@DrawableRes int);
+  }
+
+  public static final class ResourceBuilders.ImageResource {
+    method public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId? getAndroidResourceByResId();
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource? getInlineResource();
+  }
+
+  public static final class ResourceBuilders.ImageResource.Builder {
+    ctor public ResourceBuilders.ImageResource.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.ImageResource build();
+    method public androidx.wear.tiles.ResourceBuilders.ImageResource.Builder setAndroidResourceByResId(androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId);
+    method public androidx.wear.tiles.ResourceBuilders.ImageResource.Builder setInlineResource(androidx.wear.tiles.ResourceBuilders.InlineImageResource);
+  }
+
+  public static final class ResourceBuilders.InlineImageResource {
+    method public byte[] getData();
+    method public int getFormat();
+    method @Dimension(unit=androidx.annotation.Dimension.PX) public int getHeightPx();
+    method @Dimension(unit=androidx.annotation.Dimension.PX) public int getWidthPx();
+  }
+
+  public static final class ResourceBuilders.InlineImageResource.Builder {
+    ctor public ResourceBuilders.InlineImageResource.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource build();
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setData(byte[]);
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setFormat(int);
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
+    method public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setWidthPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
+  }
+
+  public static final class ResourceBuilders.Resources {
+    method public java.util.Map<java.lang.String!,androidx.wear.tiles.ResourceBuilders.ImageResource!> getIdToImageMapping();
+    method public String getVersion();
+  }
+
+  public static final class ResourceBuilders.Resources.Builder {
+    ctor public ResourceBuilders.Resources.Builder();
+    method public androidx.wear.tiles.ResourceBuilders.Resources.Builder addIdToImageMapping(String, androidx.wear.tiles.ResourceBuilders.ImageResource);
+    method public androidx.wear.tiles.ResourceBuilders.Resources build();
+    method public androidx.wear.tiles.ResourceBuilders.Resources.Builder setVersion(String);
+  }
+
+  public final class StateBuilders {
+  }
+
+  public static final class StateBuilders.State {
+    method public String getLastClickableId();
+  }
+
+  public static final class StateBuilders.State.Builder {
+    ctor public StateBuilders.State.Builder();
+    method public androidx.wear.tiles.StateBuilders.State build();
+  }
+
+  public final class TileBuilders {
+  }
+
+  public static final class TileBuilders.Tile {
+    method public long getFreshnessIntervalMillis();
+    method public String getResourcesVersion();
+    method public androidx.wear.tiles.TimelineBuilders.Timeline? getTimeline();
+  }
+
+  public static final class TileBuilders.Tile.Builder {
+    ctor public TileBuilders.Tile.Builder();
+    method public androidx.wear.tiles.TileBuilders.Tile build();
+    method public androidx.wear.tiles.TileBuilders.Tile.Builder setFreshnessIntervalMillis(long);
+    method public androidx.wear.tiles.TileBuilders.Tile.Builder setResourcesVersion(String);
+    method public androidx.wear.tiles.TileBuilders.Tile.Builder setTimeline(androidx.wear.tiles.TimelineBuilders.Timeline);
+  }
+
+  public abstract class TileService extends android.app.Service {
+    ctor public TileService();
+    method public static androidx.wear.tiles.TileUpdateRequester getUpdater(android.content.Context);
+    method public android.os.IBinder? onBind(android.content.Intent);
+    method @MainThread protected abstract com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources!> onResourcesRequest(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
+    method @MainThread protected void onTileAddEvent(androidx.wear.tiles.EventBuilders.TileAddEvent);
+    method @MainThread protected void onTileEnterEvent(androidx.wear.tiles.EventBuilders.TileEnterEvent);
+    method @MainThread protected void onTileLeaveEvent(androidx.wear.tiles.EventBuilders.TileLeaveEvent);
+    method @MainThread protected void onTileRemoveEvent(androidx.wear.tiles.EventBuilders.TileRemoveEvent);
+    method @MainThread protected abstract com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile!> onTileRequest(androidx.wear.tiles.RequestBuilders.TileRequest);
+    field public static final String ACTION_BIND_TILE_PROVIDER = "androidx.wear.tiles.action.BIND_TILE_PROVIDER";
+    field public static final String EXTRA_CLICKABLE_ID = "androidx.wear.tiles.extra.CLICKABLE_ID";
+    field public static final String METADATA_PREVIEW_KEY = "androidx.wear.tiles.PREVIEW";
+  }
+
+  public interface TileUpdateRequester {
+    method public void requestUpdate(Class<? extends androidx.wear.tiles.TileService>);
+  }
+
+  public final class TimelineBuilders {
+  }
+
+  public static final class TimelineBuilders.TimeInterval {
+    method public long getEndMillis();
+    method public long getStartMillis();
+  }
+
+  public static final class TimelineBuilders.TimeInterval.Builder {
+    ctor public TimelineBuilders.TimeInterval.Builder();
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval build();
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval.Builder setEndMillis(long);
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval.Builder setStartMillis(long);
+  }
+
+  public static final class TimelineBuilders.Timeline {
+    method public static androidx.wear.tiles.TimelineBuilders.Timeline fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public java.util.List<androidx.wear.tiles.TimelineBuilders.TimelineEntry!> getTimelineEntries();
+  }
+
+  public static final class TimelineBuilders.Timeline.Builder {
+    ctor public TimelineBuilders.Timeline.Builder();
+    method public androidx.wear.tiles.TimelineBuilders.Timeline.Builder addTimelineEntry(androidx.wear.tiles.TimelineBuilders.TimelineEntry);
+    method public androidx.wear.tiles.TimelineBuilders.Timeline build();
+  }
+
+  public static final class TimelineBuilders.TimelineEntry {
+    method public static androidx.wear.tiles.TimelineBuilders.TimelineEntry fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
+    method public androidx.wear.tiles.LayoutElementBuilders.Layout? getLayout();
+    method public androidx.wear.tiles.TimelineBuilders.TimeInterval? getValidity();
+  }
+
+  public static final class TimelineBuilders.TimelineEntry.Builder {
+    ctor public TimelineBuilders.TimelineEntry.Builder();
+    method public androidx.wear.tiles.TimelineBuilders.TimelineEntry build();
+    method public androidx.wear.tiles.TimelineBuilders.TimelineEntry.Builder setLayout(androidx.wear.tiles.LayoutElementBuilders.Layout);
+    method public androidx.wear.tiles.TimelineBuilders.TimelineEntry.Builder setValidity(androidx.wear.tiles.TimelineBuilders.TimeInterval);
+  }
+
+  public final class TypeBuilders {
+  }
+
+  public static final class TypeBuilders.BoolProp {
+    method public boolean getValue();
+  }
+
+  public static final class TypeBuilders.BoolProp.Builder {
+    ctor public TypeBuilders.BoolProp.Builder();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp build();
+    method public androidx.wear.tiles.TypeBuilders.BoolProp.Builder setValue(boolean);
+  }
+
+  public static final class TypeBuilders.FloatProp {
+    method public float getValue();
+  }
+
+  public static final class TypeBuilders.FloatProp.Builder {
+    ctor public TypeBuilders.FloatProp.Builder();
+    method public androidx.wear.tiles.TypeBuilders.FloatProp build();
+    method public androidx.wear.tiles.TypeBuilders.FloatProp.Builder setValue(float);
+  }
+
+  public static final class TypeBuilders.Int32Prop {
+    method public int getValue();
+  }
+
+  public static final class TypeBuilders.Int32Prop.Builder {
+    ctor public TypeBuilders.Int32Prop.Builder();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop build();
+    method public androidx.wear.tiles.TypeBuilders.Int32Prop.Builder setValue(int);
+  }
+
+  public static final class TypeBuilders.StringProp {
+    method public String getValue();
+  }
+
+  public static final class TypeBuilders.StringProp.Builder {
+    ctor public TypeBuilders.StringProp.Builder();
+    method public androidx.wear.tiles.TypeBuilders.StringProp build();
+    method public androidx.wear.tiles.TypeBuilders.StringProp.Builder setValue(String);
+  }
+
+}
+
diff --git a/wear/watchface/watchface-client-guava/lint-baseline.xml b/wear/watchface/watchface-client-guava/lint-baseline.xml
index 1b26322..a4e3c85 100644
--- a/wear/watchface/watchface-client-guava/lint-baseline.xml
+++ b/wear/watchface/watchface-client-guava/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
diff --git a/wear/watchface/watchface-complications-data/lint-baseline.xml b/wear/watchface/watchface-complications-data/lint-baseline.xml
index 1c2886d..af4f75c 100644
--- a/wear/watchface/watchface-complications-data/lint-baseline.xml
+++ b/wear/watchface/watchface-complications-data/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="MissingQuantity"
diff --git a/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt b/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt
index 8aa1a85..255b3d8 100644
--- a/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt
+++ b/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt
@@ -1117,6 +1117,7 @@
         }
     }
 
+    @Suppress("DEPRECATION")
     @Test
     public fun launchComplicationDataSourceChooser() {
         ComplicationDataSourceChooserContract.useTestComplicationHelperActivity = true
diff --git a/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt b/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
index e20b6f8..7de7ec0 100644
--- a/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
+++ b/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
@@ -277,6 +277,7 @@
         }
 
         // Used by tests.
+        @Suppress("DEPRECATION")
         @Throws(TimeoutCancellationException::class)
         internal suspend fun createOnWatchEditorSessionImpl(
             activity: ComponentActivity,
@@ -1082,6 +1083,7 @@
         return intent
     }
 
+    @Suppress("DEPRECATION")
     override fun parseResult(resultCode: Int, intent: Intent?) = intent?.let {
         val extras = intent.extras?.let { extras ->
             Bundle(extras).apply { remove(EXTRA_PROVIDER_INFO) }
diff --git a/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt b/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt
index a266048..4ece658 100644
--- a/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt
+++ b/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt
@@ -138,6 +138,7 @@
          * if there is one or `null` otherwise. Intended for use by the watch face editor activity.
          * @throws [TimeoutCancellationException] in case of en error.
          */
+        @Suppress("DEPRECATION")
         @SuppressLint("NewApi")
         @JvmStatic
         @Throws(TimeoutCancellationException::class)
diff --git a/wear/watchface/watchface/api/public_plus_experimental_current.txt b/wear/watchface/watchface/api/public_plus_experimental_current.txt
index 233ddf0..4cf90dc 100644
--- a/wear/watchface/watchface/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface/api/public_plus_experimental_current.txt
@@ -11,9 +11,6 @@
     method public float getThickness();
     method public float getTotalAngle();
     method public boolean hitTest(android.graphics.Rect rect, @Px float x, @Px float y);
-    method public void setStartAngle(float);
-    method public void setThickness(float);
-    method public void setTotalAngle(float);
     property public final float startAngle;
     property public final float thickness;
     property public final float totalAngle;
diff --git a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt
index 55aafa0..b2f2811 100644
--- a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt
+++ b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt
@@ -316,6 +316,7 @@
 }
 
 /** The watch face component name encoded in the intent. */
+@Suppress("DEPRECATION")
 private val Intent.watchFaceComponentName
     get() = getParcelableExtra<ComponentName>(
         ComplicationDataSourceChooserIntent.EXTRA_WATCH_FACE_COMPONENT_NAME
diff --git a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/XmlDefinedUserStyleSchemaAndComplicationSlotsTest.kt b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/XmlDefinedUserStyleSchemaAndComplicationSlotsTest.kt
index 2390c2a..140be48 100644
--- a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/XmlDefinedUserStyleSchemaAndComplicationSlotsTest.kt
+++ b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/test/XmlDefinedUserStyleSchemaAndComplicationSlotsTest.kt
@@ -245,7 +245,7 @@
 
             assertThat(
                 watchFaceImpl.complicationSlotsManager.complicationSlots.size
-            ).isEqualTo(3)
+            ).isEqualTo(4)
 
             val slotA = watchFaceImpl.complicationSlotsManager.complicationSlots[10]!!
             assertThat(slotA.boundsType).isEqualTo(ComplicationSlotBoundsType.ROUND_RECT)
@@ -367,6 +367,12 @@
                     "primary(ComponentInfo{com.package/com.app}, SHORT_TEXT), " +
                     "secondary(null, null), " +
                     "system(16, SHORT_TEXT)]}]")
+            val slotD = watchFaceImpl.complicationSlotsManager.complicationSlots[40]!!
+            assertThat(slotD.supportedTypes).containsExactly(
+                ComplicationType.SHORT_TEXT,
+                ComplicationType.RANGED_VALUE,
+                ComplicationType.SMALL_IMAGE
+            ).inOrder()
         }
     }
 }
diff --git a/wear/watchface/watchface/src/androidTest/res/values/integers.xml b/wear/watchface/watchface/src/androidTest/res/values/integers.xml
index efcf809..3c247b6 100644
--- a/wear/watchface/watchface/src/androidTest/res/values/integers.xml
+++ b/wear/watchface/watchface/src/androidTest/res/values/integers.xml
@@ -18,4 +18,5 @@
     <integer name="complication_slot_10">10</integer>
     <integer name="complication_slot_20">20</integer>
     <integer name="complication_slot_30">30</integer>
+    <integer name="complication_slot_40">40</integer>
 </resources>
\ No newline at end of file
diff --git a/wear/watchface/watchface/src/androidTest/res/values/strings.xml b/wear/watchface/watchface/src/androidTest/res/values/strings.xml
index 06fd5c2..946f7e2 100644
--- a/wear/watchface/watchface/src/androidTest/res/values/strings.xml
+++ b/wear/watchface/watchface/src/androidTest/res/values/strings.xml
@@ -21,8 +21,10 @@
     <string name="complication_name_two" translatable="false">Two</string>
     <string name="complication_screen_reader_name_two"
         translatable="false">Complication two.</string>
+    <string name="complication_name_three" translatable="false">Three</string>
     <string name="flavor_id_0" translatable="false">flavor1</string>
     <string name="setting_time_style" translatable="false">TimeStyle</string>
     <string name="option_time_style_minimal" translatable="false">minimal</string>
     <string name="option_time_style_seconds" translatable="false">seconds</string>
+    <string name="supported_type_three" translatable="false">SHORT_TEXT|RANGED_VALUE|SMALL_IMAGE</string>
 </resources>
diff --git a/wear/watchface/watchface/src/androidTest/res/xml/xml_watchface.xml b/wear/watchface/watchface/src/androidTest/res/xml/xml_watchface.xml
index af13c32..cb508e7 100644
--- a/wear/watchface/watchface/src/androidTest/res/xml/xml_watchface.xml
+++ b/wear/watchface/watchface/src/androidTest/res/xml/xml_watchface.xml
@@ -74,6 +74,15 @@
         app:systemDataSourceFallbackDefaultType="NOT_CONFIGURED">
         <ComplicationSlotBounds app:left="1" app:top="20" app:right="3" app:bottom="40"/>
     </ComplicationSlot>
+    <ComplicationSlot
+        app:slotId="@integer/complication_slot_40"
+        app:name="@string/complication_name_three"
+        app:boundsType="ROUND_RECT"
+        app:supportedTypes="@string/supported_type_three"
+        app:systemDataSourceFallback="DATA_SOURCE_WATCH_BATTERY"
+        app:systemDataSourceFallbackDefaultType="RANGED_VALUE">
+        <ComplicationSlotBounds app:left="3" app:top="70" app:right="7" app:bottom="90"/>
+    </ComplicationSlot>
     <UserStyleFlavors>
         <UserStyleFlavor app:id="@string/flavor_id_0">
             <StyleOption app:id="@string/setting_time_style"
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationHelperActivity.java b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationHelperActivity.java
index f0a97aa..bf2a9f7 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationHelperActivity.java
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationHelperActivity.java
@@ -191,6 +191,7 @@
         }
 
         @Override
+        @SuppressWarnings("deprecation")
         public void launchComplicationDeniedActivity() {
             Intent complicationDeniedIntent =
                     mActivity.getIntent().getParcelableExtra(
@@ -243,6 +244,7 @@
         start(true);
     }
 
+    @SuppressWarnings("deprecation")
     void start(boolean shouldShowRequestPermissionRationale) {
         if (shouldShowRequestPermissionRationale
                 && mDelegate.shouldShowRequestPermissionRationale()) {
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlot.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlot.kt
index 3679997..279dd52 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlot.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlot.kt
@@ -252,7 +252,7 @@
  * min(boundingRect.width, boundingRect.height).
  */
 @ComplicationExperimental
-public class BoundingArc(var startAngle: Float, var totalAngle: Float, @Px var thickness: Float) {
+public class BoundingArc(val startAngle: Float, val totalAngle: Float, @Px val thickness: Float) {
     /**
      * Detects whether the supplied point falls within the edge complication's arc.
      *
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/XmlSchemaAndComplicationSlotsDefinition.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/XmlSchemaAndComplicationSlotsDefinition.kt
index c7740d6..a8e1279 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/XmlSchemaAndComplicationSlotsDefinition.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/XmlSchemaAndComplicationSlotsDefinition.kt
@@ -31,6 +31,7 @@
 import androidx.wear.watchface.style.UserStyleFlavors
 import androidx.wear.watchface.style.UserStyleSchema
 import androidx.wear.watchface.style.getIntRefAttribute
+import androidx.wear.watchface.style.getStringRefAttribute
 import androidx.wear.watchface.style.moveToStart
 import org.xmlpull.v1.XmlPullParser
 import kotlin.jvm.Throws
@@ -173,7 +174,10 @@
                     "A ComplicationSlot must have a supportedTypes attribute"
                 }
                 val supportedTypes =
-                    parser.getAttributeValue(NAMESPACE_APP, "supportedTypes").split('|')
+                    getStringRefAttribute(resources, parser, "supportedTypes")
+                        ?.split('|') ?: throw IllegalArgumentException(
+                        "Unable to extract the supported type(s) for ComplicationSlot $slotId"
+                    )
                 val supportedTypesList = supportedTypes.map {
                     typesMap[it] ?: throw IllegalArgumentException(
                         "Unrecognised type $it for ComplicationSlot $slotId"
diff --git a/wear/watchface/watchface/src/main/res/values/config.xml b/wear/watchface/watchface/src/main/res/values/config.xml
index 6c89272..a313773 100644
--- a/wear/watchface/watchface/src/main/res/values/config.xml
+++ b/wear/watchface/watchface/src/main/res/values/config.xml
@@ -17,5 +17,5 @@
 
 <resources>
     <bool name="watch_face_instance_service_enabled">false</bool>
-    <integer name="watch_face_xml_version">5</integer>
+    <integer name="watch_face_xml_version">6</integer>
 </resources>
diff --git a/wear/wear-input/src/main/java/androidx/wear/input/RemoteInputIntentHelper.kt b/wear/wear-input/src/main/java/androidx/wear/input/RemoteInputIntentHelper.kt
index 4d8d6fc..87ded0e 100644
--- a/wear/wear-input/src/main/java/androidx/wear/input/RemoteInputIntentHelper.kt
+++ b/wear/wear-input/src/main/java/androidx/wear/input/RemoteInputIntentHelper.kt
@@ -100,6 +100,7 @@
          * @return The array of [RemoteInput] previously added with [putRemoteInputsExtra] or null
          * which means no user input required.
          */
+        @Suppress("DEPRECATION")
         @JvmStatic
         @Nullable
         public fun getRemoteInputsExtra(intent: Intent): List<RemoteInput>? =
diff --git a/wear/wear-ongoing/api/current.txt b/wear/wear-ongoing/api/current.txt
index 790fe3b..274d7b7 100644
--- a/wear/wear-ongoing/api/current.txt
+++ b/wear/wear-ongoing/api/current.txt
@@ -18,7 +18,7 @@
     method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, java.util.function.Predicate<androidx.wear.ongoing.OngoingActivity!>);
     method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context);
     method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, int);
-    method public void update(android.content.Context, androidx.wear.ongoing.Status);
+    method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void update(android.content.Context, androidx.wear.ongoing.Status);
   }
 
   public static final class OngoingActivity.Builder {
diff --git a/wear/wear-ongoing/api/public_plus_experimental_current.txt b/wear/wear-ongoing/api/public_plus_experimental_current.txt
index 790fe3b..274d7b7 100644
--- a/wear/wear-ongoing/api/public_plus_experimental_current.txt
+++ b/wear/wear-ongoing/api/public_plus_experimental_current.txt
@@ -18,7 +18,7 @@
     method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, java.util.function.Predicate<androidx.wear.ongoing.OngoingActivity!>);
     method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context);
     method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, int);
-    method public void update(android.content.Context, androidx.wear.ongoing.Status);
+    method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void update(android.content.Context, androidx.wear.ongoing.Status);
   }
 
   public static final class OngoingActivity.Builder {
diff --git a/wear/wear-ongoing/api/restricted_current.txt b/wear/wear-ongoing/api/restricted_current.txt
index 790fe3b..274d7b7 100644
--- a/wear/wear-ongoing/api/restricted_current.txt
+++ b/wear/wear-ongoing/api/restricted_current.txt
@@ -18,7 +18,7 @@
     method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, java.util.function.Predicate<androidx.wear.ongoing.OngoingActivity!>);
     method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context);
     method public static androidx.wear.ongoing.OngoingActivity? recoverOngoingActivity(android.content.Context, int);
-    method public void update(android.content.Context, androidx.wear.ongoing.Status);
+    method @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public void update(android.content.Context, androidx.wear.ongoing.Status);
   }
 
   public static final class OngoingActivity.Builder {
diff --git a/wear/wear-ongoing/src/main/java/androidx/wear/ongoing/OngoingActivity.java b/wear/wear-ongoing/src/main/java/androidx/wear/ongoing/OngoingActivity.java
index a15ff4b..3793dd6 100644
--- a/wear/wear-ongoing/src/main/java/androidx/wear/ongoing/OngoingActivity.java
+++ b/wear/wear-ongoing/src/main/java/androidx/wear/ongoing/OngoingActivity.java
@@ -15,6 +15,7 @@
  */
 package androidx.wear.ongoing;
 
+import android.Manifest;
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
@@ -28,6 +29,7 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
 import androidx.core.app.NotificationCompat;
 import androidx.core.content.LocusIdCompat;
 import androidx.core.util.Preconditions;
@@ -484,6 +486,7 @@
      *                this call returns.
      * @param status  The new status of this Ongoing Activity.
      */
+    @RequiresPermission(Manifest.permission.POST_NOTIFICATIONS)
     public void update(@NonNull Context context, @NonNull Status status) {
         Preconditions.checkNotNull(mNotificationBuilder);
         mData.setStatus(status.toVersionedParcelable());
diff --git a/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/RemoteActivityHelper.kt b/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/RemoteActivityHelper.kt
index 47c4577..3c9f8ba 100644
--- a/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/RemoteActivityHelper.kt
+++ b/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/RemoteActivityHelper.kt
@@ -97,6 +97,7 @@
          * @param intent The intent holding configuration.
          * @return The remote intent, or null if none was set.
          */
+        @Suppress("DEPRECATION")
         @JvmStatic
         public fun getTargetIntent(intent: Intent): Intent? =
             intent.getParcelableExtra(EXTRA_INTENT)
@@ -117,6 +118,7 @@
          * @param intent The intent holding configuration.
          * @return The result receiver, or null if none was set.
          */
+        @Suppress("DEPRECATION")
         @JvmStatic
         internal fun getRemoteIntentResultReceiver(intent: Intent): ResultReceiver? =
             intent.getParcelableExtra(EXTRA_RESULT_RECEIVER)
diff --git a/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/WatchFaceConfigIntentHelper.kt b/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/WatchFaceConfigIntentHelper.kt
index 99aa404..54eefab 100644
--- a/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/WatchFaceConfigIntentHelper.kt
+++ b/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/WatchFaceConfigIntentHelper.kt
@@ -85,6 +85,7 @@
          * @return the value of an item previously added with [putWatchFaceComponentExtra], or
          * null if no value was found.
          */
+        @Suppress("DEPRECATION")
         @JvmStatic
         @Nullable
         public fun getWatchFaceComponentExtra(watchFaceIntent: Intent): ComponentName? =
diff --git a/wear/wear/lint-baseline.xml b/wear/wear/lint-baseline.xml
index 3aea4c8..c284cd2 100644
--- a/wear/wear/lint-baseline.xml
+++ b/wear/wear/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (7.1.0-beta02)" variant="all" version="7.1.0-beta02">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="KotlinPropertyAccess"
@@ -78,88 +78,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        AmbientCallback getAmbientCallback();"
-        errorLine2="        ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/ambient/AmbientMode.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        public void onEnterAmbient(Bundle ambientDetails) {}"
-        errorLine2="                                   ~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/ambient/AmbientMode.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onAttach(Context context) {"
-        errorLine2="                         ~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/ambient/AmbientMode.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void onCreate(Bundle savedInstanceState) {"
-        errorLine2="                         ~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/ambient/AmbientMode.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public static &lt;T extends Activity> AmbientController attachAmbientSupport(T activity) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/ambient/AmbientMode.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {"
-        errorLine2="                     ~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/ambient/AmbientMode.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/ambient/AmbientMode.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {"
-        errorLine2="                                                       ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/ambient/AmbientMode.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {"
-        errorLine2="                                                                           ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/ambient/AmbientMode.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        AmbientCallback getAmbientCallback();"
         errorLine2="        ~~~~~~~~~~~~~~~">
         <location
@@ -168,7 +87,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onEnterAmbient(Bundle ambientDetails) {}"
         errorLine2="                                   ~~~~~~">
         <location
@@ -177,7 +96,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onAttach(Context context) {"
         errorLine2="                         ~~~~~~~">
         <location
@@ -186,7 +105,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
@@ -195,7 +114,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static &lt;T extends FragmentActivity> AmbientController attach(T activity) {"
         errorLine2="                                               ~~~~~~~~~~~~~~~~~">
         <location
@@ -204,7 +123,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {"
         errorLine2="                     ~~~~~~">
         <location
@@ -213,7 +132,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {"
         errorLine2="                                    ~~~~~~~~~~~~~~">
         <location
@@ -222,7 +141,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {"
         errorLine2="                                                       ~~~~~~~~~~~">
         <location
@@ -231,7 +150,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {"
         errorLine2="                                                                           ~~~~~~~~">
         <location
@@ -240,61 +159,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setForeground(Drawable drawable) {"
-        errorLine2="                              ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public LayoutParams generateLayoutParams(AttributeSet attrs) {"
-        errorLine2="                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
-        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircledImageView(Context context) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -303,7 +168,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircledImageView(Context context, AttributeSet attrs) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -312,7 +177,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircledImageView(Context context, AttributeSet attrs) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
@@ -321,7 +186,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircledImageView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                            ~~~~~~~">
         <location
@@ -330,7 +195,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircledImageView(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
@@ -339,16 +204,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onDraw(Canvas canvas) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ColorStateList getCircleColorStateList() {"
         errorLine2="           ~~~~~~~~~~~~~~">
         <location
@@ -357,7 +213,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCircleColorStateList(ColorStateList circleColor) {"
         errorLine2="                                        ~~~~~~~~~~~~~~">
         <location
@@ -366,7 +222,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onVisibilityChanged(View changedView, int visibility) {"
         errorLine2="                                       ~~~~">
         <location
@@ -375,7 +231,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setCircleBorderCap(Paint.Cap circleBorderCap) {"
         errorLine2="                                   ~~~~~~~~~">
         <location
@@ -384,7 +240,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Drawable getImageDrawable() {"
         errorLine2="           ~~~~~~~~">
         <location
@@ -393,7 +249,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setImageDrawable(Drawable drawable) {"
         errorLine2="                                 ~~~~~~~~">
         <location
@@ -402,7 +258,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void onTimerFinished(CircularProgressLayout layout);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -411,7 +267,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircularProgressLayout(Context context) {"
         errorLine2="                                  ~~~~~~~">
         <location
@@ -420,7 +276,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                  ~~~~~~~">
         <location
@@ -429,7 +285,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
@@ -438,7 +294,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                  ~~~~~~~">
         <location
@@ -447,7 +303,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
@@ -456,7 +312,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                  ~~~~~~~">
         <location
@@ -465,7 +321,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
@@ -474,7 +330,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setColorSchemeColors(int... colors) {"
         errorLine2="                                     ~~~~~~">
         <location
@@ -483,7 +339,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public int[] getColorSchemeColors() {"
         errorLine2="           ~~~~~">
         <location
@@ -492,7 +348,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
         errorLine2="                         ~~~~~~">
         <location
@@ -501,7 +357,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public CurvingLayoutCallback(Context context) {"
         errorLine2="                                 ~~~~~~~">
         <location
@@ -510,7 +366,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onLayoutFinished(View child, RecyclerView parent) {"
         errorLine2="                                 ~~~~">
         <location
@@ -519,7 +375,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onLayoutFinished(View child, RecyclerView parent) {"
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
@@ -528,7 +384,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void adjustAnchorOffsetXY(View child, float[] anchorOffsetXY) {"
         errorLine2="                                     ~~~~">
         <location
@@ -537,7 +393,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void adjustAnchorOffsetXY(View child, float[] anchorOffsetXY) {"
         errorLine2="                                                 ~~~~~~~">
         <location
@@ -546,7 +402,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static boolean isStandalone(Context context) {"
         errorLine2="                                       ~~~~~~~">
         <location
@@ -555,7 +411,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static boolean isNotificationBridgingEnabled(Context context) {"
         errorLine2="                                                        ~~~~~~~">
         <location
@@ -564,7 +420,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static int getPreviewDrawableResourceId(Context context, boolean circular) {"
         errorLine2="                                                   ~~~~~~~">
         <location
@@ -573,7 +429,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void initialize(WearableNavigationDrawerView drawer,"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -582,7 +438,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="                WearableNavigationDrawerPresenter presenter);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -591,7 +447,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void setNavigationPagerAdapter(WearableNavigationDrawerAdapter adapter);"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -600,7 +456,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MultiPagePresenter(WearableNavigationDrawerView drawer, Ui ui,"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -609,7 +465,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public MultiPagePresenter(WearableNavigationDrawerView drawer, Ui ui,"
         errorLine2="                                                                   ~~">
         <location
@@ -618,7 +474,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onNewAdapter(WearableNavigationDrawerAdapter adapter) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -627,7 +483,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            WearableNavigationDrawerView drawer, WearableNavigationDrawerPresenter presenter) {"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -636,7 +492,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            WearableNavigationDrawerView drawer, WearableNavigationDrawerPresenter presenter) {"
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -645,7 +501,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setNavigationPagerAdapter(final WearableNavigationDrawerAdapter adapter) {"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -654,7 +510,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PageIndicatorView(Context context) {"
         errorLine2="                             ~~~~~~~">
         <location
@@ -663,7 +519,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PageIndicatorView(Context context, AttributeSet attrs) {"
         errorLine2="                             ~~~~~~~">
         <location
@@ -672,7 +528,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PageIndicatorView(Context context, AttributeSet attrs) {"
         errorLine2="                                              ~~~~~~~~~~~~">
         <location
@@ -681,7 +537,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PageIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                             ~~~~~~~">
         <location
@@ -690,7 +546,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public PageIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                              ~~~~~~~~~~~~">
         <location
@@ -699,7 +555,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPager(ViewPager pager) {"
         errorLine2="                         ~~~~~~~~~">
         <location
@@ -708,7 +564,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setDotFadeOutDuration(int duration, TimeUnit unit) {"
         errorLine2="                                                    ~~~~~~~~">
         <location
@@ -717,7 +573,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setDotFadeInDuration(int duration, TimeUnit unit) {"
         errorLine2="                                                   ~~~~~~~~">
         <location
@@ -726,7 +582,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPagerAdapter(PagerAdapter adapter) {"
         errorLine2="                                ~~~~~~~~~~~~">
         <location
@@ -735,16 +591,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    protected void onDraw(Canvas canvas) {"
-        errorLine2="                          ~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static int getScreenWidthPx(Context context) {"
         errorLine2="                                       ~~~~~~~">
         <location
@@ -753,7 +600,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static int getScreenHeightPx(Context context) {"
         errorLine2="                                        ~~~~~~~">
         <location
@@ -762,7 +609,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public static int getFractionOfScreenPx(Context context, int screenPx, @FractionRes int resId) {"
         errorLine2="                                            ~~~~~~~">
         <location
@@ -771,7 +618,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onBoundsChange(Rect bounds) {"
         errorLine2="                                  ~~~~">
         <location
@@ -780,16 +627,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setColorFilter(ColorFilter cf) {"
-        errorLine2="                               ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/RoundedDrawable.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onAnimationCancel(Animator animator) {"
         errorLine2="                                  ~~~~~~~~">
         <location
@@ -798,7 +636,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onAnimationEnd(Animator animator) {"
         errorLine2="                               ~~~~~~~~">
         <location
@@ -807,7 +645,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onAnimationRepeat(Animator animator) {}"
         errorLine2="                                  ~~~~~~~~">
         <location
@@ -816,7 +654,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onAnimationStart(Animator animator) {"
         errorLine2="                                 ~~~~~~~~">
         <location
@@ -825,7 +663,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onAnimationComplete(Animator animator) {}"
         errorLine2="                                    ~~~~~~~~">
         <location
@@ -834,7 +672,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void setPresenter(WearableNavigationDrawerPresenter presenter);"
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -843,7 +681,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void setIcon(int index, Drawable drawable, CharSequence contentDescription);"
         errorLine2="                                ~~~~~~~~">
         <location
@@ -852,7 +690,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void setIcon(int index, Drawable drawable, CharSequence contentDescription);"
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
@@ -861,7 +699,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        void setText(CharSequence itemText, boolean showToastIfNoTextView);"
         errorLine2="                     ~~~~~~~~~~~~">
         <location
@@ -870,7 +708,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SinglePagePresenter(Ui ui, boolean isAccessibilityEnabled) {"
         errorLine2="                               ~~">
         <location
@@ -879,7 +717,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onNewAdapter(WearableNavigationDrawerAdapter adapter) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -888,7 +726,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SinglePageUi(WearableNavigationDrawerView navigationDrawer) {"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -897,7 +735,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPresenter(WearableNavigationDrawerPresenter presenter) {"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -906,7 +744,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setIcon(int index, Drawable drawable, CharSequence contentDescription) {"
         errorLine2="                                   ~~~~~~~~">
         <location
@@ -915,7 +753,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setIcon(int index, Drawable drawable, CharSequence contentDescription) {"
         errorLine2="                                                      ~~~~~~~~~~~~">
         <location
@@ -924,7 +762,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setText(CharSequence itemText, boolean showToastIfNoTextView) {"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
@@ -933,7 +771,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onSwipeStarted(SwipeDismissFrameLayout layout) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -942,7 +780,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onSwipeCanceled(SwipeDismissFrameLayout layout) {"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -951,7 +789,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onDismissed(SwipeDismissFrameLayout layout) {"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -960,7 +798,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SwipeDismissFrameLayout(Context context) {"
         errorLine2="                                   ~~~~~~~">
         <location
@@ -969,7 +807,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                   ~~~~~~~">
         <location
@@ -978,7 +816,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
@@ -987,7 +825,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                   ~~~~~~~">
         <location
@@ -996,7 +834,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
@@ -1005,7 +843,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle,"
         errorLine2="                                   ~~~~~~~">
         <location
@@ -1014,7 +852,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle,"
         errorLine2="                                                    ~~~~~~~~~~~~">
         <location
@@ -1023,7 +861,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addCallback(Callback callback) {"
         errorLine2="                            ~~~~~~~~">
         <location
@@ -1032,7 +870,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void removeCallback(Callback callback) {"
         errorLine2="                               ~~~~~~~~">
         <location
@@ -1041,7 +879,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setTitle(CharSequence title) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1050,7 +888,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setTitle(CharSequence title) {"
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
@@ -1059,7 +897,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setTitle(int title) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1068,7 +906,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence getTitle() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -1077,7 +915,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setIcon(Drawable icon) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1086,7 +924,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setIcon(Drawable icon) {"
         errorLine2="                                ~~~~~~~~">
         <location
@@ -1095,7 +933,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setIcon(int iconRes) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1104,7 +942,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Drawable getIcon() {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1113,7 +951,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1122,7 +960,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1131,7 +969,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1140,7 +978,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setTitleCondensed(CharSequence title) {"
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
@@ -1149,7 +987,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public CharSequence getTitleCondensed() {"
         errorLine2="               ~~~~~~~~~~~~">
         <location
@@ -1158,7 +996,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setIntent(Intent intent) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1167,7 +1005,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setIntent(Intent intent) {"
         errorLine2="                                  ~~~~~~">
         <location
@@ -1176,7 +1014,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Intent getIntent() {"
         errorLine2="               ~~~~~~">
         <location
@@ -1185,7 +1023,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setShortcut(char numericChar, char alphaChar) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1194,7 +1032,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setNumericShortcut(char numericChar) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1203,7 +1041,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setAlphabeticShortcut(char alphaChar) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1212,7 +1050,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setCheckable(boolean checkable) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1221,7 +1059,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setChecked(boolean checked) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1230,7 +1068,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setVisible(boolean visible) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1239,7 +1077,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setEnabled(boolean enabled) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1248,7 +1086,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public SubMenu getSubMenu() {"
         errorLine2="               ~~~~~~~">
         <location
@@ -1257,7 +1095,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ContextMenu.ContextMenuInfo getMenuInfo() {"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1266,7 +1104,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setShowAsActionFlags(int actionEnum) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1275,7 +1113,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setActionView(View view) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1284,7 +1122,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setActionView(View view) {"
         errorLine2="                                      ~~~~">
         <location
@@ -1293,7 +1131,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setActionView(int resId) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1302,7 +1140,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public View getActionView() {"
         errorLine2="               ~~~~">
         <location
@@ -1311,7 +1149,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setActionProvider(ActionProvider actionProvider) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1320,7 +1158,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setActionProvider(ActionProvider actionProvider) {"
         errorLine2="                                          ~~~~~~~~~~~~~~">
         <location
@@ -1329,7 +1167,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public ActionProvider getActionProvider() {"
         errorLine2="               ~~~~~~~~~~~~~~">
         <location
@@ -1338,7 +1176,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setOnActionExpandListener(OnActionExpandListener listener) {"
         errorLine2="               ~~~~~~~~">
         <location
@@ -1347,7 +1185,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public MenuItem setOnActionExpandListener(OnActionExpandListener listener) {"
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1356,7 +1194,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableActionDrawerView(Context context) {"
         errorLine2="                                    ~~~~~~~">
         <location
@@ -1365,7 +1203,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableActionDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                                    ~~~~~~~">
         <location
@@ -1374,7 +1212,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableActionDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
@@ -1383,7 +1221,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableActionDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                    ~~~~~~~">
         <location
@@ -1392,7 +1230,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableActionDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                                     ~~~~~~~~~~~~">
         <location
@@ -1401,7 +1239,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="            ~~~~~~~">
         <location
@@ -1410,7 +1248,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
@@ -1419,7 +1257,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onPeekContainerClicked(View v) {"
         errorLine2="                                       ~~~~">
         <location
@@ -1428,7 +1266,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1437,7 +1275,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public Menu getMenu() {"
         errorLine2="           ~~~~">
         <location
@@ -1446,7 +1284,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableActivityController getWearableController(Activity activity,"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1455,7 +1293,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableActivityController getWearableController(Activity activity,"
         errorLine2="                                                            ~~~~~~~~">
         <location
@@ -1464,7 +1302,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            final AmbientDelegate.AmbientCallback callback) {"
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1473,7 +1311,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableDrawerLayout(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -1482,7 +1320,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableDrawerLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -1491,7 +1329,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableDrawerLayout(Context context, AttributeSet attrs) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
@@ -1500,7 +1338,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableDrawerLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -1509,7 +1347,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableDrawerLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
@@ -1518,7 +1356,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="            ~~~~~~~">
         <location
@@ -1527,7 +1365,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
@@ -1536,70 +1374,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public WindowInsets onApplyWindowInsets(WindowInsets insets) {"
-        errorLine2="           ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public WindowInsets onApplyWindowInsets(WindowInsets insets) {"
-        errorLine2="                                            ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onInterceptTouchEvent(MotionEvent ev) {"
-        errorLine2="                                         ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent ev) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
-        errorLine2="                        ~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            View v,"
-        errorLine2="            ~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setDrawerStateCallback(DrawerStateCallback callback) {"
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1608,7 +1383,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onFlingComplete(View view) {"
         errorLine2="                                ~~~~">
         <location
@@ -1617,7 +1392,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onDrawerOpened(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1626,7 +1401,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onDrawerOpened(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
         errorLine2="                                                                ~~~~~~~~~~~~~~~~~~">
         <location
@@ -1635,7 +1410,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onDrawerClosed(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1644,7 +1419,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onDrawerClosed(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
         errorLine2="                                                                ~~~~~~~~~~~~~~~~~~">
         <location
@@ -1653,7 +1428,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void onDrawerStateChanged(WearableDrawerLayout layout, @DrawerState int newState) {"
         errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1662,7 +1437,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableDrawerView(Context context) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -1671,7 +1446,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -1680,7 +1455,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
@@ -1689,7 +1464,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                              ~~~~~~~">
         <location
@@ -1698,7 +1473,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                               ~~~~~~~~~~~~">
         <location
@@ -1707,7 +1482,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="            ~~~~~~~">
         <location
@@ -1716,7 +1491,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
         errorLine2="                             ~~~~~~~~~~~~">
         <location
@@ -1725,7 +1500,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onPeekContainerClicked(View v) {"
         errorLine2="                                       ~~~~">
         <location
@@ -1734,25 +1509,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
-        errorLine2="                        ~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void addView(View child, int index, ViewGroup.LayoutParams params) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setPeekContent(View content) {"
         errorLine2="                               ~~~~">
         <location
@@ -1761,7 +1518,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableDrawerController getController() {"
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1770,7 +1527,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract void onLayoutFinished(View child, RecyclerView parent);"
         errorLine2="                                              ~~~~">
         <location
@@ -1779,7 +1536,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract void onLayoutFinished(View child, RecyclerView parent);"
         errorLine2="                                                          ~~~~~~~~~~~~">
         <location
@@ -1788,7 +1545,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableLinearLayoutManager(Context context, LayoutCallback layoutCallback) {"
         errorLine2="                                       ~~~~~~~">
         <location
@@ -1797,7 +1554,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableLinearLayoutManager(Context context, LayoutCallback layoutCallback) {"
         errorLine2="                                                        ~~~~~~~~~~~~~~">
         <location
@@ -1806,7 +1563,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableLinearLayoutManager(Context context) {"
         errorLine2="                                       ~~~~~~~">
         <location
@@ -1815,7 +1572,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1824,7 +1581,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="            int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~">
         <location
@@ -1833,7 +1590,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1842,7 +1599,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
         errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
         <location
@@ -1851,7 +1608,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public abstract void onNewAdapter(WearableNavigationDrawerAdapter adapter);"
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1860,7 +1617,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemSelectedListenerAdded(OnItemSelectedListener listener) {"
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1869,7 +1626,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onItemSelectedListenerRemoved(OnItemSelectedListener listener) {"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1878,7 +1635,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableNavigationDrawerView(Context context) {"
         errorLine2="                                        ~~~~~~~">
         <location
@@ -1887,7 +1644,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                                        ~~~~~~~">
         <location
@@ -1896,7 +1653,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs) {"
         errorLine2="                                                         ~~~~~~~~~~~~">
         <location
@@ -1905,7 +1662,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                        ~~~~~~~">
         <location
@@ -1914,7 +1671,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
         errorLine2="                                                         ~~~~~~~~~~~~">
         <location
@@ -1923,7 +1680,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                        ~~~~~~~">
         <location
@@ -1932,7 +1689,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr,"
         errorLine2="                                                         ~~~~~~~~~~~~">
         <location
@@ -1941,7 +1698,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setAdapter(final WearableNavigationDrawerAdapter adapter) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1950,7 +1707,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void addOnItemSelectedListener(OnItemSelectedListener listener) {"
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1959,7 +1716,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void removeOnItemSelectedListener(OnItemSelectedListener listener) {"
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1968,16 +1725,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onInterceptTouchEvent(MotionEvent ev) {"
-        errorLine2="                                         ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract CharSequence getItemText(int pos);"
         errorLine2="                        ~~~~~~~~~~~~">
         <location
@@ -1986,7 +1734,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public abstract Drawable getItemDrawable(int pos);"
         errorLine2="                        ~~~~~~~~">
         <location
@@ -1995,7 +1743,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public void setPresenter(WearableNavigationDrawerPresenter presenter) {"
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2004,7 +1752,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableRecyclerView(Context context) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -2013,7 +1761,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableRecyclerView(Context context, @Nullable AttributeSet attrs) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -2022,7 +1770,7 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {"
         errorLine2="                                ~~~~~~~">
         <location
@@ -2031,29 +1779,11 @@
 
     <issue
         id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public WearableRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle,"
         errorLine2="                                ~~~~~~~">
         <location
             file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
     </issue>
 
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onTouchEvent(MotionEvent event) {"
-        errorLine2="                                ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
-    </issue>
-
-    <issue
-        id="NullabilityAnnotationsDetector"
-        message="Use @androidx.annotation.NonNull instead of @org.jetbrains.annotations.NotNull"
-        errorLine1="    void disable(@NotNull DismissibleFrameLayout layout) {"
-        errorLine2="                 ~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/widget/BackButtonDismissController.java"/>
-    </issue>
-
 </issues>
diff --git a/webkit/webkit/lint-baseline.xml b/webkit/webkit/lint-baseline.xml
index fbb2079..18b21f2 100644
--- a/webkit/webkit/lint-baseline.xml
+++ b/webkit/webkit/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="NewApi"
diff --git a/window/extensions/extensions/api/current.txt b/window/extensions/extensions/api/current.txt
index 8425531..22679ee 100644
--- a/window/extensions/extensions/api/current.txt
+++ b/window/extensions/extensions/api/current.txt
@@ -4,6 +4,7 @@
   public interface WindowExtensions {
     method public default androidx.window.extensions.embedding.ActivityEmbeddingComponent? getActivityEmbeddingComponent();
     method public default int getVendorApiLevel();
+    method public default androidx.window.extensions.area.WindowAreaComponent? getWindowAreaComponent();
     method public androidx.window.extensions.layout.WindowLayoutComponent? getWindowLayoutComponent();
   }
 
@@ -13,6 +14,22 @@
 
 }
 
+package androidx.window.extensions.area {
+
+  public interface WindowAreaComponent {
+    method public void addRearDisplayStatusListener(java.util.function.Consumer<java.lang.Integer!>);
+    method public void endRearDisplaySession();
+    method public void removeRearDisplayStatusListener(java.util.function.Consumer<java.lang.Integer!>);
+    method public void startRearDisplaySession(android.app.Activity, java.util.function.Consumer<java.lang.Integer!>);
+    field public static final int SESSION_STATE_ACTIVE = 1; // 0x1
+    field public static final int SESSION_STATE_INACTIVE = 0; // 0x0
+    field public static final int STATUS_AVAILABLE = 2; // 0x2
+    field public static final int STATUS_UNAVAILABLE = 1; // 0x1
+    field public static final int STATUS_UNSUPPORTED = 0; // 0x0
+  }
+
+}
+
 package androidx.window.extensions.embedding {
 
   public interface ActivityEmbeddingComponent {
diff --git a/window/extensions/extensions/api/public_plus_experimental_current.txt b/window/extensions/extensions/api/public_plus_experimental_current.txt
index 8425531..22679ee 100644
--- a/window/extensions/extensions/api/public_plus_experimental_current.txt
+++ b/window/extensions/extensions/api/public_plus_experimental_current.txt
@@ -4,6 +4,7 @@
   public interface WindowExtensions {
     method public default androidx.window.extensions.embedding.ActivityEmbeddingComponent? getActivityEmbeddingComponent();
     method public default int getVendorApiLevel();
+    method public default androidx.window.extensions.area.WindowAreaComponent? getWindowAreaComponent();
     method public androidx.window.extensions.layout.WindowLayoutComponent? getWindowLayoutComponent();
   }
 
@@ -13,6 +14,22 @@
 
 }
 
+package androidx.window.extensions.area {
+
+  public interface WindowAreaComponent {
+    method public void addRearDisplayStatusListener(java.util.function.Consumer<java.lang.Integer!>);
+    method public void endRearDisplaySession();
+    method public void removeRearDisplayStatusListener(java.util.function.Consumer<java.lang.Integer!>);
+    method public void startRearDisplaySession(android.app.Activity, java.util.function.Consumer<java.lang.Integer!>);
+    field public static final int SESSION_STATE_ACTIVE = 1; // 0x1
+    field public static final int SESSION_STATE_INACTIVE = 0; // 0x0
+    field public static final int STATUS_AVAILABLE = 2; // 0x2
+    field public static final int STATUS_UNAVAILABLE = 1; // 0x1
+    field public static final int STATUS_UNSUPPORTED = 0; // 0x0
+  }
+
+}
+
 package androidx.window.extensions.embedding {
 
   public interface ActivityEmbeddingComponent {
diff --git a/window/extensions/extensions/api/restricted_current.txt b/window/extensions/extensions/api/restricted_current.txt
index 8425531..22679ee 100644
--- a/window/extensions/extensions/api/restricted_current.txt
+++ b/window/extensions/extensions/api/restricted_current.txt
@@ -4,6 +4,7 @@
   public interface WindowExtensions {
     method public default androidx.window.extensions.embedding.ActivityEmbeddingComponent? getActivityEmbeddingComponent();
     method public default int getVendorApiLevel();
+    method public default androidx.window.extensions.area.WindowAreaComponent? getWindowAreaComponent();
     method public androidx.window.extensions.layout.WindowLayoutComponent? getWindowLayoutComponent();
   }
 
@@ -13,6 +14,22 @@
 
 }
 
+package androidx.window.extensions.area {
+
+  public interface WindowAreaComponent {
+    method public void addRearDisplayStatusListener(java.util.function.Consumer<java.lang.Integer!>);
+    method public void endRearDisplaySession();
+    method public void removeRearDisplayStatusListener(java.util.function.Consumer<java.lang.Integer!>);
+    method public void startRearDisplaySession(android.app.Activity, java.util.function.Consumer<java.lang.Integer!>);
+    field public static final int SESSION_STATE_ACTIVE = 1; // 0x1
+    field public static final int SESSION_STATE_INACTIVE = 0; // 0x0
+    field public static final int STATUS_AVAILABLE = 2; // 0x2
+    field public static final int STATUS_UNAVAILABLE = 1; // 0x1
+    field public static final int STATUS_UNSUPPORTED = 0; // 0x0
+  }
+
+}
+
 package androidx.window.extensions.embedding {
 
   public interface ActivityEmbeddingComponent {
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
index c1a9bd8..3425bd2 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
@@ -17,6 +17,7 @@
 package androidx.window.extensions;
 
 import androidx.annotation.Nullable;
+import androidx.window.extensions.area.WindowAreaComponent;
 import androidx.window.extensions.embedding.ActivityEmbeddingComponent;
 import androidx.window.extensions.layout.WindowLayoutComponent;
 
@@ -61,4 +62,15 @@
     default ActivityEmbeddingComponent getActivityEmbeddingComponent() {
         return null;
     }
+
+    /**
+     * Returns the OEM implementation of {@link WindowAreaComponent} if it is supported on
+     * the device, {@code null} otherwise. The implementation must match the API level reported in
+     * {@link WindowExtensions}.
+     * @return the OEM implementation of {@link WindowAreaComponent}
+     */
+    @Nullable
+    default WindowAreaComponent getWindowAreaComponent() {
+        return null;
+    }
 }
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/area/WindowAreaComponent.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/area/WindowAreaComponent.java
new file mode 100644
index 0000000..a85e35d
--- /dev/null
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/area/WindowAreaComponent.java
@@ -0,0 +1,145 @@
+/*
+ * 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.window.extensions.area;
+
+import android.app.Activity;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.window.extensions.WindowExtensions;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.function.Consumer;
+
+/**
+ * The interface definition that will be used by the WindowManager library to get custom
+ * OEM-provided behavior around moving windows between displays or display areas on a device.
+ *
+ * Currently the only behavior supported is RearDisplay Mode, where the window
+ * is moved to the display that faces the same direction as the rear camera.
+ *
+ * <p>This interface should be implemented by OEM and deployed to the target devices.
+ * @see WindowExtensions#getWindowLayoutComponent()
+ */
+public interface WindowAreaComponent {
+
+    /**
+     * WindowArea status constant to signify that the feature is
+     * unsupported on this device. Could be due to the device not supporting that
+     * specific feature.
+     */
+    int STATUS_UNSUPPORTED = 0;
+
+    /**
+     * WindowArea status constant to signify that the feature is
+     * currently unavailable but is supported on this device. This value could signify
+     * that the current device state does not support the specific feature or another
+     * process is currently enabled in that feature.
+     */
+    int STATUS_UNAVAILABLE = 1;
+
+    /**
+     * WindowArea status constant to signify that the feature is
+     * available to be entered or enabled.
+     */
+    int STATUS_AVAILABLE = 2;
+
+    /** @hide */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({
+            STATUS_UNSUPPORTED,
+            STATUS_UNAVAILABLE,
+            STATUS_AVAILABLE
+    })
+    @interface WindowAreaStatus {}
+
+    /**
+     * Session state constant to represent there being no active session
+     * currently in progress. Used by the library to call the correct callbacks if
+     * a session is ended.
+     */
+    int SESSION_STATE_INACTIVE = 0;
+
+    /**
+     * Session state constant to represent that there is an
+     * active session currently in progress. Used by the library to
+     * know when to return the session object to the developer when the
+     * session is created and active.
+     */
+    int SESSION_STATE_ACTIVE = 1;
+
+    /** @hide */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({
+            SESSION_STATE_ACTIVE,
+            SESSION_STATE_INACTIVE
+    })
+    @interface WindowAreaSessionState {}
+
+    /**
+     * Adds a listener interested in receiving updates on the RearDisplayStatus
+     * of the device. Because this is being called from the OEM provided
+     * extensions, the library will post the result of the listener on the executor
+     * provided by the developer.
+     *
+     * The listener provided will receive values that
+     * correspond to the [WindowAreaStatus] value that aligns with the current status
+     * of the rear display.
+     * @param consumer interested in receiving updates to WindowAreaStatus.
+     */
+    void addRearDisplayStatusListener(@NonNull Consumer<Integer> consumer);
+
+    /**
+     * Removes a listener no longer interested in receiving updates.
+     * @param consumer no longer interested in receiving updates to WindowAreaStatus
+     */
+    void removeRearDisplayStatusListener(@NonNull Consumer<Integer> consumer);
+
+
+    /**
+     * Creates and starts a rear display session and sends state updates to the
+     * consumer provided. This consumer will receive a constant represented by
+     * [WindowAreaSessionState] to represent the state of the current rear display
+     * session. We will translate to a more friendly interface in the library.
+     *
+     * Because this is being called from the OEM provided extensions, the library
+     * will post the result of the listener on the executor provided by the developer.
+     *
+     * @param activity to allow that the OEM implementation will use as a base
+     * context and to identify the source display area of the request.
+     * The reference to the activity instance must not be stored in the OEM
+     * implementation to prevent memory leaks.
+     * @param consumer to provide updates to the client on the status of the session
+     * @throws UnsupportedOperationException if this method is called when RearDisplay
+     * mode is not available. This could be to an incompatible device state or when
+     * another process is currently in this mode.
+     */
+    @SuppressWarnings("ExecutorRegistration") // Jetpack will post it on the app-provided executor.
+    void startRearDisplaySession(@NonNull Activity activity,
+            @NonNull Consumer<Integer> consumer);
+
+    /**
+     * Ends a RearDisplaySession and sends [STATE_INACTIVE] to the consumer
+     * provided in the {@code startRearDisplaySession} method. This method is only
+     * called through the {@code RearDisplaySession} provided to the developer.
+     */
+    void endRearDisplaySession();
+}
diff --git a/window/window-java/api/public_plus_experimental_current.txt b/window/window-java/api/public_plus_experimental_current.txt
index 709904b..a56988b 100644
--- a/window/window-java/api/public_plus_experimental_current.txt
+++ b/window/window-java/api/public_plus_experimental_current.txt
@@ -1,4 +1,15 @@
 // Signature format: 4.0
+package androidx.window.java.area {
+
+  @androidx.window.core.ExperimentalWindowApi public final class WindowAreaControllerJavaAdapter implements androidx.window.area.WindowAreaController {
+    ctor public WindowAreaControllerJavaAdapter(androidx.window.area.WindowAreaController controller);
+    method public void addRearDisplayStatusListener(java.util.concurrent.Executor executor, androidx.core.util.Consumer<androidx.window.area.WindowAreaStatus> consumer);
+    method public void removeRearDisplayStatusListener(androidx.core.util.Consumer<androidx.window.area.WindowAreaStatus> consumer);
+    method public void startRearDisplayModeSession(android.app.Activity activity, java.util.concurrent.Executor executor, androidx.window.area.WindowAreaSessionCallback windowAreaSessionCallback);
+  }
+
+}
+
 package androidx.window.java.layout {
 
   public final class WindowInfoTrackerCallbackAdapter implements androidx.window.layout.WindowInfoTracker {
diff --git a/window/window-java/src/main/java/androidx/window/java/area/WindowAreaControllerJavaAdapter.kt b/window/window-java/src/main/java/androidx/window/java/area/WindowAreaControllerJavaAdapter.kt
new file mode 100644
index 0000000..584445f
--- /dev/null
+++ b/window/window-java/src/main/java/androidx/window/java/area/WindowAreaControllerJavaAdapter.kt
@@ -0,0 +1,125 @@
+/*
+ * 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.window.java.area
+
+import android.app.Activity
+import androidx.core.util.Consumer
+import androidx.window.area.WindowAreaSessionCallback
+import androidx.window.area.WindowAreaStatus
+import androidx.window.area.WindowAreaController
+import androidx.window.core.ExperimentalWindowApi
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.asCoroutineDispatcher
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.launch
+import java.util.concurrent.Executor
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
+
+/**
+ * An adapted interface for [WindowAreaController] that provides the information and
+ * functionality around RearDisplay Mode via a callback shaped API.
+ */
+@ExperimentalWindowApi
+class WindowAreaControllerJavaAdapter(
+    private val controller: WindowAreaController
+) : WindowAreaController by controller {
+
+    /**
+     * A [ReentrantLock] to protect against concurrent access to [consumerToJobMap].
+     */
+    private val lock = ReentrantLock()
+    private val consumerToJobMap = mutableMapOf<Consumer<*>, Job>()
+
+    /**
+     * Registers a listener to consume [WindowAreaStatus] values defined as
+     * [WindowAreaStatus.UNSUPPORTED], [WindowAreaStatus.UNAVAILABLE], and
+     * [WindowAreaStatus.AVAILABLE]. The values provided through this listener should be used
+     * to determine if you are able to enable rear display Mode at that time. You can use these
+     * values to modify your UI to show/hide controls and determine when to enable features
+     * that use rear display Mode. You should only try and enter rear display mode when your
+     * [consumer] is provided a value of [WindowAreaStatus.AVAILABLE].
+     *
+     * The [consumer] will be provided an initial value on registration, as well as any change
+     * to the status as they occur. This could happen due to hardware device state changes, or if
+     * another process has enabled RearDisplay Mode.
+     *
+     * @see WindowAreaController.rearDisplayStatus
+     */
+    fun addRearDisplayStatusListener(
+        executor: Executor,
+        consumer: Consumer<WindowAreaStatus>
+    ) {
+        val statusFlow = controller.rearDisplayStatus()
+        lock.withLock {
+            if (consumerToJobMap[consumer] == null) {
+                val scope = CoroutineScope(executor.asCoroutineDispatcher())
+                consumerToJobMap[consumer] = scope.launch {
+                    statusFlow.collect { consumer.accept(it) }
+                }
+            }
+        }
+    }
+
+    /**
+     * Removes a listener of [WindowAreaStatus] values
+     * @see WindowAreaController.rearDisplayStatus
+     */
+    fun removeRearDisplayStatusListener(consumer: Consumer<WindowAreaStatus>) {
+        lock.withLock {
+            consumerToJobMap[consumer]?.cancel()
+            consumerToJobMap.remove(consumer)
+        }
+    }
+
+    /**
+     * Starts a RearDisplay Mode session and provides updates through the
+     * [WindowAreaSessionCallback] provided. Due to the nature of moving your Activity to a
+     * different display, your Activity will likely go through a configuration change. Because of
+     * this, if your Activity does not override configuration changes, this method should be called
+     * from a component that outlives the Activity lifecycle such as a
+     * [androidx.lifecycle.ViewModel]. If your Activity does override
+     * configuration changes, it is safe to call this method inside your Activity.
+     *
+     * This method should only be called if you have received a [WindowAreaStatus.AVAILABLE]
+     * value from the listener provided through the [addRearDisplayStatusListener] method. If
+     * you try and enable RearDisplay mode without it being available, you will receive an
+     * [UnsupportedOperationException].
+     *
+     * The [windowAreaSessionCallback] provided will receive a call to
+     * [WindowAreaSessionCallback.onSessionStarted] after your Activity has been moved to the
+     * display corresponding to this mode. RearDisplay mode will stay active until the session
+     * provided through [WindowAreaSessionCallback.onSessionStarted] is closed, or there is a device
+     * state change that makes RearDisplay mode incompatible such as if the device is closed so the
+     * outer-display is no longer in line with the rear camera. When this occurs,
+     * [WindowAreaSessionCallback.onSessionEnded] is called to notify you the session has been
+     * ended.
+     *
+     * @see addRearDisplayStatusListener
+     * @throws UnsupportedOperationException if you try and start a RearDisplay session when
+     * your [WindowAreaController.rearDisplayStatus] does not return a value of
+     * [WindowAreaStatus.AVAILABLE]
+     */
+    fun startRearDisplayModeSession(
+        activity: Activity,
+        executor: Executor,
+        windowAreaSessionCallback: WindowAreaSessionCallback
+    ) {
+        controller.rearDisplayMode(activity, executor, windowAreaSessionCallback)
+    }
+}
\ No newline at end of file
diff --git a/window/window-samples/build.gradle b/window/window-samples/build.gradle
index 3259f09..0312e03 100644
--- a/window/window-samples/build.gradle
+++ b/window/window-samples/build.gradle
@@ -46,7 +46,7 @@
     implementation "androidx.browser:browser:1.3.0"
     implementation("androidx.startup:startup-runtime:1.1.0")
 
-    implementation(project(":window:window"))
+    implementation(project(":window:window-java"))
     debugImplementation(libs.leakcanary)
 
     androidTestImplementation(libs.testCore)
diff --git a/window/window-samples/lint-baseline.xml b/window/window-samples/lint-baseline.xml
new file mode 100644
index 0000000..1fa304a
--- /dev/null
+++ b/window/window-samples/lint-baseline.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+
+    <issue
+        id="NotificationPermission"
+        message="When targeting Android 13 or higher, posting a permission requires holding the `POST_NOTIFICATIONS` permission (usage from leakcanary.NotificationEventListener)">
+        <location
+            file="$GRADLE_USER_HOME/caches/transforms-3/4366a02f2b10003dc48387e903833c2d/transformed/leakcanary-android-core-2.8.1/jars/classes.jar"/>
+    </issue>
+
+</issues>
diff --git a/window/window-samples/src/main/AndroidManifest.xml b/window/window-samples/src/main/AndroidManifest.xml
index e0fb58b..a93cf53 100644
--- a/window/window-samples/src/main/AndroidManifest.xml
+++ b/window/window-samples/src/main/AndroidManifest.xml
@@ -49,6 +49,16 @@
             android:exported="false"
             android:configChanges="orientation|screenSize|screenLayout|screenSize"
             android:label="@string/window_metrics"/>
+        <activity android:name=".RearDisplayActivityConfigChanges"
+            android:exported="true"
+            android:configChanges=
+                "orientation|screenLayout|screenSize|layoutDirection|smallestScreenSize"
+            android:label="@string/rear_display">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
         <activity
             android:name=".embedding.SplitActivityA"
             android:exported="true"
@@ -182,5 +192,11 @@
             <meta-data  android:name="androidx.window.sample.embedding.ExampleWindowInitializer"
                 android:value="androidx.startup" />
         </provider>
+
+        <!-- The app supports ActivityEmbedding itself, so it doesn't need system override. -->
+        <property
+            android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE"
+            android:value="false" />
+
     </application>
 </manifest>
diff --git a/window/window-samples/src/main/java/androidx/window/sample/RearDisplayActivityConfigChanges.kt b/window/window-samples/src/main/java/androidx/window/sample/RearDisplayActivityConfigChanges.kt
new file mode 100644
index 0000000..f7e839f
--- /dev/null
+++ b/window/window-samples/src/main/java/androidx/window/sample/RearDisplayActivityConfigChanges.kt
@@ -0,0 +1,136 @@
+/*
+ * 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.window.sample
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
+import androidx.core.util.Consumer
+import androidx.window.area.WindowAreaController
+import androidx.window.area.WindowAreaSessionCallback
+import androidx.window.area.WindowAreaSession
+import androidx.window.area.WindowAreaStatus
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.java.area.WindowAreaControllerJavaAdapter
+import androidx.window.sample.databinding.ActivityRearDisplayBinding
+import androidx.window.sample.infolog.InfoLogAdapter
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.Locale
+import java.util.concurrent.Executor
+
+/**
+ * Demo Activity that showcases listening for RearDisplay Status
+ * as well as enabling/disabling RearDisplay mode. This Activity
+ * implements [WindowAreaSessionCallback] for simplicity.
+ *
+ * This Activity overrides configuration changes for simplicity.
+ */
+@OptIn(ExperimentalWindowApi::class)
+class RearDisplayActivityConfigChanges : AppCompatActivity(), WindowAreaSessionCallback {
+
+    private lateinit var windowAreaController: WindowAreaControllerJavaAdapter
+    private var rearDisplaySession: WindowAreaSession? = null
+    private val infoLogAdapter = InfoLogAdapter()
+    private lateinit var binding: ActivityRearDisplayBinding
+    private lateinit var executor: Executor
+
+    private val rearDisplayStatusListener = Consumer<WindowAreaStatus> { status ->
+        infoLogAdapter.append(getCurrentTimeString(), status.toString())
+        infoLogAdapter.notifyDataSetChanged()
+        updateRearDisplayButton(status)
+    }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        binding = ActivityRearDisplayBinding.inflate(layoutInflater)
+        setContentView(binding.root)
+
+        executor = ContextCompat.getMainExecutor(this)
+        windowAreaController = WindowAreaControllerJavaAdapter(WindowAreaController.getOrCreate())
+
+        binding.rearStatusRecyclerView.adapter = infoLogAdapter
+
+        binding.rearDisplayButton.setOnClickListener {
+            if (rearDisplaySession != null) {
+                rearDisplaySession?.close()
+            } else {
+                windowAreaController.startRearDisplayModeSession(
+                    this,
+                    executor,
+                    this)
+            }
+        }
+    }
+
+    override fun onStart() {
+        super.onStart()
+        windowAreaController.addRearDisplayStatusListener(
+            executor,
+            rearDisplayStatusListener
+        )
+    }
+
+    override fun onStop() {
+        super.onStop()
+        windowAreaController.removeRearDisplayStatusListener(rearDisplayStatusListener)
+    }
+
+    override fun onSessionStarted(session: WindowAreaSession) {
+        rearDisplaySession = session
+        infoLogAdapter.append(getCurrentTimeString(), "RearDisplay Session has been started")
+        infoLogAdapter.notifyDataSetChanged()
+    }
+
+    override fun onSessionEnded() {
+        rearDisplaySession = null
+        infoLogAdapter.append(getCurrentTimeString(), "RearDisplay Session has ended")
+        infoLogAdapter.notifyDataSetChanged()
+    }
+
+    private fun updateRearDisplayButton(status: WindowAreaStatus) {
+        if (rearDisplaySession != null) {
+            binding.rearDisplayButton.isEnabled = true
+            binding.rearDisplayButton.text = "Disable RearDisplay Mode"
+            return
+        }
+        when (status) {
+            WindowAreaStatus.UNSUPPORTED -> {
+                binding.rearDisplayButton.isEnabled = false
+                binding.rearDisplayButton.text = "RearDisplay is not supported on this device"
+            }
+            WindowAreaStatus.UNAVAILABLE -> {
+                binding.rearDisplayButton.isEnabled = false
+                binding.rearDisplayButton.text = "RearDisplay is not currently available"
+            }
+            WindowAreaStatus.AVAILABLE -> {
+                binding.rearDisplayButton.isEnabled = true
+                binding.rearDisplayButton.text = "Enable RearDisplay Mode"
+            }
+        }
+    }
+
+    private fun getCurrentTimeString(): String {
+        val sdf = SimpleDateFormat("HH:mm:ss.SSS", Locale.getDefault())
+        val currentDate = sdf.format(Date())
+        return currentDate.toString()
+    }
+
+    private companion object {
+        private val TAG = RearDisplayActivityConfigChanges::class.java.simpleName
+    }
+}
\ No newline at end of file
diff --git a/window/window-samples/src/main/res/layout/activity_rear_display.xml b/window/window-samples/src/main/res/layout/activity_rear_display.xml
new file mode 100644
index 0000000..43bea60
--- /dev/null
+++ b/window/window-samples/src/main/res/layout/activity_rear_display.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  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.
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/rearStatusRecyclerView"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"/>
+
+    <Button
+        android:id="@+id/rear_display_button"
+        android:text="Enable RearDisplay"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAlignment="center"
+        android:layout_marginBottom="32dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/window/window-samples/src/main/res/values/strings.xml b/window/window-samples/src/main/res/values/strings.xml
index 5faaae6..25d5eef 100644
--- a/window/window-samples/src/main/res/values/strings.xml
+++ b/window/window-samples/src/main/res/values/strings.xml
@@ -51,4 +51,6 @@
     <string name="occlusion_is_none">Occlusion is none</string>
     <string name="window_metrics">Window metrics</string>
     <string name="window_metrics_description">Demo of using WindowMetrics API with activity handling rotations.</string>
+    <string name="rear_display">Rear Display Mode</string>
+    <string name="rear_display_description">Demo of observing to WindowAreaStatus and enabling/disabling RearDisplay mode</string>
 </resources>
diff --git a/window/window/api/current.txt b/window/window/api/current.txt
index 34894e5..a63779b 100644
--- a/window/window/api/current.txt
+++ b/window/window/api/current.txt
@@ -1,4 +1,13 @@
 // Signature format: 4.0
+package androidx.window {
+
+  public final class WindowProperty {
+    field public static final androidx.window.WindowProperty INSTANCE;
+    field public static final String PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE = "android.window.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE";
+  }
+
+}
+
 package androidx.window.layout {
 
   public interface DisplayFeature {
diff --git a/window/window/api/public_plus_experimental_current.txt b/window/window/api/public_plus_experimental_current.txt
index 63bd66e..d29e282 100644
--- a/window/window/api/public_plus_experimental_current.txt
+++ b/window/window/api/public_plus_experimental_current.txt
@@ -1,4 +1,45 @@
 // Signature format: 4.0
+package androidx.window {
+
+  public final class WindowProperty {
+    field public static final androidx.window.WindowProperty INSTANCE;
+    field public static final String PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE = "android.window.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE";
+  }
+
+}
+
+package androidx.window.area {
+
+  @androidx.window.core.ExperimentalWindowApi public interface WindowAreaController {
+    method public default static androidx.window.area.WindowAreaController getOrCreate();
+    field public static final androidx.window.area.WindowAreaController.Companion Companion;
+  }
+
+  public static final class WindowAreaController.Companion {
+    method public androidx.window.area.WindowAreaController getOrCreate();
+  }
+
+  @androidx.window.core.ExperimentalWindowApi public interface WindowAreaSession {
+    method public void close();
+  }
+
+  @androidx.window.core.ExperimentalWindowApi public interface WindowAreaSessionCallback {
+    method public void onSessionEnded();
+    method public void onSessionStarted(androidx.window.area.WindowAreaSession session);
+  }
+
+  @androidx.window.core.ExperimentalWindowApi public final class WindowAreaStatus {
+    field public static final androidx.window.area.WindowAreaStatus AVAILABLE;
+    field public static final androidx.window.area.WindowAreaStatus.Companion Companion;
+    field public static final androidx.window.area.WindowAreaStatus UNAVAILABLE;
+    field public static final androidx.window.area.WindowAreaStatus UNSUPPORTED;
+  }
+
+  public static final class WindowAreaStatus.Companion {
+  }
+
+}
+
 package androidx.window.core {
 
   @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalWindowApi {
diff --git a/window/window/api/restricted_current.txt b/window/window/api/restricted_current.txt
index 34894e5..a63779b 100644
--- a/window/window/api/restricted_current.txt
+++ b/window/window/api/restricted_current.txt
@@ -1,4 +1,13 @@
 // Signature format: 4.0
+package androidx.window {
+
+  public final class WindowProperty {
+    field public static final androidx.window.WindowProperty INSTANCE;
+    field public static final String PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE = "android.window.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE";
+  }
+
+}
+
 package androidx.window.layout {
 
   public interface DisplayFeature {
diff --git a/window/window/build.gradle b/window/window/build.gradle
index 34df327..eb44810 100644
--- a/window/window/build.gradle
+++ b/window/window/build.gradle
@@ -64,6 +64,7 @@
     testImplementation(compileOnly(project(":window:extensions:extensions")))
 
     androidTestImplementation(libs.testCore)
+    androidTestImplementation(libs.kotlinTestJunit)
     androidTestImplementation(libs.testExtJunit)
     androidTestImplementation(libs.testRunner)
     androidTestImplementation(libs.testRules)
diff --git a/window/window/src/androidTest/AndroidManifest.xml b/window/window/src/androidTest/AndroidManifest.xml
index bf604a6..af030c1 100644
--- a/window/window/src/androidTest/AndroidManifest.xml
+++ b/window/window/src/androidTest/AndroidManifest.xml
@@ -20,5 +20,10 @@
         <activity android:name="androidx.window.TestActivity" />
         <activity android:name="androidx.window.TestConfigChangeHandlingActivity"
             android:configChanges="orientation|screenLayout|screenSize"/>
+
+        <!-- ActivityEmbedding Property -->
+        <property
+            android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE"
+            android:value="true" />
     </application>
 </manifest>
diff --git a/window/window/src/androidTest/java/androidx/window/WindowPropertyTest.kt b/window/window/src/androidTest/java/androidx/window/WindowPropertyTest.kt
new file mode 100644
index 0000000..3dd1046
--- /dev/null
+++ b/window/window/src/androidTest/java/androidx/window/WindowPropertyTest.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2022 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.window
+
+import android.content.Context
+import android.content.pm.PackageManager
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import org.junit.Assert.assertTrue
+import org.junit.Assume.assumeTrue
+import org.junit.Rule
+import org.junit.Test
+
+class WindowPropertyTest {
+
+    @get:Rule
+    val activityRule = ActivityScenarioRule(TestActivity::class.java)
+
+    @Test
+    fun test_property_activity_embedding_allow_system_override() {
+        assumeTrue(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+            // No-op, but to suppress lint
+            return
+        }
+        activityRule.scenario.onActivity { activity ->
+            // Should be true as defined in AndroidManifest.xml
+            assertTrue(
+                getProperty(
+                    activity,
+                    WindowProperty.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE
+                )
+            )
+        }
+    }
+
+    @RequiresApi(Build.VERSION_CODES.S)
+    @Throws(PackageManager.NameNotFoundException::class)
+    private fun getProperty(context: Context, propertyName: String): Boolean {
+        val packageManager = context.packageManager
+        val property = packageManager.getProperty(
+            propertyName, context.applicationContext.packageName)
+        if (!property.isBoolean) {
+            throw IllegalStateException("Property=$propertyName must have a boolean value")
+        }
+        return property.boolean
+    }
+}
\ No newline at end of file
diff --git a/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt b/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt
new file mode 100644
index 0000000..a21185f
--- /dev/null
+++ b/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt
@@ -0,0 +1,217 @@
+/*
+ * 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.window.area
+
+import android.annotation.TargetApi
+import android.app.Activity
+import android.content.pm.ActivityInfo
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import androidx.window.TestActivity
+import androidx.window.TestConsumer
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.extensions.area.WindowAreaComponent
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.launch
+import org.junit.Assume.assumeTrue
+import org.junit.Rule
+import org.junit.Test
+import java.util.function.Consumer
+import kotlin.test.assertFailsWith
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.runTest
+import org.junit.Ignore
+
+@OptIn(ExperimentalCoroutinesApi::class, ExperimentalWindowApi::class)
+class WindowAreaControllerImplTest {
+
+    @get:Rule
+    public val activityScenario: ActivityScenarioRule<TestActivity> =
+        ActivityScenarioRule(TestActivity::class.java)
+
+    private val testScope = TestScope(UnconfinedTestDispatcher())
+
+    @Ignore // todo(b/222407443)
+    @TargetApi(Build.VERSION_CODES.N)
+    @Test
+    public fun testRearDisplayStatus(): Unit = testScope.runTest {
+        assumeTrue(Build.VERSION.SDK_INT > Build.VERSION_CODES.N)
+        activityScenario.scenario.onActivity {
+            val extensionComponent = FakeWindowAreaComponent()
+            val repo = WindowAreaControllerImpl(extensionComponent)
+            val collector = TestConsumer<WindowAreaStatus>()
+            extensionComponent
+                .updateStatusListeners(WindowAreaComponent.STATUS_UNAVAILABLE)
+            testScope.launch {
+                repo.rearDisplayStatus().collect(collector::accept)
+            }
+            collector.assertValue(WindowAreaStatus.UNAVAILABLE)
+            extensionComponent
+                .updateStatusListeners(WindowAreaComponent.STATUS_AVAILABLE)
+            collector.assertValues(
+                WindowAreaStatus.UNAVAILABLE,
+                WindowAreaStatus.AVAILABLE
+            )
+        }
+    }
+
+    @Ignore // todo(b/222407443)
+    @Test
+    public fun testRearDisplayStatusNullComponent(): Unit = testScope.runTest {
+        activityScenario.scenario.onActivity {
+            val repo = EmptyWindowAreaControllerImpl()
+            val collector = TestConsumer<WindowAreaStatus>()
+            testScope.launch {
+                repo.rearDisplayStatus().collect(collector::accept)
+            }
+            collector.assertValue(WindowAreaStatus.UNSUPPORTED)
+        }
+    }
+
+    /**
+     * Tests the rear display mode flow works as expected. Tests the flow
+     * through WindowAreaControllerImpl with a fake extension. This fake extension
+     * changes the orientation of the activity to landscape when rear display mode is enabled
+     * and then returns it back to portrait when it's disabled.
+     */
+    @Ignore // todo(b/222407443)
+    @TargetApi(Build.VERSION_CODES.N)
+    @Test
+    public fun testRearDisplayMode(): Unit = testScope.runTest {
+        val extensions = FakeWindowAreaComponent()
+        val repo = WindowAreaControllerImpl(extensions)
+        extensions.currentStatus = WindowAreaComponent.STATUS_AVAILABLE
+        val callback = TestWindowAreaSessionCallback()
+        activityScenario.scenario.onActivity { testActivity ->
+            testActivity.resetLayoutCounter()
+            testActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
+            testActivity.waitForLayout()
+        }
+
+        activityScenario.scenario.onActivity { testActivity ->
+            assert(testActivity.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
+            testActivity.resetLayoutCounter()
+            repo.rearDisplayMode(testActivity, Runnable::run, callback)
+        }
+
+        activityScenario.scenario.onActivity { testActivity ->
+            assert(testActivity.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
+            assert(callback.currentSession != null)
+            testActivity.resetLayoutCounter()
+            callback.endSession()
+        }
+        activityScenario.scenario.onActivity { testActivity ->
+            assert(testActivity.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
+            assert(callback.currentSession == null)
+        }
+    }
+
+    @Ignore // todo(b/222407443)
+    @TargetApi(Build.VERSION_CODES.N)
+    @Test
+    public fun testRearDisplayModeReturnsError(): Unit = testScope.runTest {
+        val extensionComponent = FakeWindowAreaComponent()
+        extensionComponent.currentStatus = WindowAreaComponent.STATUS_UNAVAILABLE
+        val repo = WindowAreaControllerImpl(extensionComponent)
+        val callback = TestWindowAreaSessionCallback()
+        activityScenario.scenario.onActivity { testActivity ->
+            assertFailsWith(
+                exceptionClass = UnsupportedOperationException::class,
+                block = { repo.rearDisplayMode(testActivity, Runnable::run, callback) }
+            )
+        }
+    }
+
+    @Ignore // todo(b/222407443)
+    @Test
+    public fun testRearDisplayModeNullComponent(): Unit = testScope.runTest {
+        val repo = EmptyWindowAreaControllerImpl()
+        val callback = TestWindowAreaSessionCallback()
+        activityScenario.scenario.onActivity { testActivity ->
+            assertFailsWith(
+                exceptionClass = UnsupportedOperationException::class,
+                block = { repo.rearDisplayMode(testActivity, Runnable::run, callback) }
+            )
+        }
+    }
+
+    private class FakeWindowAreaComponent : WindowAreaComponent {
+        val statusListeners = mutableListOf<Consumer<Int>>()
+        var currentStatus = WindowAreaComponent.STATUS_UNSUPPORTED
+        var testActivity: Activity? = null
+        var sessionConsumer: Consumer<Int>? = null
+
+        @RequiresApi(Build.VERSION_CODES.N)
+        override fun addRearDisplayStatusListener(consumer: Consumer<Int>) {
+            statusListeners.add(consumer)
+            consumer.accept(currentStatus)
+        }
+
+        override fun removeRearDisplayStatusListener(consumer: Consumer<Int>) {
+            statusListeners.remove(consumer)
+        }
+
+        // Fake WindowAreaComponent will change the orientation of the activity to signal
+        // entering rear display mode, as well as ending the session
+        @RequiresApi(Build.VERSION_CODES.N)
+        override fun startRearDisplaySession(
+            activity: Activity,
+            rearDisplaySessionConsumer: Consumer<Int>
+        ) {
+            if (currentStatus != WindowAreaComponent.STATUS_AVAILABLE) {
+                throw WindowAreaController.REAR_DISPLAY_ERROR
+            }
+            testActivity = activity
+            sessionConsumer = rearDisplaySessionConsumer
+            testActivity!!.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
+            rearDisplaySessionConsumer.accept(WindowAreaComponent.SESSION_STATE_ACTIVE)
+        }
+
+        @RequiresApi(Build.VERSION_CODES.N)
+        override fun endRearDisplaySession() {
+            testActivity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
+            sessionConsumer?.accept(WindowAreaComponent.SESSION_STATE_INACTIVE)
+        }
+
+        @RequiresApi(Build.VERSION_CODES.N)
+        fun updateStatusListeners(newStatus: Int) {
+            currentStatus = newStatus
+            for (consumer in statusListeners) {
+                consumer.accept(currentStatus)
+            }
+        }
+    }
+
+    private class TestWindowAreaSessionCallback : WindowAreaSessionCallback {
+
+        var currentSession: WindowAreaSession? = null
+        var error: Throwable? = null
+
+        override fun onSessionStarted(session: WindowAreaSession) {
+            currentSession = session
+        }
+
+        override fun onSessionEnded() {
+            currentSession = null
+        }
+
+        fun endSession() = currentSession?.close()
+    }
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/WindowProperty.kt b/window/window/src/main/java/androidx/window/WindowProperty.kt
new file mode 100644
index 0000000..e835d114
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/WindowProperty.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2022 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.window
+
+/**
+ * Window related [android.content.pm.PackageManager.Property] tags for developers to define in app
+ * AndroidManifest.
+ */
+object WindowProperty {
+    /**
+     * Application level [android.content.pm.PackageManager.Property] tag for developers to
+     * provide consent for their app to allow OEMs to manually provide ActivityEmbedding split
+     * rule configuration on behalf of the app.
+     * <p>If `true`, the system CAN override the windowing behaviors for the app, such as
+     * showing some activities side-by-side. In this case, it will report that ActivityEmbedding
+     * APIs are disabled for the app to avoid conflict.
+     * <p>If `false`, the system MUST NOT override the window behavior for the app. It should
+     * be used if the app wants to provide their own ActivityEmbedding split rules, or if the
+     * app wants to opt-out of system overrides for any other reason.
+     * <p>Example usage:
+     * <pre>
+     * &lt;application&gt;
+     *   &lt;property
+     *     android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE"
+     *     android:value="true|false"/&gt;
+     * &lt;/application&gt;
+     * </pre>
+     */
+    const val PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE =
+        "android.window.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE"
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/area/EmptyWindowAreaControllerImpl.kt b/window/window/src/main/java/androidx/window/area/EmptyWindowAreaControllerImpl.kt
new file mode 100644
index 0000000..996c7ad
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/EmptyWindowAreaControllerImpl.kt
@@ -0,0 +1,42 @@
+/*
+ * 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.window.area
+
+import android.app.Activity
+import androidx.window.core.ExperimentalWindowApi
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flowOf
+import java.util.concurrent.Executor
+
+/**
+ * Empty Implementation for devices that do not
+ * support the [WindowAreaController] functionality
+ */
+@ExperimentalWindowApi
+internal class EmptyWindowAreaControllerImpl : WindowAreaController {
+    override fun rearDisplayStatus(): Flow<WindowAreaStatus> {
+        return flowOf(WindowAreaStatus.UNSUPPORTED)
+    }
+
+    override fun rearDisplayMode(
+        activity: Activity,
+        executor: Executor,
+        windowAreaSessionCallback: WindowAreaSessionCallback
+    ) {
+        throw WindowAreaController.REAR_DISPLAY_ERROR
+    }
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/area/RearDisplaySessionImpl.kt b/window/window/src/main/java/androidx/window/area/RearDisplaySessionImpl.kt
new file mode 100644
index 0000000..9a5bbd3
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/RearDisplaySessionImpl.kt
@@ -0,0 +1,30 @@
+/*
+ * 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.window.area
+
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.extensions.area.WindowAreaComponent
+
+@ExperimentalWindowApi
+internal class RearDisplaySessionImpl(
+    private val windowAreaComponent: WindowAreaComponent
+) : WindowAreaSession {
+
+    override fun close() {
+        windowAreaComponent.endRearDisplaySession()
+    }
+}
diff --git a/window/window/src/main/java/androidx/window/area/WindowAreaController.kt b/window/window/src/main/java/androidx/window/area/WindowAreaController.kt
new file mode 100644
index 0000000..05aa96e
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaController.kt
@@ -0,0 +1,126 @@
+/*
+ * 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.window.area
+
+import android.app.Activity
+import android.os.Build
+import android.util.Log
+import androidx.annotation.RestrictTo
+import androidx.window.core.BuildConfig
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.core.SpecificationComputer
+import androidx.window.extensions.WindowExtensionsProvider
+import androidx.window.extensions.area.WindowAreaComponent
+import kotlinx.coroutines.flow.Flow
+import java.util.concurrent.Executor
+import kotlin.jvm.Throws
+
+/**
+ * An interface to provide the information and behavior around moving windows between
+ * displays or display areas on a device.
+ */
+@ExperimentalWindowApi
+interface WindowAreaController {
+
+    /*
+    Marked with RestrictTo as we iterate and define the
+    Kotlin API we want to provide.
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public fun rearDisplayStatus(): Flow<WindowAreaStatus>
+
+    /*
+    Marked with RestrictTo as we iterate and define the
+    Kotlin API we want to provide.
+     */
+    @Throws(UnsupportedOperationException::class)
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public fun rearDisplayMode(
+        activity: Activity,
+        executor: Executor,
+        windowAreaSessionCallback: WindowAreaSessionCallback
+    )
+
+    public companion object {
+        internal val REAR_DISPLAY_ERROR =
+            UnsupportedOperationException("Rear Display mode cannot be enabled currently")
+
+        private val TAG = WindowAreaController::class.simpleName
+
+        private var decorator: WindowAreaControllerDecorator = EmptyDecorator
+
+        /**
+         * Provides an instance of [WindowAreaController].
+         */
+        @JvmName("getOrCreate")
+        @JvmStatic
+        public fun getOrCreate(): WindowAreaController {
+            var windowAreaComponentExtensions: WindowAreaComponent?
+            try {
+                windowAreaComponentExtensions = WindowExtensionsProvider
+                    .getWindowExtensions()
+                    .windowAreaComponent
+            } catch (t: Throwable) {
+                if (BuildConfig.verificationMode == SpecificationComputer.VerificationMode.STRICT) {
+                    Log.d(TAG, "Failed to load WindowExtensions")
+                }
+                windowAreaComponentExtensions = null
+            }
+            val controller =
+                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N ||
+                    windowAreaComponentExtensions == null) {
+                    EmptyWindowAreaControllerImpl()
+                } else {
+                    WindowAreaControllerImpl(windowAreaComponentExtensions)
+                }
+            return decorator.decorate(controller)
+        }
+
+        @JvmStatic
+        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+        public fun overrideDecorator(overridingDecorator: WindowAreaControllerDecorator) {
+            decorator = overridingDecorator
+        }
+
+        @JvmStatic
+        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+        public fun reset() {
+            decorator = EmptyDecorator
+        }
+    }
+}
+
+/**
+ * Decorator that allows us to provide different functionality
+ * in our window-testing artifact.
+ */
+@ExperimentalWindowApi
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface WindowAreaControllerDecorator {
+    /**
+     * Returns an instance of [WindowAreaController] associated to the [Activity]
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public fun decorate(controller: WindowAreaController): WindowAreaController
+}
+
+@ExperimentalWindowApi
+private object EmptyDecorator : WindowAreaControllerDecorator {
+    override fun decorate(controller: WindowAreaController): WindowAreaController {
+        return controller
+    }
+}
diff --git a/window/window/src/main/java/androidx/window/area/WindowAreaControllerImpl.kt b/window/window/src/main/java/androidx/window/area/WindowAreaControllerImpl.kt
new file mode 100644
index 0000000..0e156818
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaControllerImpl.kt
@@ -0,0 +1,131 @@
+/*
+ * 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.window.area
+
+import android.app.Activity
+import android.os.Build
+import android.util.Log
+import androidx.annotation.RequiresApi
+import androidx.window.core.BuildConfig
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.core.SpecificationComputer
+import androidx.window.extensions.area.WindowAreaComponent
+import kotlinx.coroutines.channels.BufferOverflow
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.flow
+import java.util.concurrent.Executor
+import java.util.function.Consumer
+
+/**
+ * Implementation of WindowAreaController for devices
+ * that do implement the WindowAreaComponent on device.
+ *
+ * Requires [Build.VERSION_CODES.N] due to the use of [Consumer].
+ * Will not be created though on API levels lower than
+ * [Build.VERSION_CODES.S] as that's the min level of support for
+ * this functionality.
+ */
+@ExperimentalWindowApi
+@RequiresApi(Build.VERSION_CODES.N)
+internal class WindowAreaControllerImpl(
+    private val windowAreaComponent: WindowAreaComponent
+) : WindowAreaController {
+
+    private lateinit var rearDisplaySessionConsumer: Consumer<Int>
+    private var currentStatus: WindowAreaStatus? = null
+
+    override fun rearDisplayStatus(): Flow<WindowAreaStatus> {
+        return flow {
+            val channel = Channel<WindowAreaStatus>(
+                capacity = BUFFER_CAPACITY,
+                onBufferOverflow = BufferOverflow.DROP_OLDEST
+            )
+            val listener = Consumer<Int> { status ->
+                currentStatus = WindowAreaStatus.translate(status)
+                channel.trySend(currentStatus ?: WindowAreaStatus.UNSUPPORTED)
+            }
+            windowAreaComponent.addRearDisplayStatusListener(listener)
+            try {
+                for (item in channel) {
+                    emit(item)
+                }
+            } finally {
+                windowAreaComponent.removeRearDisplayStatusListener(listener)
+            }
+        }.distinctUntilChanged()
+    }
+
+    override fun rearDisplayMode(
+        activity: Activity,
+        executor: Executor,
+        windowAreaSessionCallback: WindowAreaSessionCallback
+    ) {
+        // If we already have a status value that is not [WindowAreaStatus.AVAILABLE]
+        // we should throw an exception quick to indicate they tried to enable
+        // RearDisplay mode when it was not available.
+        if (currentStatus != null && currentStatus != WindowAreaStatus.AVAILABLE) {
+            throw WindowAreaController.REAR_DISPLAY_ERROR
+        }
+        rearDisplaySessionConsumer =
+            RearDisplaySessionConsumer(windowAreaSessionCallback, windowAreaComponent)
+        windowAreaComponent.startRearDisplaySession(activity, rearDisplaySessionConsumer)
+    }
+
+    internal class RearDisplaySessionConsumer(
+        private val appCallback: WindowAreaSessionCallback,
+        private val extensionsComponent: WindowAreaComponent
+    ) : Consumer<Int> {
+
+        private var session: WindowAreaSession? = null
+
+        override fun accept(sessionStatus: Int) {
+            when (sessionStatus) {
+                WindowAreaComponent.SESSION_STATE_ACTIVE -> onSessionStarted()
+                WindowAreaComponent.SESSION_STATE_INACTIVE -> onSessionFinished()
+                else -> {
+                    if (BuildConfig.verificationMode ==
+                            SpecificationComputer.VerificationMode.STRICT) {
+                        Log.d(TAG, "Received an unknown session status value: $sessionStatus")
+                    }
+                    onSessionFinished()
+                }
+            }
+        }
+
+        private fun onSessionStarted() {
+            session = RearDisplaySessionImpl(extensionsComponent)
+            session?.let { appCallback.onSessionStarted(it) }
+        }
+
+        private fun onSessionFinished() {
+            session = null
+            appCallback.onSessionEnded()
+        }
+    }
+
+    internal companion object {
+        private val TAG = WindowAreaControllerImpl::class.simpleName
+        /*
+        Chosen as 10 for a base default value. We shouldn't be receiving
+        many changes to window area status so this is enough capacity
+        to not end up blocking.
+         */
+        private const val BUFFER_CAPACITY = 10
+    }
+}
diff --git a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt b/window/window/src/main/java/androidx/window/area/WindowAreaSession.kt
similarity index 61%
copy from glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
copy to window/window/src/main/java/androidx/window/area/WindowAreaSession.kt
index 8aed834..6cdbd12 100644
--- a/glance/glance-appwidget-preview/src/androidMain/kotlin/androidx/glance/appwidget/preview/PreviewGlance.kt
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaSession.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,15 +14,16 @@
  * limitations under the License.
  */
 
-package androidx.glance.appwidget.preview
+package androidx.window.area
 
-import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
+import androidx.window.core.ExperimentalWindowApi
 
-@Retention(AnnotationRetention.SOURCE)
-@Target(
-    AnnotationTarget.ANNOTATION_CLASS,
-    AnnotationTarget.FUNCTION
-)
-@ExperimentalGlanceRemoteViewsApi
-@Repeatable
-annotation class PreviewGlance
\ No newline at end of file
+/**
+ * Session interface to represent a long-standing
+ * WindowArea mode or feature that provides a handle
+ * to close the session.
+ */
+@ExperimentalWindowApi
+public interface WindowAreaSession {
+    fun close()
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/area/WindowAreaSessionCallback.kt b/window/window/src/main/java/androidx/window/area/WindowAreaSessionCallback.kt
new file mode 100644
index 0000000..80842c4
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaSessionCallback.kt
@@ -0,0 +1,31 @@
+/*
+ * 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.window.area
+
+import androidx.window.core.ExperimentalWindowApi
+
+/** Callback to update the client on the WindowArea Session being
+ * started and ended.
+ * TODO(b/207720511) Move to window-java module when Kotlin API Finalized
+ */
+@ExperimentalWindowApi
+interface WindowAreaSessionCallback {
+
+    fun onSessionStarted(session: WindowAreaSession)
+
+    fun onSessionEnded()
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/area/WindowAreaStatus.kt b/window/window/src/main/java/androidx/window/area/WindowAreaStatus.kt
new file mode 100644
index 0000000..f60d8f5
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaStatus.kt
@@ -0,0 +1,62 @@
+/*
+ * 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.window.area
+
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.extensions.area.WindowAreaComponent
+
+/**
+ * Represents a window area status.
+ */
+@ExperimentalWindowApi
+class WindowAreaStatus private constructor(private val mDescription: String) {
+    override fun toString(): String {
+        return mDescription
+    }
+
+    companion object {
+        /**
+         * Status representing that the WindowArea feature is not a supported
+         * feature on the device.
+         */
+        @JvmField
+        val UNSUPPORTED = WindowAreaStatus("UNSUPPORTED")
+
+        /**
+         * Status representing that the WindowArea feature is currently not available
+         * to be enabled. This could be due to another process has enabled it, or that the
+         * current device configuration doesn't allow it.
+         */
+        @JvmField
+        val UNAVAILABLE = WindowAreaStatus("UNAVAILABLE")
+
+        /**
+         * Status representing that the WindowArea feature is available to be enabled.
+         */
+        @JvmField
+        val AVAILABLE = WindowAreaStatus("AVAILABLE")
+
+        @JvmStatic
+        internal fun translate(status: Int): WindowAreaStatus {
+            return when (status) {
+                WindowAreaComponent.STATUS_AVAILABLE -> AVAILABLE
+                WindowAreaComponent.STATUS_UNAVAILABLE -> UNAVAILABLE
+                else -> UNSUPPORTED
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/window/window/src/test/java/androidx/window/area/WindowAreaStatusUnitTest.kt b/window/window/src/test/java/androidx/window/area/WindowAreaStatusUnitTest.kt
new file mode 100644
index 0000000..04d3702
--- /dev/null
+++ b/window/window/src/test/java/androidx/window/area/WindowAreaStatusUnitTest.kt
@@ -0,0 +1,49 @@
+/*
+ * 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.window.area
+
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.extensions.area.WindowAreaComponent
+import org.junit.Test
+
+/**
+ * Unit tests for [WindowAreaStatus] that run on the JVM.
+ */
+@OptIn(ExperimentalWindowApi::class)
+class WindowAreaStatusUnitTest {
+
+    @Test
+    fun testWindowAreaStatusTranslateValueAvailable() {
+        val expected = WindowAreaStatus.AVAILABLE
+        val translateValue = WindowAreaStatus.translate(WindowAreaComponent.STATUS_AVAILABLE)
+        assert(expected == translateValue)
+    }
+
+    @Test
+    fun testWindowAreaStatusTranslateValueUnavailable() {
+        val expected = WindowAreaStatus.UNAVAILABLE
+        val translateValue = WindowAreaStatus.translate(WindowAreaComponent.STATUS_UNAVAILABLE)
+        assert(expected == translateValue)
+    }
+
+    @Test
+    fun testWindowAreaStatusTranslateValueUnsupported() {
+        val expected = WindowAreaStatus.UNSUPPORTED
+        val translateValue = WindowAreaStatus.translate(WindowAreaComponent.STATUS_UNSUPPORTED)
+        assert(expected == translateValue)
+    }
+}
\ No newline at end of file
diff --git a/work/integration-tests/testapp/src/main/AndroidManifest.xml b/work/integration-tests/testapp/src/main/AndroidManifest.xml
index 9ab778a..ab76a90 100644
--- a/work/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/work/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -16,6 +16,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools">
 
+    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
     <application
         android:name=".TestApplication"
         android:allowBackup="true"
diff --git a/work/work-inspection/lint-baseline.xml b/work/work-inspection/lint-baseline.xml
index 518945a..2ddb484 100644
--- a/work/work-inspection/lint-baseline.xml
+++ b/work/work-inspection/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="RemoveWorkManagerInitializer"
diff --git a/work/work-multiprocess/lint-baseline.xml b/work/work-multiprocess/lint-baseline.xml
deleted file mode 100644
index 17feda2..0000000
--- a/work/work-multiprocess/lint-baseline.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="UnknownNullness"
-        message="Should explicitly declare type here since implicit type does not specify nullness"
-        errorLine1="    public suspend fun setProgress(data: Data) {"
-        errorLine2="                       ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/work/multiprocess/RemoteCoroutineWorker.kt"/>
-    </issue>
-
-</issues>
diff --git a/work/work-runtime-ktx/api/2.7.0-beta01.txt b/work/work-runtime-ktx/api/2.7.0-beta01.txt
index 8535d65..2c5f419 100644
--- a/work/work-runtime-ktx/api/2.7.0-beta01.txt
+++ b/work/work-runtime-ktx/api/2.7.0-beta01.txt
@@ -5,8 +5,6 @@
     ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
     method public abstract suspend Object? doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
     method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
-    method public suspend Object? getForegroundInfo(kotlin.coroutines.Continuation<? super androidx.work.ForegroundInfo> p);
-    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo> getForegroundInfoAsync();
     method public final void onStopped();
     method public final suspend Object? setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public final suspend Object? setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
diff --git a/work/work-runtime-ktx/api/public_plus_experimental_2.7.0-beta01.txt b/work/work-runtime-ktx/api/public_plus_experimental_2.7.0-beta01.txt
index 8535d65..2d666e3 100644
--- a/work/work-runtime-ktx/api/public_plus_experimental_2.7.0-beta01.txt
+++ b/work/work-runtime-ktx/api/public_plus_experimental_2.7.0-beta01.txt
@@ -5,8 +5,8 @@
     ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
     method public abstract suspend Object? doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
     method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
-    method public suspend Object? getForegroundInfo(kotlin.coroutines.Continuation<? super androidx.work.ForegroundInfo> p);
-    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo> getForegroundInfoAsync();
+    method @androidx.work.ExperimentalExpeditedWork public suspend Object? getForegroundInfo(kotlin.coroutines.Continuation<? super androidx.work.ForegroundInfo> p);
+    method @androidx.work.ExperimentalExpeditedWork public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo> getForegroundInfoAsync();
     method public final void onStopped();
     method public final suspend Object? setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public final suspend Object? setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
diff --git a/work/work-runtime-ktx/api/restricted_2.7.0-beta01.txt b/work/work-runtime-ktx/api/restricted_2.7.0-beta01.txt
index 8535d65..2c5f419 100644
--- a/work/work-runtime-ktx/api/restricted_2.7.0-beta01.txt
+++ b/work/work-runtime-ktx/api/restricted_2.7.0-beta01.txt
@@ -5,8 +5,6 @@
     ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
     method public abstract suspend Object? doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
     method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
-    method public suspend Object? getForegroundInfo(kotlin.coroutines.Continuation<? super androidx.work.ForegroundInfo> p);
-    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo> getForegroundInfoAsync();
     method public final void onStopped();
     method public final suspend Object? setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public final suspend Object? setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
diff --git a/work/work-runtime-ktx/lint-baseline.xml b/work/work-runtime-ktx/lint-baseline.xml
deleted file mode 100644
index 1a8a9a7..0000000
--- a/work/work-runtime-ktx/lint-baseline.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
-
-    <issue
-        id="UnknownNullness"
-        message="Should explicitly declare type here since implicit type does not specify nullness"
-        errorLine1="    public suspend fun setProgress(data: Data) {"
-        errorLine2="                       ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/work/CoroutineWorker.kt"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Should explicitly declare type here since implicit type does not specify nullness"
-        errorLine1="    public suspend fun setForeground(foregroundInfo: ForegroundInfo) {"
-        errorLine2="                       ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/work/CoroutineWorker.kt"/>
-    </issue>
-
-</issues>
diff --git a/work/work-runtime/api/2.7.0-beta01.txt b/work/work-runtime/api/2.7.0-beta01.txt
index a6de624..54713f5 100644
--- a/work/work-runtime/api/2.7.0-beta01.txt
+++ b/work/work-runtime/api/2.7.0-beta01.txt
@@ -154,7 +154,6 @@
   public abstract class ListenableWorker {
     ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
     method public final android.content.Context getApplicationContext();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo!> getForegroundInfoAsync();
     method public final java.util.UUID getId();
     method public final androidx.work.Data getInputData();
     method @RequiresApi(28) public final android.net.Network? getNetwork();
@@ -216,11 +215,6 @@
   public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
   }
 
-  public enum OutOfQuotaPolicy {
-    enum_constant public static final androidx.work.OutOfQuotaPolicy DROP_WORK_REQUEST;
-    enum_constant public static final androidx.work.OutOfQuotaPolicy RUN_AS_NON_EXPEDITED_WORK_REQUEST;
-  }
-
   public final class OverwritingInputMerger extends androidx.work.InputMerger {
     ctor public OverwritingInputMerger();
     method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
@@ -347,7 +341,6 @@
     method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
     method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
     method public final B setConstraints(androidx.work.Constraints);
-    method public B setExpedited(androidx.work.OutOfQuotaPolicy);
     method public B setInitialDelay(long, java.util.concurrent.TimeUnit);
     method @RequiresApi(26) public B setInitialDelay(java.time.Duration);
     method public final B setInputData(androidx.work.Data);
diff --git a/work/work-runtime/api/public_plus_experimental_2.7.0-beta01.txt b/work/work-runtime/api/public_plus_experimental_2.7.0-beta01.txt
index a6de624..0c2f419 100644
--- a/work/work-runtime/api/public_plus_experimental_2.7.0-beta01.txt
+++ b/work/work-runtime/api/public_plus_experimental_2.7.0-beta01.txt
@@ -129,6 +129,9 @@
     enum_constant public static final androidx.work.ExistingWorkPolicy REPLACE;
   }
 
+  @experimental.Experimental(level=androidx.annotation.experimental.Experimental.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PACKAGE}) public @interface ExperimentalExpeditedWork {
+  }
+
   public final class ForegroundInfo {
     ctor public ForegroundInfo(int, android.app.Notification);
     ctor public ForegroundInfo(int, android.app.Notification, int);
@@ -154,7 +157,7 @@
   public abstract class ListenableWorker {
     ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
     method public final android.content.Context getApplicationContext();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo!> getForegroundInfoAsync();
+    method @androidx.work.ExperimentalExpeditedWork public com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo!> getForegroundInfoAsync();
     method public final java.util.UUID getId();
     method public final androidx.work.Data getInputData();
     method @RequiresApi(28) public final android.net.Network? getNetwork();
@@ -216,7 +219,7 @@
   public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
   }
 
-  public enum OutOfQuotaPolicy {
+  @androidx.work.ExperimentalExpeditedWork public enum OutOfQuotaPolicy {
     enum_constant public static final androidx.work.OutOfQuotaPolicy DROP_WORK_REQUEST;
     enum_constant public static final androidx.work.OutOfQuotaPolicy RUN_AS_NON_EXPEDITED_WORK_REQUEST;
   }
@@ -347,7 +350,7 @@
     method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
     method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
     method public final B setConstraints(androidx.work.Constraints);
-    method public B setExpedited(androidx.work.OutOfQuotaPolicy);
+    method @androidx.work.ExperimentalExpeditedWork public B setExpedited(androidx.work.OutOfQuotaPolicy);
     method public B setInitialDelay(long, java.util.concurrent.TimeUnit);
     method @RequiresApi(26) public B setInitialDelay(java.time.Duration);
     method public final B setInputData(androidx.work.Data);
diff --git a/work/work-runtime/api/restricted_2.7.0-beta01.txt b/work/work-runtime/api/restricted_2.7.0-beta01.txt
index a6de624..54713f5 100644
--- a/work/work-runtime/api/restricted_2.7.0-beta01.txt
+++ b/work/work-runtime/api/restricted_2.7.0-beta01.txt
@@ -154,7 +154,6 @@
   public abstract class ListenableWorker {
     ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
     method public final android.content.Context getApplicationContext();
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo!> getForegroundInfoAsync();
     method public final java.util.UUID getId();
     method public final androidx.work.Data getInputData();
     method @RequiresApi(28) public final android.net.Network? getNetwork();
@@ -216,11 +215,6 @@
   public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
   }
 
-  public enum OutOfQuotaPolicy {
-    enum_constant public static final androidx.work.OutOfQuotaPolicy DROP_WORK_REQUEST;
-    enum_constant public static final androidx.work.OutOfQuotaPolicy RUN_AS_NON_EXPEDITED_WORK_REQUEST;
-  }
-
   public final class OverwritingInputMerger extends androidx.work.InputMerger {
     ctor public OverwritingInputMerger();
     method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
@@ -347,7 +341,6 @@
     method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
     method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
     method public final B setConstraints(androidx.work.Constraints);
-    method public B setExpedited(androidx.work.OutOfQuotaPolicy);
     method public B setInitialDelay(long, java.util.concurrent.TimeUnit);
     method @RequiresApi(26) public B setInitialDelay(java.time.Duration);
     method public final B setInputData(androidx.work.Data);
diff --git a/work/work-runtime/lint-baseline.xml b/work/work-runtime/lint-baseline.xml
index f683ddb..2da88be 100644
--- a/work/work-runtime/lint-baseline.xml
+++ b/work/work-runtime/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha05)" variant="all" version="7.4.0-alpha05">
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java b/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
index 4890888..db9546b 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
@@ -255,6 +255,7 @@
         });
     }
 
+    @SuppressWarnings("deprecation")
     @MainThread
     private void handleNotify(@NonNull Intent intent) {
         int notificationId = intent.getIntExtra(KEY_NOTIFICATION_ID, 0);
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java b/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java
index 424ba31..3055080 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundService.java
@@ -16,6 +16,7 @@
 
 package androidx.work.impl.foreground;
 
+import android.Manifest;
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.Service;
@@ -30,6 +31,7 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
 import androidx.annotation.RestrictTo;
 import androidx.lifecycle.LifecycleService;
 import androidx.work.Logger;
@@ -133,6 +135,7 @@
         });
     }
 
+    @RequiresPermission(Manifest.permission.POST_NOTIFICATIONS)
     @Override
     public void notify(final int notificationId, @NonNull final Notification notification) {
         mHandler.post(new Runnable() {